2026-03-31 02:02:50 +02:00
|
|
|
import type { Brush } from "./brushes";
|
2026-03-31 03:00:38 +02:00
|
|
|
import type { EntityInstance } from "../entities/entity-instances";
|
2026-03-31 02:33:18 +02:00
|
|
|
import { cloneMaterialRegistry, createStarterMaterialRegistry, type MaterialDef } from "../materials/starter-material-library";
|
2026-03-31 05:09:25 +02:00
|
|
|
import { createDefaultWorldSettings, type WorldSettings } from "./world-settings";
|
2026-03-31 01:29:35 +02:00
|
|
|
|
2026-03-31 05:50:35 +02:00
|
|
|
export const SCENE_DOCUMENT_VERSION = 7 as const;
|
2026-03-31 02:02:50 +02:00
|
|
|
export const FOUNDATION_SCENE_DOCUMENT_VERSION = 1 as const;
|
2026-03-31 02:33:18 +02:00
|
|
|
export const BOX_BRUSH_SCENE_DOCUMENT_VERSION = 2 as const;
|
2026-03-31 03:00:38 +02:00
|
|
|
export const FACE_MATERIALS_SCENE_DOCUMENT_VERSION = 3 as const;
|
2026-03-31 04:22:46 +02:00
|
|
|
export const RUNNER_V1_SCENE_DOCUMENT_VERSION = 4 as const;
|
2026-03-31 05:09:25 +02:00
|
|
|
export const FIRST_ROOM_POLISH_SCENE_DOCUMENT_VERSION = 5 as const;
|
2026-03-31 05:50:35 +02:00
|
|
|
export const WORLD_ENVIRONMENT_SCENE_DOCUMENT_VERSION = 6 as const;
|
2026-03-31 01:29:35 +02:00
|
|
|
|
|
|
|
|
export interface SceneDocument {
|
|
|
|
|
version: typeof SCENE_DOCUMENT_VERSION;
|
|
|
|
|
name: string;
|
|
|
|
|
world: WorldSettings;
|
2026-03-31 02:33:18 +02:00
|
|
|
materials: Record<string, MaterialDef>;
|
2026-03-31 01:29:35 +02:00
|
|
|
textures: Record<string, never>;
|
|
|
|
|
assets: Record<string, never>;
|
2026-03-31 02:02:50 +02:00
|
|
|
brushes: Record<string, Brush>;
|
2026-03-31 01:29:35 +02:00
|
|
|
modelInstances: Record<string, never>;
|
2026-03-31 03:00:38 +02:00
|
|
|
entities: Record<string, EntityInstance>;
|
2026-03-31 01:29:35 +02:00
|
|
|
interactionLinks: Record<string, never>;
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-31 02:33:18 +02:00
|
|
|
export function createEmptySceneDocument(overrides: Partial<Pick<SceneDocument, "name" | "world" | "materials">> = {}): SceneDocument {
|
2026-03-31 01:29:35 +02:00
|
|
|
return {
|
|
|
|
|
version: SCENE_DOCUMENT_VERSION,
|
|
|
|
|
name: overrides.name ?? "Untitled Scene",
|
|
|
|
|
world: overrides.world ?? createDefaultWorldSettings(),
|
2026-03-31 02:33:18 +02:00
|
|
|
materials: cloneMaterialRegistry(overrides.materials ?? createStarterMaterialRegistry()),
|
2026-03-31 01:29:35 +02:00
|
|
|
textures: {},
|
|
|
|
|
assets: {},
|
|
|
|
|
brushes: {},
|
|
|
|
|
modelInstances: {},
|
|
|
|
|
entities: {},
|
|
|
|
|
interactionLinks: {}
|
|
|
|
|
};
|
|
|
|
|
}
|
2026-03-31 05:09:25 +02:00
|
|
|
|
|
|
|
|
export type {
|
|
|
|
|
WorldAmbientLightSettings,
|
|
|
|
|
WorldBackgroundMode,
|
|
|
|
|
WorldBackgroundSettings,
|
|
|
|
|
WorldSolidBackgroundSettings,
|
2026-03-31 05:15:11 +02:00
|
|
|
WorldSettings,
|
2026-03-31 05:09:25 +02:00
|
|
|
WorldSunLightSettings,
|
|
|
|
|
WorldVerticalGradientBackgroundSettings
|
|
|
|
|
} from "./world-settings";
|
|
|
|
|
|
|
|
|
|
export {
|
|
|
|
|
areWorldSettingsEqual,
|
|
|
|
|
changeWorldBackgroundMode,
|
|
|
|
|
cloneWorldBackgroundSettings,
|
|
|
|
|
cloneWorldSettings,
|
|
|
|
|
createDefaultWorldSettings,
|
|
|
|
|
isHexColorString
|
|
|
|
|
} from "./world-settings";
|