@skenora/runtime 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +92 -0
- package/dist/core/built-in-runtime-capabilities.d.ts +21 -0
- package/dist/core/built-in-runtime-capabilities.d.ts.map +1 -0
- package/dist/core/built-in-runtime-capabilities.js +175 -0
- package/dist/core/built-in-runtime-capabilities.js.map +1 -0
- package/dist/core/runtime-capability-registry.d.ts +90 -0
- package/dist/core/runtime-capability-registry.d.ts.map +1 -0
- package/dist/core/runtime-capability-registry.js +42 -0
- package/dist/core/runtime-capability-registry.js.map +1 -0
- package/dist/core/runtime-document-coordinator.d.ts +28 -0
- package/dist/core/runtime-document-coordinator.d.ts.map +1 -0
- package/dist/core/runtime-document-coordinator.js +124 -0
- package/dist/core/runtime-document-coordinator.js.map +1 -0
- package/dist/core/runtime-events.d.ts +43 -0
- package/dist/core/runtime-events.d.ts.map +1 -0
- package/dist/core/runtime-events.js +2 -0
- package/dist/core/runtime-events.js.map +1 -0
- package/dist/core/runtime-session.d.ts +93 -0
- package/dist/core/runtime-session.d.ts.map +1 -0
- package/dist/core/runtime-session.js +1344 -0
- package/dist/core/runtime-session.js.map +1 -0
- package/dist/editor-tools/camera-path-editing-controller.d.ts +36 -0
- package/dist/editor-tools/camera-path-editing-controller.d.ts.map +1 -0
- package/dist/editor-tools/camera-path-editing-controller.js +212 -0
- package/dist/editor-tools/camera-path-editing-controller.js.map +1 -0
- package/dist/editor-tools/camera-path-visualizer.d.ts +28 -0
- package/dist/editor-tools/camera-path-visualizer.d.ts.map +1 -0
- package/dist/editor-tools/camera-path-visualizer.js +151 -0
- package/dist/editor-tools/camera-path-visualizer.js.map +1 -0
- package/dist/editor-tools/drop-preview-controller.d.ts +34 -0
- package/dist/editor-tools/drop-preview-controller.d.ts.map +1 -0
- package/dist/editor-tools/drop-preview-controller.js +209 -0
- package/dist/editor-tools/drop-preview-controller.js.map +1 -0
- package/dist/editor-tools/grid-helper.d.ts +18 -0
- package/dist/editor-tools/grid-helper.d.ts.map +1 -0
- package/dist/editor-tools/grid-helper.js +27 -0
- package/dist/editor-tools/grid-helper.js.map +1 -0
- package/dist/editor-tools/light-editing-controller.d.ts +25 -0
- package/dist/editor-tools/light-editing-controller.d.ts.map +1 -0
- package/dist/editor-tools/light-editing-controller.js +207 -0
- package/dist/editor-tools/light-editing-controller.js.map +1 -0
- package/dist/editor-tools/node-operations.d.ts +51 -0
- package/dist/editor-tools/node-operations.d.ts.map +1 -0
- package/dist/editor-tools/node-operations.js +182 -0
- package/dist/editor-tools/node-operations.js.map +1 -0
- package/dist/editor-tools/selection-controller.d.ts +44 -0
- package/dist/editor-tools/selection-controller.d.ts.map +1 -0
- package/dist/editor-tools/selection-controller.js +299 -0
- package/dist/editor-tools/selection-controller.js.map +1 -0
- package/dist/editor-tools/shape-drawing-controller.d.ts +45 -0
- package/dist/editor-tools/shape-drawing-controller.d.ts.map +1 -0
- package/dist/editor-tools/shape-drawing-controller.js +205 -0
- package/dist/editor-tools/shape-drawing-controller.js.map +1 -0
- package/dist/editor-tools/shape-editing-controller.d.ts +40 -0
- package/dist/editor-tools/shape-editing-controller.d.ts.map +1 -0
- package/dist/editor-tools/shape-editing-controller.js +340 -0
- package/dist/editor-tools/shape-editing-controller.js.map +1 -0
- package/dist/editor.d.ts +12 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +12 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/inspection/node-tools.d.ts +51 -0
- package/dist/inspection/node-tools.d.ts.map +1 -0
- package/dist/inspection/node-tools.js +282 -0
- package/dist/inspection/node-tools.js.map +1 -0
- package/dist/interaction/runtime-third-person-controller.d.ts +24 -0
- package/dist/interaction/runtime-third-person-controller.d.ts.map +1 -0
- package/dist/interaction/runtime-third-person-controller.js +71 -0
- package/dist/interaction/runtime-third-person-controller.js.map +1 -0
- package/dist/interaction/third-person-controller.d.ts +61 -0
- package/dist/interaction/third-person-controller.d.ts.map +1 -0
- package/dist/interaction/third-person-controller.js +400 -0
- package/dist/interaction/third-person-controller.js.map +1 -0
- package/dist/interaction.d.ts +3 -0
- package/dist/interaction.d.ts.map +1 -0
- package/dist/interaction.js +3 -0
- package/dist/interaction.js.map +1 -0
- package/dist/presentation/scene-renderer.d.ts +75 -0
- package/dist/presentation/scene-renderer.d.ts.map +1 -0
- package/dist/presentation/scene-renderer.js +324 -0
- package/dist/presentation/scene-renderer.js.map +1 -0
- package/dist/presentation/viewport-controller.d.ts +13 -0
- package/dist/presentation/viewport-controller.d.ts.map +1 -0
- package/dist/presentation/viewport-controller.js +186 -0
- package/dist/presentation/viewport-controller.js.map +1 -0
- package/dist/projection/annotation-projector.d.ts +28 -0
- package/dist/projection/annotation-projector.d.ts.map +1 -0
- package/dist/projection/annotation-projector.js +98 -0
- package/dist/projection/annotation-projector.js.map +1 -0
- package/dist/projection/built-in-entity-projectors.d.ts +7 -0
- package/dist/projection/built-in-entity-projectors.d.ts.map +1 -0
- package/dist/projection/built-in-entity-projectors.js +75 -0
- package/dist/projection/built-in-entity-projectors.js.map +1 -0
- package/dist/projection/camera-entity-factory.d.ts +9 -0
- package/dist/projection/camera-entity-factory.d.ts.map +1 -0
- package/dist/projection/camera-entity-factory.js +93 -0
- package/dist/projection/camera-entity-factory.js.map +1 -0
- package/dist/projection/document-applier.d.ts +38 -0
- package/dist/projection/document-applier.d.ts.map +1 -0
- package/dist/projection/document-applier.js +219 -0
- package/dist/projection/document-applier.js.map +1 -0
- package/dist/projection/entity-projection-registry.d.ts +56 -0
- package/dist/projection/entity-projection-registry.d.ts.map +1 -0
- package/dist/projection/entity-projection-registry.js +121 -0
- package/dist/projection/entity-projection-registry.js.map +1 -0
- package/dist/projection/model-importer.d.ts +41 -0
- package/dist/projection/model-importer.d.ts.map +1 -0
- package/dist/projection/model-importer.js +469 -0
- package/dist/projection/model-importer.js.map +1 -0
- package/dist/projection/particle-capability.d.ts +5 -0
- package/dist/projection/particle-capability.d.ts.map +1 -0
- package/dist/projection/particle-capability.js +2 -0
- package/dist/projection/particle-capability.js.map +1 -0
- package/dist/projection/particle-factory.d.ts +18 -0
- package/dist/projection/particle-factory.d.ts.map +1 -0
- package/dist/projection/particle-factory.js +313 -0
- package/dist/projection/particle-factory.js.map +1 -0
- package/dist/projection/primitive-factory.d.ts +5 -0
- package/dist/projection/primitive-factory.d.ts.map +1 -0
- package/dist/projection/primitive-factory.js +55 -0
- package/dist/projection/primitive-factory.js.map +1 -0
- package/dist/projection/procedural-factory.d.ts +6 -0
- package/dist/projection/procedural-factory.d.ts.map +1 -0
- package/dist/projection/procedural-factory.js +34 -0
- package/dist/projection/procedural-factory.js.map +1 -0
- package/dist/projection/runtime-projection-state.d.ts +19 -0
- package/dist/projection/runtime-projection-state.d.ts.map +1 -0
- package/dist/projection/runtime-projection-state.js +58 -0
- package/dist/projection/runtime-projection-state.js.map +1 -0
- package/dist/projection/shape-factory.d.ts +5 -0
- package/dist/projection/shape-factory.d.ts.map +1 -0
- package/dist/projection/shape-factory.js +101 -0
- package/dist/projection/shape-factory.js.map +1 -0
- package/dist/projection-entry.d.ts +10 -0
- package/dist/projection-entry.d.ts.map +1 -0
- package/dist/projection-entry.js +8 -0
- package/dist/projection-entry.js.map +1 -0
- package/dist/simulation/fixed-step-scheduler.d.ts +13 -0
- package/dist/simulation/fixed-step-scheduler.d.ts.map +1 -0
- package/dist/simulation/fixed-step-scheduler.js +45 -0
- package/dist/simulation/fixed-step-scheduler.js.map +1 -0
- package/dist/simulation/simulation-runtime-model.d.ts +24 -0
- package/dist/simulation/simulation-runtime-model.d.ts.map +1 -0
- package/dist/simulation/simulation-runtime-model.js +63 -0
- package/dist/simulation/simulation-runtime-model.js.map +1 -0
- package/dist/simulation/simulation-wgsl.d.ts +3 -0
- package/dist/simulation/simulation-wgsl.d.ts.map +1 -0
- package/dist/simulation/simulation-wgsl.js +294 -0
- package/dist/simulation/simulation-wgsl.js.map +1 -0
- package/dist/simulation/webgpu-simulation-renderer.d.ts +67 -0
- package/dist/simulation/webgpu-simulation-renderer.d.ts.map +1 -0
- package/dist/simulation/webgpu-simulation-renderer.js +504 -0
- package/dist/simulation/webgpu-simulation-renderer.js.map +1 -0
- package/dist/simulation/webgpu-types.d.ts +90 -0
- package/dist/simulation/webgpu-types.d.ts.map +1 -0
- package/dist/simulation/webgpu-types.js +10 -0
- package/dist/simulation/webgpu-types.js.map +1 -0
- package/dist/simulation.d.ts +4 -0
- package/dist/simulation.d.ts.map +1 -0
- package/dist/simulation.js +4 -0
- package/dist/simulation.js.map +1 -0
- package/dist/systems/animation-controller.d.ts +52 -0
- package/dist/systems/animation-controller.d.ts.map +1 -0
- package/dist/systems/animation-controller.js +146 -0
- package/dist/systems/animation-controller.js.map +1 -0
- package/dist/systems/camera-controller.d.ts +41 -0
- package/dist/systems/camera-controller.d.ts.map +1 -0
- package/dist/systems/camera-controller.js +207 -0
- package/dist/systems/camera-controller.js.map +1 -0
- package/dist/systems/camera-path-controller.d.ts +39 -0
- package/dist/systems/camera-path-controller.d.ts.map +1 -0
- package/dist/systems/camera-path-controller.js +287 -0
- package/dist/systems/camera-path-controller.js.map +1 -0
- package/dist/systems/environment-controller.d.ts +18 -0
- package/dist/systems/environment-controller.d.ts.map +1 -0
- package/dist/systems/environment-controller.js +251 -0
- package/dist/systems/environment-controller.js.map +1 -0
- package/dist/systems/environment-texture.d.ts +7 -0
- package/dist/systems/environment-texture.d.ts.map +1 -0
- package/dist/systems/environment-texture.js +57 -0
- package/dist/systems/environment-texture.js.map +1 -0
- package/dist/systems/fog-controller.d.ts +12 -0
- package/dist/systems/fog-controller.d.ts.map +1 -0
- package/dist/systems/fog-controller.js +60 -0
- package/dist/systems/fog-controller.js.map +1 -0
- package/dist/systems/generated-texture-cache.d.ts +33 -0
- package/dist/systems/generated-texture-cache.d.ts.map +1 -0
- package/dist/systems/generated-texture-cache.js +101 -0
- package/dist/systems/generated-texture-cache.js.map +1 -0
- package/dist/systems/glass-transmission-controller.d.ts +21 -0
- package/dist/systems/glass-transmission-controller.d.ts.map +1 -0
- package/dist/systems/glass-transmission-controller.js +119 -0
- package/dist/systems/glass-transmission-controller.js.map +1 -0
- package/dist/systems/gpu-program-cache.d.ts +19 -0
- package/dist/systems/gpu-program-cache.d.ts.map +1 -0
- package/dist/systems/gpu-program-cache.js +95 -0
- package/dist/systems/gpu-program-cache.js.map +1 -0
- package/dist/systems/ground-controller.d.ts +14 -0
- package/dist/systems/ground-controller.d.ts.map +1 -0
- package/dist/systems/ground-controller.js +121 -0
- package/dist/systems/ground-controller.js.map +1 -0
- package/dist/systems/lighting-controller.d.ts +23 -0
- package/dist/systems/lighting-controller.d.ts.map +1 -0
- package/dist/systems/lighting-controller.js +204 -0
- package/dist/systems/lighting-controller.js.map +1 -0
- package/dist/systems/material-animation-controller.d.ts +26 -0
- package/dist/systems/material-animation-controller.d.ts.map +1 -0
- package/dist/systems/material-animation-controller.js +221 -0
- package/dist/systems/material-animation-controller.js.map +1 -0
- package/dist/systems/material-binding-resolver.d.ts +16 -0
- package/dist/systems/material-binding-resolver.d.ts.map +1 -0
- package/dist/systems/material-binding-resolver.js +54 -0
- package/dist/systems/material-binding-resolver.js.map +1 -0
- package/dist/systems/material-controller.d.ts +29 -0
- package/dist/systems/material-controller.d.ts.map +1 -0
- package/dist/systems/material-controller.js +233 -0
- package/dist/systems/material-controller.js.map +1 -0
- package/dist/systems/material-preparation.d.ts +9 -0
- package/dist/systems/material-preparation.d.ts.map +1 -0
- package/dist/systems/material-preparation.js +51 -0
- package/dist/systems/material-preparation.js.map +1 -0
- package/dist/systems/material-slots.d.ts +18 -0
- package/dist/systems/material-slots.d.ts.map +1 -0
- package/dist/systems/material-slots.js +78 -0
- package/dist/systems/material-slots.js.map +1 -0
- package/dist/systems/owned-material-controller.d.ts +20 -0
- package/dist/systems/owned-material-controller.d.ts.map +1 -0
- package/dist/systems/owned-material-controller.js +611 -0
- package/dist/systems/owned-material-controller.js.map +1 -0
- package/dist/systems/pbr-material.d.ts +22 -0
- package/dist/systems/pbr-material.d.ts.map +1 -0
- package/dist/systems/pbr-material.js +358 -0
- package/dist/systems/pbr-material.js.map +1 -0
- package/dist/systems/post-process-controller.d.ts +17 -0
- package/dist/systems/post-process-controller.d.ts.map +1 -0
- package/dist/systems/post-process-controller.js +246 -0
- package/dist/systems/post-process-controller.js.map +1 -0
- package/dist/systems/runtime-clock.d.ts +9 -0
- package/dist/systems/runtime-clock.d.ts.map +1 -0
- package/dist/systems/runtime-clock.js +25 -0
- package/dist/systems/runtime-clock.js.map +1 -0
- package/dist/systems/skybox-controller.d.ts +15 -0
- package/dist/systems/skybox-controller.d.ts.map +1 -0
- package/dist/systems/skybox-controller.js +282 -0
- package/dist/systems/skybox-controller.js.map +1 -0
- package/dist/systems/sprite-sheet-controller.d.ts +52 -0
- package/dist/systems/sprite-sheet-controller.d.ts.map +1 -0
- package/dist/systems/sprite-sheet-controller.js +187 -0
- package/dist/systems/sprite-sheet-controller.js.map +1 -0
- package/dist/systems/surface-effect-plugin.d.ts +26 -0
- package/dist/systems/surface-effect-plugin.d.ts.map +1 -0
- package/dist/systems/surface-effect-plugin.js +204 -0
- package/dist/systems/surface-effect-plugin.js.map +1 -0
- package/dist/systems/surface-program-plugin.d.ts +29 -0
- package/dist/systems/surface-program-plugin.d.ts.map +1 -0
- package/dist/systems/surface-program-plugin.js +139 -0
- package/dist/systems/surface-program-plugin.js.map +1 -0
- package/dist/systems/texture-animation-controller.d.ts +18 -0
- package/dist/systems/texture-animation-controller.d.ts.map +1 -0
- package/dist/systems/texture-animation-controller.js +147 -0
- package/dist/systems/texture-animation-controller.js.map +1 -0
- package/dist/systems/weather-controller.d.ts +16 -0
- package/dist/systems/weather-controller.d.ts.map +1 -0
- package/dist/systems/weather-controller.js +205 -0
- package/dist/systems/weather-controller.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Node } from "@babylonjs/core/node";
|
|
2
|
+
import type { Scene } from "@babylonjs/core/scene";
|
|
3
|
+
import type { EntityRecord, SceneDocumentData } from "@skenora/contracts";
|
|
4
|
+
import type { ResourceResolver } from "@skenora/resources";
|
|
5
|
+
export interface RuntimeEntityProjectionContext {
|
|
6
|
+
readonly scene: Scene;
|
|
7
|
+
readonly document: Readonly<SceneDocumentData>;
|
|
8
|
+
readonly resources: ResourceResolver;
|
|
9
|
+
readonly signal?: AbortSignal;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Owns every runtime resource created for one document entity.
|
|
13
|
+
*
|
|
14
|
+
* Projectors must release their resources in reverse dependency order from
|
|
15
|
+
* dispose(). RuntimeSession deliberately treats the projection as opaque.
|
|
16
|
+
*/
|
|
17
|
+
export interface RuntimeEntityProjection {
|
|
18
|
+
readonly node: Node;
|
|
19
|
+
update(entity: Readonly<EntityRecord>): void;
|
|
20
|
+
getCapability?(name: string): unknown;
|
|
21
|
+
dispose(): void;
|
|
22
|
+
}
|
|
23
|
+
export type RuntimeEntityProjectionChange = "update" | "recreate";
|
|
24
|
+
export interface RuntimeEntityProjector {
|
|
25
|
+
readonly id: string;
|
|
26
|
+
readonly entityType: EntityRecord["type"];
|
|
27
|
+
classifyChange?(path: readonly (string | number)[]): RuntimeEntityProjectionChange;
|
|
28
|
+
create(context: RuntimeEntityProjectionContext, entity: Readonly<EntityRecord>): RuntimeEntityProjection | Promise<RuntimeEntityProjection>;
|
|
29
|
+
}
|
|
30
|
+
export interface RuntimeProjectedEntity {
|
|
31
|
+
readonly entityId: string;
|
|
32
|
+
readonly entityType: EntityRecord["type"];
|
|
33
|
+
readonly node: Node;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Composition boundary between SceneDocument entities and renderer resources.
|
|
37
|
+
*
|
|
38
|
+
* The registry owns projected instances; individual projectors own renderer
|
|
39
|
+
* details. This keeps RuntimeSession responsible for orchestration rather than
|
|
40
|
+
* knowing how every entity type is built and disposed.
|
|
41
|
+
*/
|
|
42
|
+
export declare class EntityProjectionRegistry {
|
|
43
|
+
#private;
|
|
44
|
+
constructor(projectors?: readonly RuntimeEntityProjector[]);
|
|
45
|
+
register(projector: RuntimeEntityProjector): void;
|
|
46
|
+
supports(entityType: EntityRecord["type"]): boolean;
|
|
47
|
+
classifyChange(entityType: EntityRecord["type"], path: readonly (string | number)[]): RuntimeEntityProjectionChange;
|
|
48
|
+
create(context: RuntimeEntityProjectionContext, entity: Readonly<EntityRecord>): Promise<RuntimeEntityProjection | null>;
|
|
49
|
+
update(entity: Readonly<EntityRecord>): boolean;
|
|
50
|
+
getNode(entityId: string): Node | null;
|
|
51
|
+
getCapability<T>(entityId: string, name: string): T | null;
|
|
52
|
+
entries(entityType?: EntityRecord["type"]): readonly RuntimeProjectedEntity[];
|
|
53
|
+
dispose(entityId: string): boolean;
|
|
54
|
+
clear(): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=entity-projection-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-projection-registry.d.ts","sourceRoot":"","sources":["../../src/projection/entity-projection-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED;;;;;GAKG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IAC7C,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,MAAM,6BAA6B,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,cAAc,CAAC,CACb,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,6BAA6B,CAAC;IACjC,MAAM,CACJ,OAAO,EAAE,8BAA8B,EACvC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAQD;;;;;;GAMG;AACH,qBAAa,wBAAwB;;gBAQvB,UAAU,GAAE,SAAS,sBAAsB,EAAO;IAI9D,QAAQ,CAAC,SAAS,EAAE,sBAAsB,GAAG,IAAI;IAoBjD,QAAQ,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,GAAG,OAAO;IAInD,cAAc,CACZ,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,EAChC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GACjC,6BAA6B;IAO1B,MAAM,CACV,OAAO,EAAE,8BAA8B,EACvC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC;IAoB1C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,OAAO;IAY/C,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAItC,aAAa,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI;IAO1D,OAAO,CACL,UAAU,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAChC,SAAS,sBAAsB,EAAE;IAapC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAQlC,KAAK,IAAI,IAAI;CAiBd"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Composition boundary between SceneDocument entities and renderer resources.
|
|
3
|
+
*
|
|
4
|
+
* The registry owns projected instances; individual projectors own renderer
|
|
5
|
+
* details. This keeps RuntimeSession responsible for orchestration rather than
|
|
6
|
+
* knowing how every entity type is built and disposed.
|
|
7
|
+
*/
|
|
8
|
+
export class EntityProjectionRegistry {
|
|
9
|
+
#projectors = new Map();
|
|
10
|
+
#projectorIds = new Set();
|
|
11
|
+
#projections = new Map();
|
|
12
|
+
constructor(projectors = []) {
|
|
13
|
+
for (const projector of projectors)
|
|
14
|
+
this.register(projector);
|
|
15
|
+
}
|
|
16
|
+
register(projector) {
|
|
17
|
+
const id = projector.id.trim();
|
|
18
|
+
if (!id || id !== projector.id) {
|
|
19
|
+
throw new Error("Runtime entity projector requires a normalized id");
|
|
20
|
+
}
|
|
21
|
+
if (this.#projectorIds.has(id)) {
|
|
22
|
+
throw new Error(`Runtime entity projector id is already registered: ${id}`);
|
|
23
|
+
}
|
|
24
|
+
const existing = this.#projectors.get(projector.entityType);
|
|
25
|
+
if (existing) {
|
|
26
|
+
throw new Error(`Entity type ${projector.entityType} is already owned by projector ${existing.id}`);
|
|
27
|
+
}
|
|
28
|
+
this.#projectorIds.add(id);
|
|
29
|
+
this.#projectors.set(projector.entityType, projector);
|
|
30
|
+
}
|
|
31
|
+
supports(entityType) {
|
|
32
|
+
return this.#projectors.has(entityType);
|
|
33
|
+
}
|
|
34
|
+
classifyChange(entityType, path) {
|
|
35
|
+
if (isGenericEntityUpdate(path))
|
|
36
|
+
return "update";
|
|
37
|
+
return (this.#projectors.get(entityType)?.classifyChange?.(path) ?? "recreate");
|
|
38
|
+
}
|
|
39
|
+
async create(context, entity) {
|
|
40
|
+
const projector = this.#projectors.get(entity.type);
|
|
41
|
+
if (!projector)
|
|
42
|
+
return null;
|
|
43
|
+
if (this.#projections.has(entity.id)) {
|
|
44
|
+
throw new Error(`Entity is already projected: ${entity.id}`);
|
|
45
|
+
}
|
|
46
|
+
const projection = await projector.create(context, entity);
|
|
47
|
+
if (this.#projections.has(entity.id)) {
|
|
48
|
+
projection.dispose();
|
|
49
|
+
throw new Error(`Entity was projected concurrently: ${entity.id}`);
|
|
50
|
+
}
|
|
51
|
+
this.#projections.set(entity.id, {
|
|
52
|
+
projectorId: projector.id,
|
|
53
|
+
entityType: entity.type,
|
|
54
|
+
projection,
|
|
55
|
+
});
|
|
56
|
+
return projection;
|
|
57
|
+
}
|
|
58
|
+
update(entity) {
|
|
59
|
+
const registered = this.#projections.get(entity.id);
|
|
60
|
+
if (!registered)
|
|
61
|
+
return false;
|
|
62
|
+
if (registered.entityType !== entity.type) {
|
|
63
|
+
throw new Error(`Projected entity type cannot change without recreation: ${entity.id}`);
|
|
64
|
+
}
|
|
65
|
+
registered.projection.update(entity);
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
getNode(entityId) {
|
|
69
|
+
return this.#projections.get(entityId)?.projection.node ?? null;
|
|
70
|
+
}
|
|
71
|
+
getCapability(entityId, name) {
|
|
72
|
+
const value = this.#projections
|
|
73
|
+
.get(entityId)
|
|
74
|
+
?.projection.getCapability?.(name);
|
|
75
|
+
return value === undefined || value === null ? null : value;
|
|
76
|
+
}
|
|
77
|
+
entries(entityType) {
|
|
78
|
+
const entries = [];
|
|
79
|
+
for (const [entityId, registered] of this.#projections) {
|
|
80
|
+
if (entityType && registered.entityType !== entityType)
|
|
81
|
+
continue;
|
|
82
|
+
entries.push({
|
|
83
|
+
entityId,
|
|
84
|
+
entityType: registered.entityType,
|
|
85
|
+
node: registered.projection.node,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return entries;
|
|
89
|
+
}
|
|
90
|
+
dispose(entityId) {
|
|
91
|
+
const registered = this.#projections.get(entityId);
|
|
92
|
+
if (!registered)
|
|
93
|
+
return false;
|
|
94
|
+
this.#projections.delete(entityId);
|
|
95
|
+
registered.projection.dispose();
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
clear() {
|
|
99
|
+
const errors = [];
|
|
100
|
+
const entityIds = [...this.#projections.keys()].reverse();
|
|
101
|
+
for (const entityId of entityIds) {
|
|
102
|
+
try {
|
|
103
|
+
this.dispose(entityId);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
errors.push(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (errors.length > 0) {
|
|
110
|
+
throw new AggregateError(errors, "Runtime entity projections could not be cleared");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
function isGenericEntityUpdate(path) {
|
|
115
|
+
const [root] = path;
|
|
116
|
+
return (root === "name" ||
|
|
117
|
+
root === "enabled" ||
|
|
118
|
+
root === "visible" ||
|
|
119
|
+
root === "transform");
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=entity-projection-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entity-projection-registry.js","sourceRoot":"","sources":["../../src/projection/entity-projection-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { AbstractMesh } from "@babylonjs/core/Meshes/abstractMesh";
|
|
2
|
+
import { TransformNode } from "@babylonjs/core/Meshes/transformNode";
|
|
3
|
+
import type { AssetContainer } from "@babylonjs/core/assetContainer";
|
|
4
|
+
import type { Node } from "@babylonjs/core/node";
|
|
5
|
+
import type { Scene } from "@babylonjs/core/scene";
|
|
6
|
+
import "@babylonjs/loaders/glTF";
|
|
7
|
+
import type { AssetReference, EntityRecord, TransformValue } from "@skenora/contracts";
|
|
8
|
+
import type { ResolvedResource, ResourceResolver } from "@skenora/resources";
|
|
9
|
+
export interface ImportedEntity {
|
|
10
|
+
entityId: string;
|
|
11
|
+
container: AssetContainer;
|
|
12
|
+
/** Stable entity-owned root used by transforms, parenting, selection, and framing. */
|
|
13
|
+
root: TransformNode;
|
|
14
|
+
/** Asset-local alignment root used for pivot, orientation, and placement. */
|
|
15
|
+
alignmentRoot: TransformNode;
|
|
16
|
+
/** Original model roots supplied by the loader. */
|
|
17
|
+
roots: readonly TransformNode[];
|
|
18
|
+
/** Original model nodes, excluding Skenora-owned wrapper roots. */
|
|
19
|
+
nodes: readonly Node[];
|
|
20
|
+
}
|
|
21
|
+
export declare function importModelEntity(scene: Scene, resources: ResourceResolver, asset: AssetReference, entity: EntityRecord, signal?: AbortSignal): Promise<ImportedEntity>;
|
|
22
|
+
type GltfDependencyKind = "buffer" | "image";
|
|
23
|
+
interface GltfDependencyContext {
|
|
24
|
+
readonly kind: GltfDependencyKind;
|
|
25
|
+
readonly sourceUri: string;
|
|
26
|
+
readonly declaredMediaType?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function shouldInlineOpaqueOriginObjectUrl(objectUrl: string, originSerialization?: string | undefined): boolean;
|
|
29
|
+
export declare function resolveGltfDependencyMediaType(resource: Pick<ResolvedResource, "blob" | "mediaType" | "name">, context: Readonly<GltfDependencyContext>): string;
|
|
30
|
+
export declare function isAbstractMesh(value: unknown): value is AbstractMesh;
|
|
31
|
+
export declare function isTransformNode(value: unknown): value is TransformNode;
|
|
32
|
+
export declare function applyTransform(mesh: TransformNode, transform: TransformValue): void;
|
|
33
|
+
export declare function setNodeVisible(node: Node, visible: boolean): void;
|
|
34
|
+
/** Authored groups gate descendants without rewriting child visibility flags. */
|
|
35
|
+
export declare function readAuthoredGroupState(node: Node): {
|
|
36
|
+
enabled: boolean;
|
|
37
|
+
visible: boolean;
|
|
38
|
+
} | null;
|
|
39
|
+
export declare function setNodeEnabled(node: Node, enabled: boolean): void;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=model-importer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-importer.d.ts","sourceRoot":"","sources":["../../src/projection/model-importer.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,yBAAyB,CAAC;AACjC,OAAO,KAAK,EACV,cAAc,EACd,YAAY,EAGZ,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,cAAc,CAAC;IAC1B,sFAAsF;IACtF,IAAI,EAAE,aAAa,CAAC;IACpB,6EAA6E;IAC7E,aAAa,EAAE,aAAa,CAAC;IAC7B,mDAAmD;IACnD,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;IAChC,mEAAmE;IACnE,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACxB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,gBAAgB,EAC3B,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,YAAY,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,cAAc,CAAC,CA6EzB;AA2TD,KAAK,kBAAkB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE7C,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CACrC;AAyCD,wBAAgB,iCAAiC,CAC/C,SAAS,EAAE,MAAM,EACjB,mBAAmB,GAAE,MAAM,GAAG,SAAwC,GACrE,OAAO,CAGT;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC,EAC/D,OAAO,EAAE,QAAQ,CAAC,qBAAqB,CAAC,GACvC,MAAM,CAkCR;AAwCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAOpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAQtE;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,aAAa,EACnB,SAAS,EAAE,cAAc,GACxB,IAAI,CA2BN;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAajE;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,IAAI,GACT;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAQ/C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAajE"}
|