Add support for attaching spline corridor colliders
This commit is contained in:
@@ -19,9 +19,10 @@ import { getFirstPersonPlayerShapeSignature } from "./player-collision";
|
|||||||
import type {
|
import type {
|
||||||
RuntimeBrushTriMeshCollider,
|
RuntimeBrushTriMeshCollider,
|
||||||
RuntimeNpcCollider,
|
RuntimeNpcCollider,
|
||||||
|
RuntimeSceneCollider,
|
||||||
RuntimeTerrainHeightfieldCollider,
|
RuntimeTerrainHeightfieldCollider,
|
||||||
RuntimeSceneCollider
|
|
||||||
} from "./runtime-scene-build";
|
} from "./runtime-scene-build";
|
||||||
|
import type { SplineCorridorBoxCollider } from "../spline-corridor/spline-corridor-colliders";
|
||||||
|
|
||||||
const CHARACTER_CONTROLLER_OFFSET = 0.01;
|
const CHARACTER_CONTROLLER_OFFSET = 0.01;
|
||||||
const CHARACTER_CONTROLLER_SNAP_TO_GROUND_DISTANCE = 0.2;
|
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) {
|
function attachStaticModelCollider(world: RAPIER.World, collider: GeneratedModelTriMeshCollider) {
|
||||||
const body = createFixedBodyForModelCollider(world, collider);
|
const body = createFixedBodyForModelCollider(world, collider);
|
||||||
world.createCollider(RAPIER.ColliderDesc.trimesh(scaleVertices(collider.vertices, collider.transform.scale), collider.indices), body);
|
world.createCollider(RAPIER.ColliderDesc.trimesh(scaleVertices(collider.vertices, collider.transform.scale), collider.indices), body);
|
||||||
@@ -444,6 +469,11 @@ export class RapierCollisionWorld {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (collider.source === "splineCorridor") {
|
||||||
|
attachSplineCorridorBoxCollider(world, collider);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
attachModelCollider(world, collider);
|
attachModelCollider(world, collider);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user