use bounding boxes to optimize collision detection

This commit is contained in:
2025-01-19 14:24:19 +09:00
parent 0a4853aff9
commit e75c0d2944
10 changed files with 275 additions and 94 deletions
+5 -4
View File
@@ -84,7 +84,7 @@ export default class Pathfind {
if (radius > 0) {
for (const waypoint of waypoints) {
const collider = Entity.collider(waypoint[0], waypoint[1], radius)
const waypointAvailable = !SATX.collideObjects(collider, colliders)
const waypointAvailable = !colliders.some((it) => SATX.collideObject(collider, it))
if (waypointAvailable) {
filteredWaypoints.push(waypoint)
}
@@ -115,9 +115,10 @@ export default class Pathfind {
checked.add(key)
checked.add(Pathfind.floatKey4(mergedWaypoints[j], mergedWaypoints[j + 1], mergedWaypoints[i], mergedWaypoints[i + 1]))
const tunnel = SATX.entityTunnel(mergedWaypoints[i], mergedWaypoints[i + 1], mergedWaypoints[j], mergedWaypoints[j + 1], radius)
if (!SATX.collideObjects(tunnel, colliders)) {
// TODO: optimize tunnelCollider using bounding boxes
const tunnel = Entity.tunnelCollider(mergedWaypoints[i], mergedWaypoints[i + 1], mergedWaypoints[j], mergedWaypoints[j + 1], radius)
if (!colliders.some((it) => SATX.collideObject(tunnel, it))) {
const node = new Float32Array(5)
node[0] = mergedWaypoints[i]
node[1] = mergedWaypoints[i + 1]