the other way round
This commit is contained in:
+39
-12
@@ -260,9 +260,9 @@ function circleOnRect(
|
||||
if (hitY >= top && hitY <= bottom) {
|
||||
return;
|
||||
}
|
||||
|
||||
const dx = ax - (hitX < left ? left : right);
|
||||
const dy = ay - (hitY < top ? top : bottom);
|
||||
|
||||
const time = castOnCircle(dx, dy, vx, vy, radius);
|
||||
if (time === null) {
|
||||
collision.cid = "";
|
||||
@@ -291,17 +291,44 @@ function rectOnCircle(
|
||||
colliderB: Collider,
|
||||
positionB: Vector,
|
||||
delta: number,
|
||||
) {}
|
||||
) {
|
||||
const cWidth = (colliderA.body as Rect).width / 2;
|
||||
const cHeight = (colliderA.body as Rect).height / 2;
|
||||
const radius = (colliderB.body as Circle).radius;
|
||||
|
||||
function rectOnRect(
|
||||
collision: Collision,
|
||||
colliderA: Collider,
|
||||
positionA: Vector,
|
||||
velocityA: Vector,
|
||||
colliderB: Collider,
|
||||
positionB: Vector,
|
||||
delta: number,
|
||||
) {}
|
||||
const ax = positionA.x + colliderB.offset.x + cWidth;
|
||||
const ay = positionA.y + colliderB.offset.y + cHeight;
|
||||
const bx = positionB.x + colliderA.offset.x + radius;
|
||||
const by = positionB.y + colliderA.offset.y + radius;
|
||||
|
||||
const vx = velocityA.x * delta;
|
||||
const vy = velocityA.y * delta;
|
||||
|
||||
const left = bx - cWidth;
|
||||
const right = bx + cWidth;
|
||||
const hitX = ax + vx * collision.time;
|
||||
if (hitX >= left && hitX <= right) {
|
||||
return;
|
||||
}
|
||||
|
||||
const top = by - cHeight;
|
||||
const bottom = by + cHeight;
|
||||
const hitY = ay + vy * collision.time;
|
||||
if (hitY >= top && hitY <= bottom) {
|
||||
return;
|
||||
}
|
||||
|
||||
const dx = ax - (hitX < left ? left : right);
|
||||
const dy = ay - (hitY < top ? top : bottom);
|
||||
const time = castOnCircle(dx, dy, vx, vy, radius);
|
||||
if (time === null) {
|
||||
collision.cid = "";
|
||||
return;
|
||||
}
|
||||
|
||||
collision.time = time;
|
||||
invScale(collision.normal, dx + vx * time, dy + vy * time);
|
||||
}
|
||||
|
||||
function rectOnPolygon(
|
||||
collision: Collision,
|
||||
@@ -349,7 +376,7 @@ const circleCollide: Array<Collide> = [
|
||||
circleOnPolygon,
|
||||
];
|
||||
|
||||
const rectCollide: Array<Collide> = [rectOnCircle, rectOnRect, rectOnPolygon];
|
||||
const rectCollide: Array<Collide> = [rectOnCircle, () => {}, rectOnPolygon];
|
||||
|
||||
const polygonCollide: Array<Collide> = [
|
||||
polygonOnCircle,
|
||||
|
||||
Reference in New Issue
Block a user