WIP
This commit is contained in:
+72
-14
@@ -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,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);
|
||||||
|
|||||||
Reference in New Issue
Block a user