Refactor: Use dedicated function for heightfield subdivisions

This commit is contained in:
2026-05-13 16:21:53 +02:00
parent ba88d81287
commit 4e189906e7

View File

@@ -107,6 +107,18 @@ function createRapierHeightfieldHeights(collider: {
return heights; return heights;
} }
function getRapierHeightfieldSubdivisions(collider: {
rows: number;
cols: number;
}): { rowSubdivisions: number; colSubdivisions: number } {
return {
// Rapier names these as row/column subdivisions, but in world space those
// map to Z rows and X columns respectively.
rowSubdivisions: collider.cols - 1,
colSubdivisions: collider.rows - 1
};
}
function createFixedBodyForModelCollider(world: RAPIER.World, collider: GeneratedModelCollider): RAPIER.RigidBody { function createFixedBodyForModelCollider(world: RAPIER.World, collider: GeneratedModelCollider): RAPIER.RigidBody {
return world.createRigidBody( return world.createRigidBody(
RAPIER.RigidBodyDesc.fixed() RAPIER.RigidBodyDesc.fixed()
@@ -197,8 +209,8 @@ function attachTerrainModelCollider(world: RAPIER.World, collider: GeneratedMode
}, },
collider.transform.scale collider.transform.scale
); );
const rowSubdivisions = collider.rows - 1; const { rowSubdivisions, colSubdivisions } =
const colSubdivisions = collider.cols - 1; getRapierHeightfieldSubdivisions(collider);
world.createCollider( world.createCollider(
// Rapier expects the number of grid subdivisions here, while our generated // Rapier expects the number of grid subdivisions here, while our generated
@@ -229,8 +241,8 @@ function attachTerrainCollider(
collider.position.z collider.position.z
) )
); );
const rowSubdivisions = collider.rows - 1; const { rowSubdivisions, colSubdivisions } =
const colSubdivisions = collider.cols - 1; getRapierHeightfieldSubdivisions(collider);
world.createCollider( world.createCollider(
RAPIER.ColliderDesc.heightfield( RAPIER.ColliderDesc.heightfield(