This commit is contained in:
schmelczerandras 2020-11-04 22:05:21 +01:00
commit 57d7009342
3 changed files with 204 additions and 251 deletions

View file

@ -1,9 +1,10 @@
import { vec2 } from 'gl-matrix';
import { exertsForce } from '../../objects/capabilities/exerts-force';
import { Physical } from '../physicals/physical';
export const forceAtPosition = (position: vec2, objects: Array<Physical>) =>
objects.reduce(
(sum: vec2, o: Physical) =>
!o.canMove ? vec2.add(sum, sum, o.getForce(position)) : sum,
exertsForce(o) ? vec2.add(sum, sum, o.getForce(position)) : sum,
vec2.create(),
);

View file

@ -1,7 +1,7 @@
import { vec2 } from 'gl-matrix';
import { Circle, GameObject, rotate90Deg } from 'shared';
import { CirclePhysical } from '../../objects/circle-physical';
import { reactsToCollision } from './reacts-to-collision';
import { reactsToCollision } from '../../objects/capabilities/reacts-to-collision';
import { evaluateSdf } from './evaluate-sdf';
import { Physical } from '../physicals/physical';
@ -11,10 +11,8 @@ export const moveCircle = (
possibleIntersectors: Array<Physical>,
ignoreCollision = false,
): {
realDelta: vec2;
hitSurface: boolean;
normal?: vec2;
tangent?: vec2;
hitObject?: GameObject;
} => {
const direction = vec2.clone(delta);
@ -78,16 +76,10 @@ export const moveCircle = (
]);
const normal = vec2.fromValues(dx, dy);
vec2.normalize(normal, normal);
const rotatedNormal = rotate90Deg(normal);
return {
realDelta: delta,
hitSurface: true,
normal,
hitObject: intersecting?.gameObject,
tangent:
vec2.dot(rotatedNormal, delta) < 0
? vec2.scale(rotatedNormal, rotatedNormal, -1)
: rotatedNormal,
};
}
@ -97,7 +89,6 @@ export const moveCircle = (
vec2.add(circle.center, circle.center, delta);
return {
realDelta: delta,
hitSurface: false,
};
};

View file

@ -1,8 +0,0 @@
import { GameObject } from 'shared';
export interface ReactsToCollision {
onCollision(other: GameObject): void;
}
export const reactsToCollision = (a: any): a is ReactsToCollision =>
a && 'onCollision' in a;