Add functions to sample terrain height at local and world positions

This commit is contained in:
2026-05-12 23:32:04 +02:00
parent 5768bb1e47
commit 118226d8d6

View File

@@ -945,6 +945,49 @@ function sampleTerrainHeightAtGridCoordinate(
);
}
export function sampleTerrainHeightAtLocalPosition(
terrain: Terrain,
localX: number,
localZ: number,
clampToBounds = false
): number | null {
const sampleSpaceX = localX / terrain.cellSize;
const sampleSpaceZ = localZ / terrain.cellSize;
const maxSampleX = terrain.sampleCountX - 1;
const maxSampleZ = terrain.sampleCountZ - 1;
if (!clampToBounds) {
if (
sampleSpaceX < 0 ||
sampleSpaceX > maxSampleX ||
sampleSpaceZ < 0 ||
sampleSpaceZ > maxSampleZ
) {
return null;
}
}
return sampleTerrainHeightAtGridCoordinate(
terrain,
sampleSpaceX,
sampleSpaceZ
);
}
export function sampleTerrainHeightAtWorldPosition(
terrain: Terrain,
worldX: number,
worldZ: number,
clampToBounds = false
): number | null {
return sampleTerrainHeightAtLocalPosition(
terrain,
worldX - terrain.position.x,
worldZ - terrain.position.z,
clampToBounds
);
}
function getStoredTerrainPaintWeightAtSample(
terrain: Terrain,
sampleX: number,