Add support for attaching spline corridor colliders

This commit is contained in:
2026-05-13 04:29:50 +02:00
parent 789fa43dff
commit 3f64a3f670

View File

@@ -19,9 +19,10 @@ import { getFirstPersonPlayerShapeSignature } from "./player-collision";
import type {
RuntimeBrushTriMeshCollider,
RuntimeNpcCollider,
RuntimeSceneCollider,
RuntimeTerrainHeightfieldCollider,
RuntimeSceneCollider
} from "./runtime-scene-build";
import type { SplineCorridorBoxCollider } from "../spline-corridor/spline-corridor-colliders";
const CHARACTER_CONTROLLER_OFFSET = 0.01;
const CHARACTER_CONTROLLER_SNAP_TO_GROUND_DISTANCE = 0.2;
@@ -146,6 +147,30 @@ function attachSimpleModelCollider(world: RAPIER.World, collider: GeneratedModel
);
}
function attachSplineCorridorBoxCollider(
world: RAPIER.World,
collider: SplineCorridorBoxCollider
) {
const body = world.createRigidBody(
RAPIER.RigidBodyDesc.fixed()
.setTranslation(
collider.position.x,
collider.position.y,
collider.position.z
)
.setRotation(createRapierQuaternion(collider.rotationDegrees))
);
world.createCollider(
RAPIER.ColliderDesc.cuboid(
collider.size.x * 0.5,
collider.size.y * 0.5,
collider.size.z * 0.5
).setTranslation(collider.center.x, collider.center.y, collider.center.z),
body
);
}
function attachStaticModelCollider(world: RAPIER.World, collider: GeneratedModelTriMeshCollider) {
const body = createFixedBodyForModelCollider(world, collider);
world.createCollider(RAPIER.ColliderDesc.trimesh(scaleVertices(collider.vertices, collider.transform.scale), collider.indices), body);
@@ -444,6 +469,11 @@ export class RapierCollisionWorld {
continue;
}
if (collider.source === "splineCorridor") {
attachSplineCorridorBoxCollider(world, collider);
continue;
}
attachModelCollider(world, collider);
}