This commit is contained in:
Schluffe
2026-04-06 23:06:13 +02:00
parent 019304d25a
commit 03f4119e8c
2 changed files with 72 additions and 15 deletions
+72 -14
View File
@@ -165,7 +165,7 @@ function sweptAABB(
return time; return time;
} }
function collideWithCircle( function circleOnCircle(
collision: Collision, collision: Collision,
colliderA: Collider, colliderA: Collider,
positionA: Vector, positionA: Vector,
@@ -195,11 +195,13 @@ function collideWithCircle(
let disc = b * b - 4 * a * c; let disc = b * b - 4 * a * c;
if (disc >= 0) { if (disc >= 0) {
disc = Math.sqrt(disc); disc = Math.sqrt(disc);
const time = (-b - disc) / (2 * a); const time = (-b - disc) / (2 * a);
if (time >= 0 && time <= 1) { if (time >= 0 && time <= 1) {
const nx = dx + disX * time; const nx = dx + disX * time;
const ny = dy + disY * time; const ny = dy + disY * time;
const inv = 1.0 / Math.sqrt(nx * nx + ny * ny); const inv = 1.0 / Math.sqrt(nx * nx + ny * ny);
collision.normal.x = nx * inv; collision.normal.x = nx * inv;
collision.normal.y = ny * inv; collision.normal.y = ny * inv;
collision.time = time; collision.time = time;
@@ -214,7 +216,7 @@ function collideWithCircle(
collision.normal.y = 0; collision.normal.y = 0;
} }
function collideWithRect( function circleOnRect(
collision: Collision, collision: Collision,
colliderA: Collider, colliderA: Collider,
positionA: Vector, positionA: Vector,
@@ -224,7 +226,67 @@ function collideWithRect(
delta: number, delta: number,
) {} ) {}
function collideWithPolygon( function circleOnPolygon(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function rectOnCircle(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function rectOnRect(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function rectOnPolygon(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function polygonOnCircle(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function polygonOnRect(
collision: Collision,
colliderA: Collider,
positionA: Vector,
velocityA: Vector,
colliderB: Collider,
positionB: Vector,
delta: number,
) {}
function polygonOnPolygon(
collision: Collision, collision: Collision,
colliderA: Collider, colliderA: Collider,
positionA: Vector, positionA: Vector,
@@ -235,21 +297,17 @@ function collideWithPolygon(
) {} ) {}
const circleCollide: Array<Collide> = [ const circleCollide: Array<Collide> = [
collideWithCircle, circleOnCircle,
collideWithRect, circleOnRect,
collideWithPolygon, circleOnPolygon,
]; ];
const rectCollide: Array<Collide> = [ const rectCollide: Array<Collide> = [rectOnCircle, rectOnRect, rectOnPolygon];
collideWithCircle,
collideWithRect,
collideWithPolygon,
];
const polygonCollide: Array<Collide> = [ const polygonCollide: Array<Collide> = [
collideWithCircle, polygonOnCircle,
collideWithRect, polygonOnRect,
collideWithPolygon, polygonOnPolygon,
]; ];
function createCollisionBuffer(size: number): CollisionBuffer { function createCollisionBuffer(size: number): CollisionBuffer {
-1
View File
@@ -1,7 +1,6 @@
import { createCircle, strokeCircle } from "#/engine/Circle.ts"; import { createCircle, strokeCircle } from "#/engine/Circle.ts";
import { pointer } from "#/engine/Pointer.ts"; import { pointer } from "#/engine/Pointer.ts";
import { defineScene } from "#/engine/Scene.ts"; import { defineScene } from "#/engine/Scene.ts";
import { createVector } from "#/engine/Vector";
import data from "./data.json"; import data from "./data.json";
const { process, preProcess, postProcess, linkScenes } = defineScene(data); const { process, preProcess, postProcess, linkScenes } = defineScene(data);