Add navigation mode to runtime scene build

This commit is contained in:
2026-03-31 03:41:13 +02:00
parent 0ae5e9612d
commit bbed6d8696

View File

@@ -5,6 +5,7 @@ import { getPrimaryPlayerStartEntity } from "../entities/entity-instances";
import { getBoxBrushBounds } from "../geometry/box-brush";
import { cloneMaterialDef, type MaterialDef } from "../materials/starter-material-library";
import { cloneFaceUvState } from "../document/brushes";
import { assertRuntimeSceneBuildable } from "./runtime-scene-validation";
export type RuntimeNavigationMode = "firstPerson" | "orbitVisitor";
@@ -58,6 +59,10 @@ export interface RuntimeSceneDefinition {
spawn: RuntimeSpawnPoint;
}
interface BuildRuntimeSceneOptions {
navigationMode?: RuntimeNavigationMode;
}
function cloneVec3(vector: Vec3): Vec3 {
return {
x: vector.x,
@@ -191,7 +196,9 @@ function buildFallbackSpawn(sceneBounds: RuntimeSceneBounds | null): RuntimeSpaw
};
}
export function buildRuntimeSceneFromDocument(document: SceneDocument): RuntimeSceneDefinition {
export function buildRuntimeSceneFromDocument(document: SceneDocument, options: BuildRuntimeSceneOptions = {}): RuntimeSceneDefinition {
assertRuntimeSceneBuildable(document, options.navigationMode ?? "orbitVisitor");
const brushes = Object.values(document.brushes).map((brush) => buildRuntimeBrush(brush, document));
const colliders = Object.values(document.brushes).map((brush) => buildRuntimeCollider(brush));
const sceneBounds = combineColliderBounds(colliders);