@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.3
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/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
- package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
- package/dist/build-info.json +46 -46
- package/dist/internal/material-preview.d.ts +22 -0
- package/dist/internal/material-preview.d.ts.map +1 -0
- package/dist/internal/material-preview.js +186 -0
- package/dist/internal/material-preview.js.map +1 -0
- package/dist/internal/project-model-preview.d.ts +4 -0
- package/dist/internal/project-model-preview.d.ts.map +1 -0
- package/dist/internal/project-model-preview.js +359 -0
- package/dist/internal/project-model-preview.js.map +1 -0
- package/dist/local-editor-agent-context.d.ts +12 -1
- package/dist/local-editor-agent-context.d.ts.map +1 -1
- package/dist/local-editor-agent-context.js +47 -0
- package/dist/local-editor-agent-context.js.map +1 -1
- package/dist/local-editor-harness.d.ts +15 -2
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +326 -28
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-tools.d.ts +1 -0
- package/dist/local-editor-tools.d.ts.map +1 -1
- package/dist/local-editor-tools.js +3 -0
- package/dist/local-editor-tools.js.map +1 -1
- package/dist/playable-babylon-rendering.d.ts +8 -7
- package/dist/playable-babylon-rendering.d.ts.map +1 -1
- package/dist/playable-babylon-rendering.js +77 -32
- package/dist/playable-babylon-rendering.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +4 -0
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +27 -0
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts +2 -0
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +7 -4
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +9 -3
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-sdk.d.ts +1 -1
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js +1 -1
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +0 -1
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +17 -5
- package/dist/playable-standard-project.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts +4 -2
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js +301 -121
- package/node_modules/@fps-games/babylon-renderer/dist/environment/environment-texture-controller.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js +5 -4
- package/node_modules/@fps-games/babylon-renderer/dist/environment/profile.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts +4 -4
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/environment/types.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +2 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +12 -1
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +6 -3
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +100 -39
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts +1 -3
- package/node_modules/@fps-games/babylon-renderer/dist/reference.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/reference.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +11 -8
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
- package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
- package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js +10 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/generated-module.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +4 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js +1 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/assets.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +53 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.d.ts +1 -0
- package/node_modules/@fps-games/playable-assets/dist/identity.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.js +1 -1
- package/node_modules/@fps-games/playable-assets/dist/identity.js.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/playable-assets/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/index.js +1 -0
- package/node_modules/@fps-games/playable-assets/dist/index.js.map +1 -1
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts +46 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js +109 -0
- package/node_modules/@fps-games/playable-assets/dist/resource-resolver.js.map +1 -0
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/dist/runtime.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/runtime.js +5 -0
- package/node_modules/@fps-games/playable-runtime/dist/runtime.js.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/types.d.ts +2 -0
- package/node_modules/@fps-games/playable-runtime/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/types.js.map +1 -1
- package/node_modules/@fps-games/playable-runtime/package.json +12 -12
- package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
- package/node_modules/@fps-games/playable-scene/package.json +2 -2
- package/node_modules/@fps-games/plugin-api/package.json +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/reference.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/reference.js +11 -4
- package/node_modules/@fps-games/plugin-assets/dist/reference.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts +8 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.js +13 -0
- package/node_modules/@fps-games/plugin-assets/dist/renderer.js.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts +12 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.js +8 -0
- package/node_modules/@fps-games/plugin-assets/dist/resources.js.map +1 -0
- package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts +2 -1
- package/node_modules/@fps-games/plugin-assets/dist/runtime.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/runtime.js +3 -0
- package/node_modules/@fps-games/plugin-assets/dist/runtime.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-assets/package.json +32 -8
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +24 -22
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playable-product-projection-preview.d.ts","sourceRoot":"","sources":["../src/playable-product-projection-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAC1C,KAAK,6BAA6B,EAClC,KAAK,oCAAoC,EAC1C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAaL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qCAAqC,EAI3C,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"playable-product-projection-preview.d.ts","sourceRoot":"","sources":["../src/playable-product-projection-preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,sCAAsC,EAC3C,KAAK,qCAAqC,EAC1C,KAAK,6BAA6B,EAClC,KAAK,oCAAoC,EAC1C,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAaL,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,qCAAqC,EAI3C,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,KAAK,6BAA6B,EACnC,MAAM,4BAA4B,CAAC;AAEpC,MAAM,MAAM,iCAAiC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEpE,MAAM,WAAW,yCAAyC;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,8CAA8C,CAAC,YAAY;IAC1E,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAAC;IAC3D,oBAAoB,CAClB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,KAAK,EAAE,YAAY,GAClB;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC;IAC7C,QAAQ,CAAC,KAAK,EAAE,YAAY,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAChE,aAAa,CAAC,CAAC,KAAK,EAAE,YAAY,GAAG;QACnC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,GAAG,IAAI,GAAG,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,4CAA4C,CAC3D,SAAS,SAAS,mBAAmB,GAAG,mBAAmB,EAC3D,WAAW,SAAS,qBAAqB,GAAG,qBAAqB,EACjE,MAAM,SAAS,2BAA2B,GAAG,2BAA2B,EACxE,YAAY,GAAG,OAAO;IAEtB,YAAY,EAAE,qCAAqC,CAAC;IACpD,aAAa,EAAE,oBAAoB,CAAC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,8CAA8C,CAAC,YAAY,CAAC,CAAC;IAC3E,sBAAsB,CAAC,IAAI,OAAO,CAAC;QACjC,WAAW,EAAE;YACX,uBAAuB,CACrB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,OAAO,EACd,UAAU,CAAC,EAAE,OAAO,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,OAAO,CAAC,CAAC;SACrB,CAAC;KACH,CAAC,CAAC;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;QAC5C,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,qCAAqC,CACpD,SAAS,SAAS,mBAAmB,GAAG,mBAAmB,EAC3D,WAAW,SAAS,qBAAqB,GAAG,qBAAqB,EACjE,MAAM,SAAS,2BAA2B,GAAG,2BAA2B;IAExE,gBAAgB,CAAC,OAAO,EAAE,iCAAiC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACxG,gCAAgC,CAAC,OAAO,EAAE,iCAAiC,GAAG,iCAAiC,CAAC;IAChH,qBAAqB,CAAC,WAAW,EAAE,SAAS,GAAG,6BAA6B,EAAE,CAAC;IAC/E,oBAAoB,CAAC,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,GAAG,6BAA6B,CAAC;IACrG,2BAA2B,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,6BAA6B,EAAE,CAAC;IACvG,yBAAyB,CAAC,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3F,6BAA6B,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAClF,2BAA2B,CAAC,WAAW,EAAE,SAAS,GAAG,oCAAoC,GAAG,IAAI,CAAC;IACjG,2BAA2B,CAAC,OAAO,EAAE,sCAAsC,GAAG,OAAO,CAAC,qCAAqC,GAAG,IAAI,CAAC,CAAC;IACpI,oCAAoC,CAAC,KAAK,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,SAAS,CAAA;KAAE,GAAG,SAAS,CAAC;IAC7H,uCAAuC,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAAC;QACxE,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,6BAA6B,CAAC;QACxC,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,aAAa,GAAG,UAAU,CAAC;QAClC,YAAY,EAAE;YAAE,eAAe,EAAE,OAAO,CAAC;YAAC,kBAAkB,EAAE,OAAO,CAAA;SAAE,CAAC;KACzE,CAAC,CAAC;IACH,+BAA+B,CAC7B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,EAAE;QAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,GAClF,MAAM,GAAG,IAAI,CAAC;CAClB;AAID,wBAAgB,2CAA2C,CACzD,SAAS,SAAS,mBAAmB,EACrC,WAAW,SAAS,qBAAqB,EACzC,MAAM,SAAS,2BAA2B,EAC1C,YAAY,GAAG,OAAO,EAEtB,OAAO,EAAE,4CAA4C,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,CAAC,GAClG,qCAAqC,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,CAAC,CA4RvE"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { createBabylonAssetContainerProjectionImporter, createBabylonPrimitiveProjectionInstancingController, createPlayableBabylonEditorGrid, } from './playable-babylon-facade.js';
|
|
2
2
|
import { EDITOR_SCENE_PREFAB_COMPOSITION_VERSION, compileEditorSceneDocumentToSceneConfig, createEditorSceneRuntimePreviewImportPlan, createEditorSceneRuntimePreviewMainCameraRig, createEditorSceneRuntimePreviewMissingAssetUrlDiagnostic, createEditorSceneRuntimePreviewNode, isEditorScenePrefabAsset, readEditorSceneRuntimePreviewAssetId, readEditorSceneRuntimePreviewAssetKind, readEditorScenePrefabRootNodeId, resolveEditorSceneRuntimePreviewAssetUrl, resolveEditorScenePrefabInstanceRelation, } from '@fps-games/editor-playable-sdk';
|
|
3
|
+
import { createPlayableAssetResourceResolver, } from '@fps-games/playable-assets';
|
|
3
4
|
export function createFpsGameEditorProductProjectionPreview(options) {
|
|
4
5
|
const stats = {
|
|
5
6
|
importModelCalls: 0,
|
|
@@ -221,17 +222,19 @@ export function createFpsGameEditorProductProjectionPreview(options) {
|
|
|
221
222
|
return url ? { kind: 'image', url, alt: asset.displayName, fit: 'contain' } : undefined;
|
|
222
223
|
},
|
|
223
224
|
createEditorSceneInspectorTextureAssets(assets) {
|
|
225
|
+
const resourceResolver = createPlayableAssetResourceResolver((options.assetsModule.ASSET_CATALOG ?? {}));
|
|
224
226
|
return assets
|
|
225
227
|
.filter(asset => asset.kind === 'texture')
|
|
226
228
|
.flatMap((asset) => {
|
|
227
|
-
const
|
|
228
|
-
if (!
|
|
229
|
+
const resolved = resourceResolver.resolve({ assetId: asset.assetId });
|
|
230
|
+
if (!resolved.ok)
|
|
229
231
|
return [];
|
|
230
|
-
const environmentTexture = isEnvironmentTextureAsset(asset, url);
|
|
232
|
+
const environmentTexture = isEnvironmentTextureAsset(asset, resolved.resource.url);
|
|
231
233
|
return [{
|
|
232
234
|
id: asset.assetId,
|
|
233
235
|
label: asset.displayName || asset.assetId,
|
|
234
|
-
|
|
236
|
+
resource: resolved.resource,
|
|
237
|
+
url: resolved.resource.url,
|
|
235
238
|
meta: environmentTexture ? `${asset.assetId} · IBL` : asset.assetId,
|
|
236
239
|
usage: environmentTexture ? 'environment' : 'material',
|
|
237
240
|
capabilities: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playable-product-projection-preview.js","sourceRoot":"","sources":["../src/playable-product-projection-preview.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createBabylonAssetContainerProjectionImporter,\n createBabylonPrimitiveProjectionInstancingController,\n createPlayableBabylonEditorGrid,\n type BabylonAssetContainerProjectionImportEvent,\n type PlayableBabylonProjectionImportContext,\n type PlayableBabylonProjectionImportResult,\n type PlayableBabylonProjectionNode,\n type PlayableBabylonSceneCameraPreviewRig,\n} from './playable-babylon-facade.js';\nimport {\n EDITOR_SCENE_PREFAB_COMPOSITION_VERSION,\n compileEditorSceneDocumentToSceneConfig,\n createEditorSceneRuntimePreviewImportPlan,\n createEditorSceneRuntimePreviewMainCameraRig,\n createEditorSceneRuntimePreviewMissingAssetUrlDiagnostic,\n createEditorSceneRuntimePreviewNode,\n isEditorScenePrefabAsset,\n readEditorSceneRuntimePreviewAssetId,\n readEditorSceneRuntimePreviewAssetKind,\n readEditorScenePrefabRootNodeId,\n resolveEditorSceneRuntimePreviewAssetUrl,\n resolveEditorScenePrefabInstanceRelation,\n type EditorSceneAssetLibraryItem,\n type EditorSceneCameraRig,\n type EditorSceneDocument,\n type EditorSceneGameObject,\n type EditorSceneRuntimePreviewAssetsModule,\n type PlayableEditorRuntimeSceneConfig,\n type PlayableEditorRuntimeSceneNode,\n type PlayableEditorSceneCompilerDocument,\n} from '@fps-games/editor-playable-sdk';\n\nexport type FpsGameEditorProductBabylonModule = Record<string, any>;\n\nexport interface FpsGameEditorProductProjectionImportStats {\n importModelCalls: number;\n containerLoads: number;\n containerCacheHits: number;\n instantiateCalls: number;\n fallbackCount: number;\n lastCacheKey: string | null;\n lastError: string | null;\n}\n\nexport interface FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal> {\n isGroundDecalConfig(value: unknown): value is TGroundDecal;\n createDynamicTexture(\n name: string,\n scene: unknown,\n decal: TGroundDecal,\n ): { texture: any; ready: Promise<unknown> };\n readSize(decal: TGroundDecal): { width: number; depth: number };\n readRendering?(decal: TGroundDecal): {\n alphaIndex?: number;\n diffuseTextureLevel?: number;\n emissiveTextureLevel?: number;\n } | null | undefined;\n}\n\nexport interface FpsGameEditorProductProjectionPreviewOptions<\n TDocument extends EditorSceneDocument = EditorSceneDocument,\n TGameObject extends EditorSceneGameObject = EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem = EditorSceneAssetLibraryItem,\n TGroundDecal = unknown,\n> {\n assetsModule: EditorSceneRuntimePreviewAssetsModule;\n defaultCamera: EditorSceneCameraRig;\n gridName?: string;\n primitiveSourceMeshNamePrefix?: string;\n statsTarget?: Record<string, unknown>;\n statsTargetKey?: string;\n groundDecal?: FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal>;\n loadBabylonSceneLoader?(): Promise<{\n SceneLoader: {\n LoadAssetContainerAsync(\n path: string,\n filename: string,\n scene: unknown,\n onProgress?: unknown,\n pluginExtension?: string,\n ): Promise<unknown>;\n };\n }>;\n resolveModelPathAndFile(url: string): Promise<{\n path: string;\n filename: string;\n isDataUrl?: boolean;\n isCompressed?: boolean;\n }>;\n}\n\nexport interface FpsGameEditorProductProjectionPreview<\n TDocument extends EditorSceneDocument = EditorSceneDocument,\n TGameObject extends EditorSceneGameObject = EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem = EditorSceneAssetLibraryItem,\n> {\n createEditorGrid(BABYLON: FpsGameEditorProductBabylonModule, scene: unknown, camera?: unknown): unknown;\n createEditorPreviewBabylonModule(BABYLON: FpsGameEditorProductBabylonModule): FpsGameEditorProductBabylonModule;\n createProjectionNodes(editorScene: TDocument): PlayableBabylonProjectionNode[];\n createProjectionNode(editorScene: TDocument, gameObject: TGameObject): PlayableBabylonProjectionNode;\n getProjectionNodesForTarget(editorScene: TDocument, targetId: string): PlayableBabylonProjectionNode[];\n resolveProjectionTargetId(editorScene: TDocument, projectionNodeId: string): string | null;\n getProjectionSelectionNodeIds(editorScene: TDocument, targetId: string): string[];\n createSceneCameraPreviewRig(editorScene: TDocument): PlayableBabylonSceneCameraPreviewRig | null;\n importEditorProjectionModel(context: PlayableBabylonProjectionImportContext): Promise<PlayableBabylonProjectionImportResult | null>;\n createEditorSceneLibraryAssetPreview(asset: TAsset): { kind: 'image'; url: string; alt: string; fit: 'contain' } | undefined;\n createEditorSceneInspectorTextureAssets(assets: readonly TAsset[]): Array<{\n id: string;\n label: string;\n url: string;\n meta: string;\n usage: 'environment' | 'material';\n capabilities: { materialTexture: boolean; environmentTexture: boolean };\n }>;\n resolveEditorSceneTextureRefUrl(\n assets: readonly TAsset[],\n texture: { textureAssetId?: string | null; url?: string | null } | null | undefined,\n ): string | null;\n}\n\ntype EditorSceneRuntimePreviewImportPlan = NonNullable<ReturnType<typeof createEditorSceneRuntimePreviewImportPlan>>;\n\nexport function createFpsGameEditorProductProjectionPreview<\n TDocument extends EditorSceneDocument,\n TGameObject extends EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem,\n TGroundDecal = unknown,\n>(\n options: FpsGameEditorProductProjectionPreviewOptions<TDocument, TGameObject, TAsset, TGroundDecal>,\n): FpsGameEditorProductProjectionPreview<TDocument, TGameObject, TAsset> {\n const stats: FpsGameEditorProductProjectionImportStats = {\n importModelCalls: 0,\n containerLoads: 0,\n containerCacheHits: 0,\n instantiateCalls: 0,\n fallbackCount: 0,\n lastCacheKey: null,\n lastError: null,\n };\n const importPlanCache = new WeakMap<object, EditorSceneRuntimePreviewImportPlan>();\n const primitiveProjectionInstancing = createBabylonPrimitiveProjectionInstancingController({\n sourceMeshNamePrefix: options.primitiveSourceMeshNamePrefix ?? '__fps_editor_primitive_source',\n });\n type ProjectionSnapshot = {\n nodes: PlayableBabylonProjectionNode[];\n nodesByTargetId: Map<string, PlayableBabylonProjectionNode[]>;\n targetIdByProjectionNodeId: Map<string, string>;\n };\n const projectionSnapshots = new WeakMap<object, ProjectionSnapshot>();\n const compiledPrefabNodesByDocument = new WeakMap<object, Map<string, PlayableEditorRuntimeSceneNode[]>>();\n const publishStats = (): void => {\n const target = options.statsTarget ?? (typeof window !== 'undefined' ? window as unknown as Record<string, unknown> : null);\n if (!target) return;\n target[options.statsTargetKey ?? '__fpsGameEditorProjectionImportStats'] = { ...stats };\n };\n const resolveCachedImportPlan = (context: PlayableBabylonProjectionImportContext): EditorSceneRuntimePreviewImportPlan | null => {\n const cached = importPlanCache.get(context);\n if (cached) return cached;\n const importPlan = createEditorSceneRuntimePreviewImportPlan({\n assetsModule: options.assetsModule,\n asset: context.asset,\n nodeId: context.node.id,\n });\n if (importPlan) importPlanCache.set(context, importPlan);\n return importPlan;\n };\n const handleEvent = (event: BabylonAssetContainerProjectionImportEvent): void => {\n stats.lastCacheKey = event.cacheKey;\n if (event.type === 'container-load-start') {\n stats.containerLoads += 1;\n stats.lastError = null;\n } else if (event.type === 'container-cache-hit') {\n stats.containerCacheHits += 1;\n } else if (event.type === 'instantiate') {\n stats.instantiateCalls += 1;\n } else if (event.type === 'container-load-failure') {\n stats.fallbackCount += 1;\n stats.lastError = event.error instanceof Error ? event.error.message : String(event.error);\n }\n publishStats();\n };\n const modelImporter = createBabylonAssetContainerProjectionImporter({\n loadContainer: async (context) => {\n const importPlan = resolveCachedImportPlan(context);\n if (!importPlan) throw new Error('[LocalEditor] Missing model import plan for projection asset container');\n const loaderModule = await (options.loadBabylonSceneLoader?.() ?? loadDefaultBabylonSceneLoader());\n const pathInfo = await options.resolveModelPathAndFile(importPlan.url);\n return loaderModule.SceneLoader.LoadAssetContainerAsync(\n pathInfo.path,\n pathInfo.filename,\n context.scene,\n undefined,\n pathInfo.isDataUrl || pathInfo.isCompressed ? '.glb' : undefined,\n ) as Promise<any>;\n },\n resolveCacheKey: (context) => {\n const importPlan = resolveCachedImportPlan(context);\n const assetId = readEditorSceneRuntimePreviewAssetId(context.asset) ?? '';\n const assetRecord = context.asset as Record<string, unknown>;\n const assetGuid = typeof assetRecord.guid === 'string' ? assetRecord.guid : '';\n return importPlan\n ? `fps-editor:model:${assetId}:${assetGuid}:${importPlan.url}`\n : `fps-editor:model:${assetId}:${assetGuid}`;\n },\n onEvent: handleEvent,\n });\n const readPreviewGroundDecal = (asset: unknown): TGroundDecal | null => {\n const metadata = asset && typeof asset === 'object' && !Array.isArray(asset)\n ? (asset as { metadata?: unknown }).metadata\n : null;\n const groundDecalUi = metadata && typeof metadata === 'object' && !Array.isArray(metadata)\n ? (metadata as { groundDecalUi?: unknown }).groundDecalUi\n : null;\n return options.groundDecal?.isGroundDecalConfig(groundDecalUi) ? groundDecalUi : null;\n };\n const decorateProjectionNode = (\n editorScene: TDocument,\n gameObject: TGameObject,\n sourceNode: PlayableBabylonProjectionNode,\n ): PlayableBabylonProjectionNode => {\n const node = sourceNode;\n if (options.groundDecal?.isGroundDecalConfig((gameObject as { groundDecal?: unknown }).groundDecal)) {\n node.asset = {\n id: `ground-decal-ui:${gameObject.id}`,\n metadata: {\n assetId: `ground-decal-ui:${gameObject.id}`,\n type: 'texture',\n groundDecalUi: structuredClone((gameObject as unknown as { groundDecal: TGroundDecal }).groundDecal),\n },\n };\n node.primitive = null;\n }\n primitiveProjectionInstancing.remember(node);\n return node;\n };\n const createProjectionNodesForGameObject = (\n editorScene: TDocument,\n gameObject: TGameObject,\n ): PlayableBabylonProjectionNode[] => {\n const relation = resolveEditorScenePrefabInstanceRelation(editorScene, gameObject.id);\n const definition = relation.definition;\n const hasExplicitComposition = isEditorScenePrefabAsset(definition)\n && definition.prefab.compositionVersion === EDITOR_SCENE_PREFAB_COMPOSITION_VERSION\n && Array.isArray(definition.prefab.nodes)\n && definition.prefab.nodes.length > 0\n && !!readEditorScenePrefabRootNodeId(definition);\n if (!hasExplicitComposition) {\n return [decorateProjectionNode(\n editorScene,\n gameObject,\n createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode,\n )];\n }\n let compiledNodesByObjectId = compiledPrefabNodesByDocument.get(editorScene);\n if (!compiledNodesByObjectId) {\n compiledNodesByObjectId = new Map<string, PlayableEditorRuntimeSceneNode[]>();\n const baseSceneConfig: PlayableEditorRuntimeSceneConfig = {\n schemaVersion: 3,\n scene: {\n rootId: 'root',\n assets: [],\n nodes: [],\n materialAssets: [],\n materials: [],\n textures: [],\n },\n };\n const compiled = compileEditorSceneDocumentToSceneConfig(\n editorScene as unknown as PlayableEditorSceneCompilerDocument,\n baseSceneConfig,\n );\n for (const node of compiled.sceneConfig.scene.nodes) {\n const objectId = node.source?.objectId;\n if (!objectId) continue;\n const nodes = compiledNodesByObjectId.get(objectId) ?? [];\n nodes.push(node);\n compiledNodesByObjectId.set(objectId, nodes);\n }\n compiledPrefabNodesByDocument.set(editorScene, compiledNodesByObjectId);\n }\n return (compiledNodesByObjectId.get(gameObject.id) ?? []).map(node => decorateProjectionNode(\n editorScene,\n gameObject,\n createProjectionNodeFromCompiledRuntimeNode(editorScene, node),\n ));\n };\n const createProjectionSnapshot = (editorScene: TDocument): ProjectionSnapshot => {\n const cached = projectionSnapshots.get(editorScene);\n if (cached) return cached;\n const nodesByTargetId = new Map<string, PlayableBabylonProjectionNode[]>();\n const targetIdByProjectionNodeId = new Map<string, string>();\n const nodes = editorScene.scene.gameObjects.flatMap((gameObject) => {\n const targetId = gameObject.id;\n const targetNodes = createProjectionNodesForGameObject(editorScene, gameObject as TGameObject);\n nodesByTargetId.set(targetId, targetNodes);\n for (const node of targetNodes) targetIdByProjectionNodeId.set(node.id, targetId);\n return targetNodes;\n });\n const snapshot = { nodes, nodesByTargetId, targetIdByProjectionNodeId };\n projectionSnapshots.set(editorScene, snapshot);\n return snapshot;\n };\n const createProjectionNode = (\n editorScene: TDocument,\n gameObject: TGameObject,\n ): PlayableBabylonProjectionNode => {\n const nodes = createProjectionSnapshot(editorScene).nodesByTargetId.get(gameObject.id) ?? [];\n return nodes.find(node => node.id === gameObject.id)\n ?? nodes[0]\n ?? decorateProjectionNode(\n editorScene,\n gameObject,\n createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode,\n );\n };\n\n return {\n createEditorGrid(BABYLON, scene, camera) {\n return createPlayableBabylonEditorGrid({\n babylon: BABYLON,\n scene,\n camera,\n name: options.gridName ?? 'fps-editor-grid',\n halfLineCount: 96,\n });\n },\n createEditorPreviewBabylonModule(BABYLON) {\n return primitiveProjectionInstancing.createPreviewBabylonModule(BABYLON);\n },\n createProjectionNodes(editorScene) {\n const nodes = createProjectionSnapshot(editorScene).nodes;\n primitiveProjectionInstancing.sync(nodes);\n return nodes;\n },\n createProjectionNode,\n getProjectionNodesForTarget(editorScene, targetId) {\n return [...(createProjectionSnapshot(editorScene).nodesByTargetId.get(targetId) ?? [])];\n },\n resolveProjectionTargetId(editorScene, projectionNodeId) {\n return createProjectionSnapshot(editorScene).targetIdByProjectionNodeId.get(projectionNodeId) ?? null;\n },\n getProjectionSelectionNodeIds(editorScene, targetId) {\n return (createProjectionSnapshot(editorScene).nodesByTargetId.get(targetId) ?? []).map(node => node.id);\n },\n createSceneCameraPreviewRig(editorScene) {\n return createEditorSceneRuntimePreviewMainCameraRig(\n editorScene,\n options.defaultCamera,\n ) as PlayableBabylonSceneCameraPreviewRig | null;\n },\n async importEditorProjectionModel(context) {\n stats.importModelCalls += 1;\n publishStats();\n const groundDecalUi = readPreviewGroundDecal(context.asset);\n if (groundDecalUi && options.groundDecal) {\n return createGroundDecalProjectionResult(context, groundDecalUi, options.groundDecal);\n }\n const assetId = readEditorSceneRuntimePreviewAssetId(context.asset);\n if (!assetId) {\n stats.fallbackCount += 1;\n publishStats();\n return null;\n }\n const importPlan = resolveCachedImportPlan(context);\n if (!importPlan) {\n const kind = readEditorSceneRuntimePreviewAssetKind(context.asset) === 'texture' ? 'texture' : 'model';\n stats.fallbackCount += 1;\n publishStats();\n console.warn('[LocalEditor] Missing projection asset URL', createEditorSceneRuntimePreviewMissingAssetUrlDiagnostic(context.asset, kind));\n return null;\n }\n return await modelImporter(context) ?? null;\n },\n createEditorSceneLibraryAssetPreview(asset) {\n if (asset.kind !== 'texture') return undefined;\n const url = resolveEditorSceneRuntimePreviewAssetUrl(options.assetsModule, asset, 'texture');\n return url ? { kind: 'image', url, alt: asset.displayName, fit: 'contain' } : undefined;\n },\n createEditorSceneInspectorTextureAssets(assets) {\n return assets\n .filter(asset => asset.kind === 'texture')\n .flatMap((asset) => {\n const url = resolveEditorSceneRuntimePreviewAssetUrl(options.assetsModule, asset, 'texture');\n if (!url) return [];\n const environmentTexture = isEnvironmentTextureAsset(asset, url);\n return [{\n id: asset.assetId,\n label: asset.displayName || asset.assetId,\n url,\n meta: environmentTexture ? `${asset.assetId} · IBL` : asset.assetId,\n usage: environmentTexture ? 'environment' : 'material',\n capabilities: {\n materialTexture: !environmentTexture,\n environmentTexture,\n },\n }];\n });\n },\n resolveEditorSceneTextureRefUrl(assets, texture) {\n if (!texture || typeof texture !== 'object') return null;\n const textureAssetId = typeof texture.textureAssetId === 'string' ? texture.textureAssetId.trim() : '';\n if (textureAssetId) {\n const asset = assets.find(candidate => candidate.kind === 'texture' && candidate.assetId === textureAssetId);\n return asset ? resolveEditorSceneRuntimePreviewAssetUrl(options.assetsModule, asset, 'texture') ?? null : null;\n }\n const textureUrl = typeof texture.url === 'string' ? texture.url.trim() : '';\n return textureUrl || null;\n },\n };\n}\n\nfunction createProjectionNodeFromCompiledRuntimeNode(\n editorScene: EditorSceneDocument,\n node: PlayableEditorRuntimeSceneNode,\n): PlayableBabylonProjectionNode {\n const scale = typeof node.transform?.scale === 'number'\n ? { x: node.transform.scale, y: node.transform.scale, z: node.transform.scale }\n : node.transform?.scale;\n const components = node.transform\n ? [{\n type: 'Transform',\n position: structuredClone(node.transform.position ?? { x: 0, y: 0, z: 0 }),\n rotation: structuredClone(node.transform.rotation ?? { x: 0, y: 0, z: 0 }),\n scale: structuredClone(scale ?? { x: 1, y: 1, z: 1 }),\n }]\n : [];\n if (node.kind === 'instance') {\n components.push({ type: 'ModelRenderer', assetId: node.instance.assetId } as never);\n }\n const gameObject = {\n id: node.id,\n name: node.name ?? node.id,\n kind: node.kind === 'instance' || node.kind === 'primitive' || node.kind === 'transform'\n ? node.kind\n : 'group',\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.enabled === false ? { active: false } : {}),\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.rendering ? { rendering: structuredClone(node.rendering) } : {}),\n ...(node.kind === 'instance' || node.kind === 'primitive' || node.kind === 'transform'\n ? node.overrides ? { overrides: structuredClone(node.overrides) } : {}\n : {}),\n ...(node.kind === 'primitive' ? { primitive: structuredClone(node.primitive) } : {}),\n ...(node.kind === 'transform' && node.camera ? { camera: structuredClone(node.camera) } : {}),\n ...(node.kind === 'transform' && node.light ? { light: structuredClone(node.light) } : {}),\n ...(node.kind === 'transform' && node.marker ? { marker: structuredClone(node.marker) } : {}),\n components,\n } as unknown as EditorSceneGameObject;\n const previewNode = createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode;\n return {\n ...previewNode,\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nasync function loadDefaultBabylonSceneLoader() {\n await import('@babylonjs/loaders/glTF');\n return import('@babylonjs/core/Loading/sceneLoader');\n}\n\nasync function createGroundDecalProjectionResult<TGroundDecal>(\n context: PlayableBabylonProjectionImportContext,\n decal: TGroundDecal,\n hooks: FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal>,\n): Promise<PlayableBabylonProjectionImportResult> {\n const [{ MeshBuilder }, { StandardMaterial }, { Color3 }] = await Promise.all([\n import('@babylonjs/core/Meshes/meshBuilder'),\n import('@babylonjs/core/Materials/standardMaterial'),\n import('@babylonjs/core/Maths/math.color'),\n ]);\n const size = hooks.readSize(decal);\n const rendering = hooks.readRendering?.(decal) ?? null;\n const mesh = MeshBuilder.CreateGround(`${context.node.id}.groundDecalUiProjection`, {\n width: size.width,\n height: size.depth,\n }, context.scene);\n mesh.isPickable = true;\n mesh.receiveShadows = false;\n mesh.alphaIndex = rendering?.alphaIndex ?? 100;\n const mat = new StandardMaterial(`${context.node.id}.groundDecalUiProjectionMaterial`, context.scene);\n const { texture, ready } = hooks.createDynamicTexture(`${context.node.id}.groundDecalUiProjectionTexture`, context.scene, decal);\n await ready;\n mat.diffuseTexture = texture;\n mat.useAlphaFromDiffuseTexture = true;\n mat.diffuseColor = new Color3(1, 1, 1);\n mat.emissiveColor = new Color3(1, 1, 1);\n mat.specularColor = new Color3(0, 0, 0);\n mat.backFaceCulling = false;\n mat.disableLighting = true;\n if (typeof rendering?.diffuseTextureLevel === 'number' && Number.isFinite(rendering.diffuseTextureLevel)) {\n if (mat.diffuseTexture) mat.diffuseTexture.level = rendering.diffuseTextureLevel;\n }\n if (\n typeof rendering?.emissiveTextureLevel === 'number'\n && Number.isFinite(rendering.emissiveTextureLevel)\n && rendering.emissiveTextureLevel > 0\n ) {\n mat.emissiveTexture = texture;\n if (mat.emissiveTexture) mat.emissiveTexture.level = rendering.emissiveTextureLevel;\n }\n mesh.material = mat;\n return { meshes: [mesh], transformNodes: [], animationGroups: [] };\n}\n\nfunction isEnvironmentTextureAsset(asset: EditorSceneAssetLibraryItem, resolvedUrl: string): boolean {\n const metadata = asset.metadata && typeof asset.metadata === 'object' && !Array.isArray(asset.metadata)\n ? asset.metadata as Record<string, unknown>\n : {};\n if (metadata.textureUsage === 'environment' || metadata.usage === 'environment') return true;\n const capabilities = metadata.capabilities && typeof metadata.capabilities === 'object' && !Array.isArray(metadata.capabilities)\n ? metadata.capabilities as Record<string, unknown>\n : null;\n if (capabilities?.environmentTexture === true) return true;\n if (capabilities?.environmentTexture === false) return false;\n const candidates = [\n resolvedUrl,\n asset.displayName,\n asset.assetId,\n typeof metadata.relativePath === 'string' ? metadata.relativePath : '',\n typeof metadata.originalFileName === 'string' ? metadata.originalFileName : '',\n ];\n return candidates.some(value => /\\.(env|hdr|dds|ktx|ktx2)(?:[?#].*)?$/i.test(value));\n}\n"]}
|
|
1
|
+
{"version":3,"file":"playable-product-projection-preview.js","sourceRoot":"","sources":["../src/playable-product-projection-preview.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n createBabylonAssetContainerProjectionImporter,\n createBabylonPrimitiveProjectionInstancingController,\n createPlayableBabylonEditorGrid,\n type BabylonAssetContainerProjectionImportEvent,\n type PlayableBabylonProjectionImportContext,\n type PlayableBabylonProjectionImportResult,\n type PlayableBabylonProjectionNode,\n type PlayableBabylonSceneCameraPreviewRig,\n} from './playable-babylon-facade.js';\nimport {\n EDITOR_SCENE_PREFAB_COMPOSITION_VERSION,\n compileEditorSceneDocumentToSceneConfig,\n createEditorSceneRuntimePreviewImportPlan,\n createEditorSceneRuntimePreviewMainCameraRig,\n createEditorSceneRuntimePreviewMissingAssetUrlDiagnostic,\n createEditorSceneRuntimePreviewNode,\n isEditorScenePrefabAsset,\n readEditorSceneRuntimePreviewAssetId,\n readEditorSceneRuntimePreviewAssetKind,\n readEditorScenePrefabRootNodeId,\n resolveEditorSceneRuntimePreviewAssetUrl,\n resolveEditorScenePrefabInstanceRelation,\n type EditorSceneAssetLibraryItem,\n type EditorSceneCameraRig,\n type EditorSceneDocument,\n type EditorSceneGameObject,\n type EditorSceneRuntimePreviewAssetsModule,\n type PlayableEditorRuntimeSceneConfig,\n type PlayableEditorRuntimeSceneNode,\n type PlayableEditorSceneCompilerDocument,\n} from '@fps-games/editor-playable-sdk';\nimport {\n createPlayableAssetResourceResolver,\n type PlayableGeneratedAssetCatalogEntry,\n type PlayableResolvedAssetResource,\n} from '@fps-games/playable-assets';\n\nexport type FpsGameEditorProductBabylonModule = Record<string, any>;\n\nexport interface FpsGameEditorProductProjectionImportStats {\n importModelCalls: number;\n containerLoads: number;\n containerCacheHits: number;\n instantiateCalls: number;\n fallbackCount: number;\n lastCacheKey: string | null;\n lastError: string | null;\n}\n\nexport interface FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal> {\n isGroundDecalConfig(value: unknown): value is TGroundDecal;\n createDynamicTexture(\n name: string,\n scene: unknown,\n decal: TGroundDecal,\n ): { texture: any; ready: Promise<unknown> };\n readSize(decal: TGroundDecal): { width: number; depth: number };\n readRendering?(decal: TGroundDecal): {\n alphaIndex?: number;\n diffuseTextureLevel?: number;\n emissiveTextureLevel?: number;\n } | null | undefined;\n}\n\nexport interface FpsGameEditorProductProjectionPreviewOptions<\n TDocument extends EditorSceneDocument = EditorSceneDocument,\n TGameObject extends EditorSceneGameObject = EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem = EditorSceneAssetLibraryItem,\n TGroundDecal = unknown,\n> {\n assetsModule: EditorSceneRuntimePreviewAssetsModule;\n defaultCamera: EditorSceneCameraRig;\n gridName?: string;\n primitiveSourceMeshNamePrefix?: string;\n statsTarget?: Record<string, unknown>;\n statsTargetKey?: string;\n groundDecal?: FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal>;\n loadBabylonSceneLoader?(): Promise<{\n SceneLoader: {\n LoadAssetContainerAsync(\n path: string,\n filename: string,\n scene: unknown,\n onProgress?: unknown,\n pluginExtension?: string,\n ): Promise<unknown>;\n };\n }>;\n resolveModelPathAndFile(url: string): Promise<{\n path: string;\n filename: string;\n isDataUrl?: boolean;\n isCompressed?: boolean;\n }>;\n}\n\nexport interface FpsGameEditorProductProjectionPreview<\n TDocument extends EditorSceneDocument = EditorSceneDocument,\n TGameObject extends EditorSceneGameObject = EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem = EditorSceneAssetLibraryItem,\n> {\n createEditorGrid(BABYLON: FpsGameEditorProductBabylonModule, scene: unknown, camera?: unknown): unknown;\n createEditorPreviewBabylonModule(BABYLON: FpsGameEditorProductBabylonModule): FpsGameEditorProductBabylonModule;\n createProjectionNodes(editorScene: TDocument): PlayableBabylonProjectionNode[];\n createProjectionNode(editorScene: TDocument, gameObject: TGameObject): PlayableBabylonProjectionNode;\n getProjectionNodesForTarget(editorScene: TDocument, targetId: string): PlayableBabylonProjectionNode[];\n resolveProjectionTargetId(editorScene: TDocument, projectionNodeId: string): string | null;\n getProjectionSelectionNodeIds(editorScene: TDocument, targetId: string): string[];\n createSceneCameraPreviewRig(editorScene: TDocument): PlayableBabylonSceneCameraPreviewRig | null;\n importEditorProjectionModel(context: PlayableBabylonProjectionImportContext): Promise<PlayableBabylonProjectionImportResult | null>;\n createEditorSceneLibraryAssetPreview(asset: TAsset): { kind: 'image'; url: string; alt: string; fit: 'contain' } | undefined;\n createEditorSceneInspectorTextureAssets(assets: readonly TAsset[]): Array<{\n id: string;\n label: string;\n resource: PlayableResolvedAssetResource;\n url: string;\n meta: string;\n usage: 'environment' | 'material';\n capabilities: { materialTexture: boolean; environmentTexture: boolean };\n }>;\n resolveEditorSceneTextureRefUrl(\n assets: readonly TAsset[],\n texture: { textureAssetId?: string | null; url?: string | null } | null | undefined,\n ): string | null;\n}\n\ntype EditorSceneRuntimePreviewImportPlan = NonNullable<ReturnType<typeof createEditorSceneRuntimePreviewImportPlan>>;\n\nexport function createFpsGameEditorProductProjectionPreview<\n TDocument extends EditorSceneDocument,\n TGameObject extends EditorSceneGameObject,\n TAsset extends EditorSceneAssetLibraryItem,\n TGroundDecal = unknown,\n>(\n options: FpsGameEditorProductProjectionPreviewOptions<TDocument, TGameObject, TAsset, TGroundDecal>,\n): FpsGameEditorProductProjectionPreview<TDocument, TGameObject, TAsset> {\n const stats: FpsGameEditorProductProjectionImportStats = {\n importModelCalls: 0,\n containerLoads: 0,\n containerCacheHits: 0,\n instantiateCalls: 0,\n fallbackCount: 0,\n lastCacheKey: null,\n lastError: null,\n };\n const importPlanCache = new WeakMap<object, EditorSceneRuntimePreviewImportPlan>();\n const primitiveProjectionInstancing = createBabylonPrimitiveProjectionInstancingController({\n sourceMeshNamePrefix: options.primitiveSourceMeshNamePrefix ?? '__fps_editor_primitive_source',\n });\n type ProjectionSnapshot = {\n nodes: PlayableBabylonProjectionNode[];\n nodesByTargetId: Map<string, PlayableBabylonProjectionNode[]>;\n targetIdByProjectionNodeId: Map<string, string>;\n };\n const projectionSnapshots = new WeakMap<object, ProjectionSnapshot>();\n const compiledPrefabNodesByDocument = new WeakMap<object, Map<string, PlayableEditorRuntimeSceneNode[]>>();\n const publishStats = (): void => {\n const target = options.statsTarget ?? (typeof window !== 'undefined' ? window as unknown as Record<string, unknown> : null);\n if (!target) return;\n target[options.statsTargetKey ?? '__fpsGameEditorProjectionImportStats'] = { ...stats };\n };\n const resolveCachedImportPlan = (context: PlayableBabylonProjectionImportContext): EditorSceneRuntimePreviewImportPlan | null => {\n const cached = importPlanCache.get(context);\n if (cached) return cached;\n const importPlan = createEditorSceneRuntimePreviewImportPlan({\n assetsModule: options.assetsModule,\n asset: context.asset,\n nodeId: context.node.id,\n });\n if (importPlan) importPlanCache.set(context, importPlan);\n return importPlan;\n };\n const handleEvent = (event: BabylonAssetContainerProjectionImportEvent): void => {\n stats.lastCacheKey = event.cacheKey;\n if (event.type === 'container-load-start') {\n stats.containerLoads += 1;\n stats.lastError = null;\n } else if (event.type === 'container-cache-hit') {\n stats.containerCacheHits += 1;\n } else if (event.type === 'instantiate') {\n stats.instantiateCalls += 1;\n } else if (event.type === 'container-load-failure') {\n stats.fallbackCount += 1;\n stats.lastError = event.error instanceof Error ? event.error.message : String(event.error);\n }\n publishStats();\n };\n const modelImporter = createBabylonAssetContainerProjectionImporter({\n loadContainer: async (context) => {\n const importPlan = resolveCachedImportPlan(context);\n if (!importPlan) throw new Error('[LocalEditor] Missing model import plan for projection asset container');\n const loaderModule = await (options.loadBabylonSceneLoader?.() ?? loadDefaultBabylonSceneLoader());\n const pathInfo = await options.resolveModelPathAndFile(importPlan.url);\n return loaderModule.SceneLoader.LoadAssetContainerAsync(\n pathInfo.path,\n pathInfo.filename,\n context.scene,\n undefined,\n pathInfo.isDataUrl || pathInfo.isCompressed ? '.glb' : undefined,\n ) as Promise<any>;\n },\n resolveCacheKey: (context) => {\n const importPlan = resolveCachedImportPlan(context);\n const assetId = readEditorSceneRuntimePreviewAssetId(context.asset) ?? '';\n const assetRecord = context.asset as Record<string, unknown>;\n const assetGuid = typeof assetRecord.guid === 'string' ? assetRecord.guid : '';\n return importPlan\n ? `fps-editor:model:${assetId}:${assetGuid}:${importPlan.url}`\n : `fps-editor:model:${assetId}:${assetGuid}`;\n },\n onEvent: handleEvent,\n });\n const readPreviewGroundDecal = (asset: unknown): TGroundDecal | null => {\n const metadata = asset && typeof asset === 'object' && !Array.isArray(asset)\n ? (asset as { metadata?: unknown }).metadata\n : null;\n const groundDecalUi = metadata && typeof metadata === 'object' && !Array.isArray(metadata)\n ? (metadata as { groundDecalUi?: unknown }).groundDecalUi\n : null;\n return options.groundDecal?.isGroundDecalConfig(groundDecalUi) ? groundDecalUi : null;\n };\n const decorateProjectionNode = (\n editorScene: TDocument,\n gameObject: TGameObject,\n sourceNode: PlayableBabylonProjectionNode,\n ): PlayableBabylonProjectionNode => {\n const node = sourceNode;\n if (options.groundDecal?.isGroundDecalConfig((gameObject as { groundDecal?: unknown }).groundDecal)) {\n node.asset = {\n id: `ground-decal-ui:${gameObject.id}`,\n metadata: {\n assetId: `ground-decal-ui:${gameObject.id}`,\n type: 'texture',\n groundDecalUi: structuredClone((gameObject as unknown as { groundDecal: TGroundDecal }).groundDecal),\n },\n };\n node.primitive = null;\n }\n primitiveProjectionInstancing.remember(node);\n return node;\n };\n const createProjectionNodesForGameObject = (\n editorScene: TDocument,\n gameObject: TGameObject,\n ): PlayableBabylonProjectionNode[] => {\n const relation = resolveEditorScenePrefabInstanceRelation(editorScene, gameObject.id);\n const definition = relation.definition;\n const hasExplicitComposition = isEditorScenePrefabAsset(definition)\n && definition.prefab.compositionVersion === EDITOR_SCENE_PREFAB_COMPOSITION_VERSION\n && Array.isArray(definition.prefab.nodes)\n && definition.prefab.nodes.length > 0\n && !!readEditorScenePrefabRootNodeId(definition);\n if (!hasExplicitComposition) {\n return [decorateProjectionNode(\n editorScene,\n gameObject,\n createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode,\n )];\n }\n let compiledNodesByObjectId = compiledPrefabNodesByDocument.get(editorScene);\n if (!compiledNodesByObjectId) {\n compiledNodesByObjectId = new Map<string, PlayableEditorRuntimeSceneNode[]>();\n const baseSceneConfig: PlayableEditorRuntimeSceneConfig = {\n schemaVersion: 3,\n scene: {\n rootId: 'root',\n assets: [],\n nodes: [],\n materialAssets: [],\n materials: [],\n textures: [],\n },\n };\n const compiled = compileEditorSceneDocumentToSceneConfig(\n editorScene as unknown as PlayableEditorSceneCompilerDocument,\n baseSceneConfig,\n );\n for (const node of compiled.sceneConfig.scene.nodes) {\n const objectId = node.source?.objectId;\n if (!objectId) continue;\n const nodes = compiledNodesByObjectId.get(objectId) ?? [];\n nodes.push(node);\n compiledNodesByObjectId.set(objectId, nodes);\n }\n compiledPrefabNodesByDocument.set(editorScene, compiledNodesByObjectId);\n }\n return (compiledNodesByObjectId.get(gameObject.id) ?? []).map(node => decorateProjectionNode(\n editorScene,\n gameObject,\n createProjectionNodeFromCompiledRuntimeNode(editorScene, node),\n ));\n };\n const createProjectionSnapshot = (editorScene: TDocument): ProjectionSnapshot => {\n const cached = projectionSnapshots.get(editorScene);\n if (cached) return cached;\n const nodesByTargetId = new Map<string, PlayableBabylonProjectionNode[]>();\n const targetIdByProjectionNodeId = new Map<string, string>();\n const nodes = editorScene.scene.gameObjects.flatMap((gameObject) => {\n const targetId = gameObject.id;\n const targetNodes = createProjectionNodesForGameObject(editorScene, gameObject as TGameObject);\n nodesByTargetId.set(targetId, targetNodes);\n for (const node of targetNodes) targetIdByProjectionNodeId.set(node.id, targetId);\n return targetNodes;\n });\n const snapshot = { nodes, nodesByTargetId, targetIdByProjectionNodeId };\n projectionSnapshots.set(editorScene, snapshot);\n return snapshot;\n };\n const createProjectionNode = (\n editorScene: TDocument,\n gameObject: TGameObject,\n ): PlayableBabylonProjectionNode => {\n const nodes = createProjectionSnapshot(editorScene).nodesByTargetId.get(gameObject.id) ?? [];\n return nodes.find(node => node.id === gameObject.id)\n ?? nodes[0]\n ?? decorateProjectionNode(\n editorScene,\n gameObject,\n createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode,\n );\n };\n\n return {\n createEditorGrid(BABYLON, scene, camera) {\n return createPlayableBabylonEditorGrid({\n babylon: BABYLON,\n scene,\n camera,\n name: options.gridName ?? 'fps-editor-grid',\n halfLineCount: 96,\n });\n },\n createEditorPreviewBabylonModule(BABYLON) {\n return primitiveProjectionInstancing.createPreviewBabylonModule(BABYLON);\n },\n createProjectionNodes(editorScene) {\n const nodes = createProjectionSnapshot(editorScene).nodes;\n primitiveProjectionInstancing.sync(nodes);\n return nodes;\n },\n createProjectionNode,\n getProjectionNodesForTarget(editorScene, targetId) {\n return [...(createProjectionSnapshot(editorScene).nodesByTargetId.get(targetId) ?? [])];\n },\n resolveProjectionTargetId(editorScene, projectionNodeId) {\n return createProjectionSnapshot(editorScene).targetIdByProjectionNodeId.get(projectionNodeId) ?? null;\n },\n getProjectionSelectionNodeIds(editorScene, targetId) {\n return (createProjectionSnapshot(editorScene).nodesByTargetId.get(targetId) ?? []).map(node => node.id);\n },\n createSceneCameraPreviewRig(editorScene) {\n return createEditorSceneRuntimePreviewMainCameraRig(\n editorScene,\n options.defaultCamera,\n ) as PlayableBabylonSceneCameraPreviewRig | null;\n },\n async importEditorProjectionModel(context) {\n stats.importModelCalls += 1;\n publishStats();\n const groundDecalUi = readPreviewGroundDecal(context.asset);\n if (groundDecalUi && options.groundDecal) {\n return createGroundDecalProjectionResult(context, groundDecalUi, options.groundDecal);\n }\n const assetId = readEditorSceneRuntimePreviewAssetId(context.asset);\n if (!assetId) {\n stats.fallbackCount += 1;\n publishStats();\n return null;\n }\n const importPlan = resolveCachedImportPlan(context);\n if (!importPlan) {\n const kind = readEditorSceneRuntimePreviewAssetKind(context.asset) === 'texture' ? 'texture' : 'model';\n stats.fallbackCount += 1;\n publishStats();\n console.warn('[LocalEditor] Missing projection asset URL', createEditorSceneRuntimePreviewMissingAssetUrlDiagnostic(context.asset, kind));\n return null;\n }\n return await modelImporter(context) ?? null;\n },\n createEditorSceneLibraryAssetPreview(asset) {\n if (asset.kind !== 'texture') return undefined;\n const url = resolveEditorSceneRuntimePreviewAssetUrl(options.assetsModule, asset, 'texture');\n return url ? { kind: 'image', url, alt: asset.displayName, fit: 'contain' } : undefined;\n },\n createEditorSceneInspectorTextureAssets(assets) {\n const resourceResolver = createPlayableAssetResourceResolver(\n (options.assetsModule.ASSET_CATALOG ?? {}) as Readonly<Record<string, PlayableGeneratedAssetCatalogEntry>>,\n );\n return assets\n .filter(asset => asset.kind === 'texture')\n .flatMap((asset) => {\n const resolved = resourceResolver.resolve({ assetId: asset.assetId });\n if (!resolved.ok) return [];\n const environmentTexture = isEnvironmentTextureAsset(asset, resolved.resource.url);\n return [{\n id: asset.assetId,\n label: asset.displayName || asset.assetId,\n resource: resolved.resource,\n url: resolved.resource.url,\n meta: environmentTexture ? `${asset.assetId} · IBL` : asset.assetId,\n usage: environmentTexture ? 'environment' : 'material',\n capabilities: {\n materialTexture: !environmentTexture,\n environmentTexture,\n },\n }];\n });\n },\n resolveEditorSceneTextureRefUrl(assets, texture) {\n if (!texture || typeof texture !== 'object') return null;\n const textureAssetId = typeof texture.textureAssetId === 'string' ? texture.textureAssetId.trim() : '';\n if (textureAssetId) {\n const asset = assets.find(candidate => candidate.kind === 'texture' && candidate.assetId === textureAssetId);\n return asset ? resolveEditorSceneRuntimePreviewAssetUrl(options.assetsModule, asset, 'texture') ?? null : null;\n }\n const textureUrl = typeof texture.url === 'string' ? texture.url.trim() : '';\n return textureUrl || null;\n },\n };\n}\n\nfunction createProjectionNodeFromCompiledRuntimeNode(\n editorScene: EditorSceneDocument,\n node: PlayableEditorRuntimeSceneNode,\n): PlayableBabylonProjectionNode {\n const scale = typeof node.transform?.scale === 'number'\n ? { x: node.transform.scale, y: node.transform.scale, z: node.transform.scale }\n : node.transform?.scale;\n const components = node.transform\n ? [{\n type: 'Transform',\n position: structuredClone(node.transform.position ?? { x: 0, y: 0, z: 0 }),\n rotation: structuredClone(node.transform.rotation ?? { x: 0, y: 0, z: 0 }),\n scale: structuredClone(scale ?? { x: 1, y: 1, z: 1 }),\n }]\n : [];\n if (node.kind === 'instance') {\n components.push({ type: 'ModelRenderer', assetId: node.instance.assetId } as never);\n }\n const gameObject = {\n id: node.id,\n name: node.name ?? node.id,\n kind: node.kind === 'instance' || node.kind === 'primitive' || node.kind === 'transform'\n ? node.kind\n : 'group',\n ...(node.parentId ? { parentId: node.parentId } : {}),\n ...(node.enabled === false ? { active: false } : {}),\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.rendering ? { rendering: structuredClone(node.rendering) } : {}),\n ...(node.kind === 'instance' || node.kind === 'primitive' || node.kind === 'transform'\n ? node.overrides ? { overrides: structuredClone(node.overrides) } : {}\n : {}),\n ...(node.kind === 'primitive' ? { primitive: structuredClone(node.primitive) } : {}),\n ...(node.kind === 'transform' && node.camera ? { camera: structuredClone(node.camera) } : {}),\n ...(node.kind === 'transform' && node.light ? { light: structuredClone(node.light) } : {}),\n ...(node.kind === 'transform' && node.marker ? { marker: structuredClone(node.marker) } : {}),\n components,\n } as unknown as EditorSceneGameObject;\n const previewNode = createEditorSceneRuntimePreviewNode(editorScene, gameObject) as unknown as PlayableBabylonProjectionNode;\n return {\n ...previewNode,\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nasync function loadDefaultBabylonSceneLoader() {\n await import('@babylonjs/loaders/glTF');\n return import('@babylonjs/core/Loading/sceneLoader');\n}\n\nasync function createGroundDecalProjectionResult<TGroundDecal>(\n context: PlayableBabylonProjectionImportContext,\n decal: TGroundDecal,\n hooks: FpsGameEditorProductProjectionGroundDecalHooks<TGroundDecal>,\n): Promise<PlayableBabylonProjectionImportResult> {\n const [{ MeshBuilder }, { StandardMaterial }, { Color3 }] = await Promise.all([\n import('@babylonjs/core/Meshes/meshBuilder'),\n import('@babylonjs/core/Materials/standardMaterial'),\n import('@babylonjs/core/Maths/math.color'),\n ]);\n const size = hooks.readSize(decal);\n const rendering = hooks.readRendering?.(decal) ?? null;\n const mesh = MeshBuilder.CreateGround(`${context.node.id}.groundDecalUiProjection`, {\n width: size.width,\n height: size.depth,\n }, context.scene);\n mesh.isPickable = true;\n mesh.receiveShadows = false;\n mesh.alphaIndex = rendering?.alphaIndex ?? 100;\n const mat = new StandardMaterial(`${context.node.id}.groundDecalUiProjectionMaterial`, context.scene);\n const { texture, ready } = hooks.createDynamicTexture(`${context.node.id}.groundDecalUiProjectionTexture`, context.scene, decal);\n await ready;\n mat.diffuseTexture = texture;\n mat.useAlphaFromDiffuseTexture = true;\n mat.diffuseColor = new Color3(1, 1, 1);\n mat.emissiveColor = new Color3(1, 1, 1);\n mat.specularColor = new Color3(0, 0, 0);\n mat.backFaceCulling = false;\n mat.disableLighting = true;\n if (typeof rendering?.diffuseTextureLevel === 'number' && Number.isFinite(rendering.diffuseTextureLevel)) {\n if (mat.diffuseTexture) mat.diffuseTexture.level = rendering.diffuseTextureLevel;\n }\n if (\n typeof rendering?.emissiveTextureLevel === 'number'\n && Number.isFinite(rendering.emissiveTextureLevel)\n && rendering.emissiveTextureLevel > 0\n ) {\n mat.emissiveTexture = texture;\n if (mat.emissiveTexture) mat.emissiveTexture.level = rendering.emissiveTextureLevel;\n }\n mesh.material = mat;\n return { meshes: [mesh], transformNodes: [], animationGroups: [] };\n}\n\nfunction isEnvironmentTextureAsset(asset: EditorSceneAssetLibraryItem, resolvedUrl: string): boolean {\n const metadata = asset.metadata && typeof asset.metadata === 'object' && !Array.isArray(asset.metadata)\n ? asset.metadata as Record<string, unknown>\n : {};\n if (metadata.textureUsage === 'environment' || metadata.usage === 'environment') return true;\n const capabilities = metadata.capabilities && typeof metadata.capabilities === 'object' && !Array.isArray(metadata.capabilities)\n ? metadata.capabilities as Record<string, unknown>\n : null;\n if (capabilities?.environmentTexture === true) return true;\n if (capabilities?.environmentTexture === false) return false;\n const candidates = [\n resolvedUrl,\n asset.displayName,\n asset.assetId,\n typeof metadata.relativePath === 'string' ? metadata.relativePath : '',\n typeof metadata.originalFileName === 'string' ? metadata.originalFileName : '',\n ];\n return candidates.some(value => /\\.(env|hdr|dds|ktx|ktx2)(?:[?#].*)?$/i.test(value));\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playable-product-scene-capabilities.d.ts","sourceRoot":"","sources":["../src/playable-product-scene-capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yCAAyC,EACzC,yCAAyC,EACzC,qCAAqC,EACrC,8CAA8C,EAC9C,6CAA6C,EAC7C,mCAAmC,EACnC,sCAAsC,EACtC,wCAAwC,EAExC,wCAAwC,EACxC,sCAAsC,EACtC,uCAAuC,EACvC,sCAAsC,EACtC,8CAA8C,EAC9C,yCAAyC,EACzC,6BAA6B,EAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EACV,sCAAsC,EACtC,0CAA0C,EAC3C,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAML,mCAAmC,EACnC,gDAAgD,EAChD,wCAAwC,EACxC,kCAAkC,
|
|
1
|
+
{"version":3,"file":"playable-product-scene-capabilities.d.ts","sourceRoot":"","sources":["../src/playable-product-scene-capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH, assertPlayableEditorSceneDocumentContract, createEditorSceneSerializedMultiTransformPatch, createEditorSceneTransformBatchPatch, createEditorSceneTransformPatch, getEditorScenePrefabStageDescriptor, getEditorScenePrefabStageProjectionNodeIdForNode, getEditorScenePrefabStageProjectionNodes, getEditorScenePrefabStageStructure, resolveEditorSceneLightingPreviewProfile, resolveEditorSceneMaterialSlotReimportDiff, resolveEditorScenePrefabStagePreviewTarget, toEditorSceneLocalTransformFromWorld, } from '@fps-games/editor-playable-sdk';
|
|
1
|
+
import { EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH, assertPlayableEditorSceneDocumentContract, createEditorSceneSerializedMultiTransformPatch, createEditorSceneTransformBatchPatch, createEditorSceneTransformPatch, getEditorScenePrefabStageDescriptor, getEditorScenePrefabStageProjectionNodeIdForNode, getEditorScenePrefabStageProjectionNodes, getEditorScenePrefabStageStructure, resolveEditorSceneAssetLibraryItemRelativePath, resolveEditorSceneLightingPreviewProfile, resolveEditorSceneMaterialSlotReimportDiff, resolveEditorScenePrefabStagePreviewTarget, toEditorSceneLocalTransformFromWorld, } from '@fps-games/editor-playable-sdk';
|
|
2
2
|
import { createBabylonEditorPreviewEngine } from './internal/babylon-preview-engine.js';
|
|
3
3
|
export function prepareFpsGameEditorStandardDocument(input) {
|
|
4
4
|
return input.normalizeHierarchyDocument(input.ensureEnvironmentDefaults(input.hydrateDocumentAssets(input.document, input.assets)));
|
|
@@ -127,14 +127,20 @@ export function createFpsGameEditorPlayableProjectHostAssembly(input) {
|
|
|
127
127
|
localTestActions: input.runtimeWindow.parent === input.runtimeWindow,
|
|
128
128
|
gameModeEntryVisible: input.gameModeEntryVisible,
|
|
129
129
|
authoring: { drivers: [input.sceneSource.createDriver()] },
|
|
130
|
-
persistenceAdapter: {
|
|
130
|
+
persistenceAdapter: {
|
|
131
|
+
loadAuthoringSource: async () => { const loaded = await input.sceneSource.load(); return { source: loaded.source, document: loaded.document, assets: loaded.assets, summary: loaded.summary }; },
|
|
132
|
+
loadAssets: input.sceneSource.loadAssets,
|
|
133
|
+
...(input.sceneSource.loadProjectFiles ? { loadProjectFiles: input.sceneSource.loadProjectFiles } : {}),
|
|
134
|
+
...(input.sceneSource.loadProjectFile ? { loadProjectFile: input.sceneSource.loadProjectFile } : {}),
|
|
135
|
+
...(input.sceneSource.resolveProjectMedia ? { resolveProjectMedia: input.sceneSource.resolveProjectMedia } : {}),
|
|
136
|
+
},
|
|
131
137
|
worldAdapter: {
|
|
132
138
|
loadPreviewEngine: async () => projection.createEditorPreviewBabylonModule(await input.loadBabylon()),
|
|
133
139
|
createPreviewEngine: createBabylonEditorPreviewEngine,
|
|
134
140
|
importPreviewAsset: projection.importEditorProjectionModel,
|
|
135
141
|
resolveMaterialTextureUrl: (texture) => projection.resolveEditorSceneTextureRefUrl(assets, texture),
|
|
136
142
|
resolveAssetId: (asset) => asset.assetId,
|
|
137
|
-
toBrowserAssetItem: (asset) => ({ id: asset.assetId, guid: asset.guid, assetId: asset.assetId, kind: asset.kind, label: asset.displayName, meta: asset.assetId, external: asset.external, origin: asset.origin, dedupeKey: asset.dedupeKey, placeable: asset.placeable, preview: projection.createEditorSceneLibraryAssetPreview(asset), disabled: asset.placeable === false }),
|
|
143
|
+
toBrowserAssetItem: (asset) => ({ id: asset.assetId, guid: asset.guid, assetId: asset.assetId, kind: asset.kind, label: asset.displayName, relativePath: resolveEditorSceneAssetLibraryItemRelativePath(asset), meta: asset.assetId, external: asset.external, origin: asset.origin, dedupeKey: asset.dedupeKey, contentHash: typeof asset.metadata?.contentHash === 'string' ? asset.metadata.contentHash : undefined, placeable: asset.placeable, preview: projection.createEditorSceneLibraryAssetPreview(asset), disabled: asset.placeable === false }),
|
|
138
144
|
},
|
|
139
145
|
world: input.world,
|
|
140
146
|
createGrid: projection.createEditorGrid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playable-product-scene-capabilities.js","sourceRoot":"","sources":["../src/playable-product-scene-capabilities.ts"],"names":[],"mappings":"AAuBA,OAAO,EACL,2CAA2C,EAC3C,yCAAyC,EACzC,8CAA8C,EAC9C,oCAAoC,EACpC,+BAA+B,EAC/B,mCAAmC,EACnC,gDAAgD,EAChD,wCAAwC,EACxC,kCAAkC,EAClC,wCAAwC,EACxC,0CAA0C,EAC1C,0CAA0C,EAC1C,oCAAoC,GAMrC,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,gCAAgC,EAAE,MAAM,sCAAsC,CAAC;AAoCxF,MAAM,UAAU,oCAAoC,CAClD,KAAkE;IAElE,OAAO,KAAK,CAAC,0BAA0B,CACrC,KAAK,CAAC,yBAAyB,CAAC,KAAK,CAAC,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAC3F,CAAC;AACJ,CAAC;AAED,MAAM,wCAAwC,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7D,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;IAC7E,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC3E,cAAc,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACpF,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;IACtF,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;CACnF,CAAC,CAAC;AAEH,MAAM,UAAU,8CAA8C,CAC5D,KAAyE;IAEzE,IAAI,MAAM,GAAa,EAAE,CAAC;IAC1B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;IACpC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,SAAS,GAAG,CAAC,UAAoB,EAAY,EAAE;QACnD,MAAM,GAAG,UAAU,CAAC;QACpB,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,uCAAuC,CAAC,MAAM,CAAC,CAAC,CAAC;QACxF,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IACF,MAAM,qBAAqB,GAAG,CAAC,QAAmB,EAAE,UAAoB,EAAa,EAAE,CAAC,CACtF,KAAK,CAAC,eAAe,CAAC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC,IAAI,QAAQ,CAChF,CAAC;IACF,MAAM,eAAe,GAAG,CAAC,QAAmB,EAAE,UAAoB,EAAa,EAAE;QAC/E,IAAI,KAAK,CAAC,eAAe;YAAE,OAAO,KAAK,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC9E,OAAO,oCAAoC,CAAC;YAC1C,QAAQ;YACR,MAAM,EAAE,UAAU;YAClB,qBAAqB;YACrB,yBAAyB,EAAE,KAAK,CAAC,yBAAyB;YAC1D,0BAA0B,EAAE,KAAK,CAAC,0BAA0B;SAC7D,CAAC,CAAC;IACL,CAAC,CAAC;IACF,OAAO,sCAAsC,CAA0B;QACrE,KAAK;QACL,QAAQ,EAAE;YACR,kBAAkB,EAAE,UAAU,CAAC,qBAAqB;YACpD,iBAAiB,EAAE,CAAC,QAAa,EAAE,EAAU,EAAE,EAAE;gBAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAU,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpF,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACnF,CAAC;YACD,2BAA2B,EAAE,UAAU,CAAC,2BAA2B;YACnE,yBAAyB,EAAE,UAAU,CAAC,yBAAyB;YAC/D,6BAA6B,EAAE,UAAU,CAAC,6BAA6B;YACvE,oBAAoB,EAAE,CAAC,KAAU,EAAE,OAAY,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,+BAA+B,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;SAC3T;QACD,SAAS,EAAE;YACT,eAAe,EAAE,CAAC,QAAmB,EAAE,UAAoB,EAAE,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;YAChH,qBAAqB,EAAE,CAAC,QAAmB,EAAE,UAAoB,EAAE,EAAE;gBACnE,MAAM,cAAc,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;gBAC7C,OAAO,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACzD,CAAC;YACD,2BAA2B,EAAE,CAAC,UAAoB,EAAE,MAA2B,EAAE,EAAE;gBACjF,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;gBACpH,IAAI,CAAC,KAAK;oBAAE,OAAO,IAAI,CAAC;gBACxB,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,QAAQ,EAAE,WAAW,KAAK,QAAQ;oBACjE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;oBAC5B,CAAC,CAAC,SAAS,CAAC;gBACd,OAAO;oBACL,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxC,CAAC;YACJ,CAAC;YACD,kBAAkB,EAAE,CAAC,UAAoB,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACzE,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE;oBACvE,CAAC,CAAC,KAAK,CAAC,OAAO;oBACf,CAAC,CAAC,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,IAAI,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;wBAC/C,CAAC,CAAC,KAAK,CAAC,EAAE;wBACV,CAAC,CAAC,IAAI,CAAC;gBACX,IAAI,CAAC,OAAO;oBAAE,OAAO,EAAE,CAAC;gBACxB,MAAM,WAAW,GAAG,OAAO,KAAK,CAAC,QAAQ,EAAE,WAAW,KAAK,QAAQ;oBACjE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW;oBAC5B,CAAC,CAAC,SAAS,CAAC;gBACd,OAAO,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YAChE,CAAC,CAAC;YACF,qBAAqB,EAAE,CAAC,QAAqC,EAAE,MAA2B,EAAE,EAAE;gBAC5F,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW;qBACrC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,0CAA0C,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;qBACnF,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC,CAAC;gBACnD,OAAO;oBACL,QAAQ,EAAE,KAAK,CAAC,yBAAyB,CAAC,QAAQ,CAAC;oBACnD,sBAAsB,EAAE,KAAK,CAAC,MAAM,CAClC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,EACnF,CAAC,CACF;oBACD,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC9B,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BACvC,IAAI,EAAE,KAAK,CAAC,MAAM;4BAClB,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,MAAM,EAAE,KAAK,CAAC,UAAU;4BACxB,eAAe,EAAE,KAAK,CAAC,eAAe;4BACtC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;yBACzC,CAAC,CAAC;wBACH,GAAG,IAAI,CAAC,MAAM;6BACX,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,yBAAyB,CAAC;6BAC3D,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;4BACb,IAAI,EAAE,KAAK,CAAC,MAAM;4BAClB,YAAY,EAAE,IAAI,CAAC,YAAY;4BAC/B,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;4BACjD,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC7E,CAAC,CAAC;qBACN,CAAC;iBACH,CAAC;YACJ,CAAC;YACD,SAAS,EAAE,KAAK,CAAC,eAAe,CAAC,SAAS;SAC3C;QACD,mBAAmB,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,CAAC,uCAAuC,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1G,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC,YAAY;QAChD,YAAY,EAAE,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE;QACtE,WAAW,EAAE;YACX,wBAAwB,EAAE,MAAM,EAAE,aAAa,IAAI,mCAAmC;YACtF,6BAA6B,EAAE,MAAM,EAAE,kBAAkB,IAAI,wCAAwC;YACrG,uBAAuB,EAAE,MAAM,EAAE,YAAY,IAAI,kCAAkC;YACnF,6BAA6B,EAAE,MAAM,EAAE,kBAAkB,IAAI,KAAK,CAAC,6BAA6B;YAChG,+BAA+B,EAAE,MAAM,EAAE,oBAAoB,IAAI,0CAA0C;YAC3G,8BAA8B,EAAE,MAAM,EAAE,mBAAmB,IAAI,gDAAgD;SAChH;QACD,gBAAgB,EAAE;YAChB,UAAU,EAAE,KAAK,CAAC,mBAAmB,IAAI,EAAE;SAC5C;QACD,YAAY,EAAE;YACZ,wBAAwB,EAAE,UAAU,CAAC,2BAA2B;YAChE,kBAAkB,EAAE,CAAC,QAAa,EAAE,EAAE,CAAC,wCAAwC,CAAC,QAAQ,EAAE,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,UAAU,EAAE,WAAW,EAAE,uBAAuB,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE,eAAe,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;SACpQ;QACD,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,UAAU;QACrC,OAAO,EAAE;YACP,gBAAgB,EAAE,KAAK,CAAC,aAAa,CAAC,MAAM,KAAK,KAAK,CAAC,aAAa;YACpE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC,EAAE;YAC1D,kBAAkB,EAAE,EAAE,mBAAmB,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,EAAE;YAClQ,YAAY,EAAE;gBACZ,iBAAiB,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,CAAC,gCAAgC,CAAC,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC;gBACrG,mBAAmB,EAAE,gCAAgC;gBACrD,kBAAkB,EAAE,UAAU,CAAC,2BAA2B;gBAC1D,yBAAyB,EAAE,CAAC,OAAgB,EAAE,EAAE,CAAC,UAAU,CAAC,+BAA+B,CAAC,MAAM,EAAE,OAAO,CAAC;gBAC5G,cAAc,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO;gBAChD,kBAAkB,EAAE,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,oCAAoC,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;aACrX;YACD,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,UAAU,EAAE,UAAU,CAAC,gBAAgB;YACvC,SAAS,EAAE,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,wCAAwC,EAAE,uBAAuB,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;YAC/I,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,EAAE,yBAAyB,EAAE,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,yBAAyB,EAAE,KAAK,CAAC,eAAe,CAAC,yBAAyB,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAO,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;SACxU;KACF,CAAC,CAAC;AACL,CAAC;AAmDD,MAAM,UAAU,0CAA0C,CAKxD,KAA2E;IAE3E,MAAM,eAAe,GAAqE;QACxF,GAAG,KAAK,CAAC,QAAQ;KAClB,CAAC;IAEF,OAAO;QACL,eAAe;QACf,YAAY,EAAE;YACZ,iBAAiB,EAAE,KAAK,CAAC,SAAS;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;YACxC,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B;KACF,CAAC;AACJ,CAAC;AAqCD,SAAS,4CAA4C,CACnD,QAA6B,EAC7B,KAA4B;IAE5B,IAAI,CAAC;QACH,yCAAyC,CAAC,QAAQ,CAAC,CAAC;QACpD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;YAC/C,CAAC,CAAC,KAA8D;YAChE,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,MAAM,IAAI,GAAG,qCAAqC,CAAC,QAAQ,EAAE,IAAI,CAAC;eAC7D,CAAC,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ;gBAClC,CAAC,CAAC,YAAY,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;gBAC/C,CAAC,CAAC,2BAA2B,CAAC,CAAC;QACnC,OAAO,CAAC;gBACN,IAAI;gBACJ,QAAQ,EAAE,OAAO;gBACjB,KAAK;gBACL,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,qBAAqB;gBAC/B,OAAO,EAAE,OAAO,MAAM,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7E,UAAU,EAAE,IAAI;oBACd,CAAC,CAAC,gBAAgB,IAAI,mBAAmB;oBACzC,CAAC,CAAC,kCAAkC;gBACtC,OAAO,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE;gBAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;oBACT,OAAO,EAAE,EAAE,IAAI,EAAE;iBAClB,CAAC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,SAAS,qCAAqC,CAC5C,QAA6B,EAC7B,IAAwB;IAExB,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,MAAM,UAAU,GAAG,2BAA2B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1D,IAAI,UAAU,IAAI,qBAAqB,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChF,OAAO,6BAA6B,CAAC;IACvC,CAAC;IACD,MAAM,WAAW,GAAG,uCAAuC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvE,IAAI,WAAW,IAAI,qBAAqB,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7F,OAAO,mCAAmC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAmC,EAAE,KAAa;IAC/E,MAAM,EAAE,GAAG,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC3E,OAAO,CAAC,CAAC,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,CAAC;AAmCD,MAAM,UAAU,sCAAsC,CAOpD,KAA8F;IAE9F,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,MAAM,gBAAgB,GAAG,GAAa,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,EAAE,IAAK,EAAe,CAAC;IAC3F,MAAM,uBAAuB,GAAG,KAAK,CAAC,SAAS,EAAE,gBAAgB,CAAC;IAClE,MAAM,6BAA6B,GAAsE;QACvG,GAAG,KAAK,CAAC,SAAS;QAClB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC;YACvC,GAAG,4CAA4C,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC;YACxE,GAAG,CAAC,uBAAuB,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;SACxD;KACF,CAAC;IACF,MAAM,gBAAgB,GAAG,0CAA0C,CAA4B;QAC7F,QAAQ,EAAE;YACR,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB;YAC1C,0BAA0B,EAAE,iCAAiC;YAC7D,kBAAkB,EAAE,KAAK,CAAC,QAAQ,CAAC,kBAAkB;YACrD,iBAAiB,EAAE,KAAK,CAAC,QAAQ,CAAC,iBAAiB;YACnD,2BAA2B,EAAE,KAAK,CAAC,QAAQ,CAAC,2BAA2B;YACvE,yBAAyB,EAAE,KAAK,CAAC,QAAQ,CAAC,yBAAyB;YACnE,6BAA6B,EAAE,KAAK,CAAC,QAAQ,CAAC,6BAA6B;YAC3E,oBAAoB,EAAE,KAAK,CAAC,QAAQ,CAAC,oBAAoB;YACzD,6BAA6B,EAAE,KAAK,CAAC,4BAA4B;YACjE,wBAAwB,EAAE,KAAK,CAAC,wBAAwB;SACzD;QACD,SAAS,EAAE,6BAA6B;QACxC,SAAS,EAAE;YACT,YAAY,EAAE,KAAK,CAAC,uBAAuB;YAC3C,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;SACtB;QACD,SAAS,EAAE;YACT,kBAAkB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YAC5G,uBAAuB,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,uBAAuB,CACzF,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,gBAAgB,EAAE,CACnB;YACD,2BAA2B,EAAE,KAAK,CAAC,2BAA2B;SAC/D;QACD,YAAY,EAAE;YACZ,oBAAoB,EAAE,KAAK,CAAC,uBAAuB;SACpD;QACD,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,WAAW,EAAE;YACX,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;YAChD,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;YACpD,+BAA+B,EAAE,KAAK,CAAC,+BAA+B;YACtE,4BAA4B,EAAE,KAAK,CAAC,4BAA4B;YAChE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB;SACrD;QACD,YAAY,EAAE;YACZ,GAAG,KAAK,CAAC,YAAY;YACrB,sBAAsB,EAAE,KAAK,CAAC,YAAY,EAAE,sBAAsB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;gBACjF,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG;oBAAE,OAAO,IAAI,CAAC;gBAChD,OAAO,KAAK,CAAC,sBAAsB,CAAC;oBAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,GAAG,EAAE,OAAO,CAAC,GAAU;iBACxB,CAAkD,CAAC;YACtD,CAAC,CAAC;YACF,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,aAAa,IAAI,8BAA8B;SACnF;QACD,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,iBAAiB,EAAE;YACjB,qCAAqC,CAAC,OAAO;gBAC3C,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;uBACvC,OAAO,CAAC,IAAI,KAAK,2CAA2C;uBAC5D,KAAK,CAAC,qCAAqC,CAAC,OAAO,CAAC,CAAC;YAC5D,CAAC;YACD,kCAAkC,CAAC,OAAO;gBACxC,MAAM,UAAU,GAAG,KAAK,CAAC,kCAAkC,CAAC,OAAO,CAAC,CAAC;gBACrE,IAAI,UAAU;oBAAE,OAAO,UAAU,CAAC;gBAClC,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,4BAA4B,CAAC;oBACzE,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,QAAQ;oBACR,IAAI,EAAE,OAAO,CAAC,IAAI;oBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;iBACrB,CAAC,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACjB,OAAO,8CAA8C,CAAC,OAAO,CAAgE,CAAC;YAChI,CAAC;YACD,+BAA+B,EAAE,OAAO,CAAC,EAAE,CAAC,oCAAoC,CAC9E,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,SAAS,CAClB;YACD,oBAAoB,EAAE,OAAO,CAAC,EAAE,CAAC,+BAA+B,CAAC,OAAc,CAAQ;YACvF,yBAAyB,EAAE,OAAO,CAAC,EAAE,CAAC,oCAAoC,CAAC,OAAc,CAAQ;YACjG,6BAA6B,EAAE,KAAK,CAAC,6BAA6B;SACnE;QACD,UAAU,EAAE;YACV,sBAAsB,EAAE,KAAK,CAAC,gBAAgB;YAC9C,sBAAsB,EAAE,KAAK,CAAC,qBAAqB;YACnD,gCAAgC,EAAE,KAAK,CAAC,sBAAsB;YAC9D,2BAA2B,EAAE,KAAK,CAAC,iBAAiB;YACpD,gCAAgC,EAAE,KAAK,CAAC,sBAAsB;YAC9D,oCAAoC,EAAE,KAAK,CAAC,0BAA0B;YACtE,2BAA2B,EAAE,KAAK,CAAC,wBAAwB;YAC3D,yBAAyB,EAAE,KAAK,CAAC,mBAAmB;YACpD,yBAAyB,EAAE,KAAK,CAAC,wBAAwB;YACzD,mCAAmC,EAAE,KAAK,CAAC,yBAAyB;SACrE;QACD,gBAAgB,EAAE,KAAK,CAAC,gBAAgB;QACxC,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC,CAAC;IACH,OAAO;QACL,GAAG,gBAAgB;QACnB,iBAAiB,CAAC,OAAO;YACvB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;YACtG,CAAC;YACD,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE,GAAG,OAAO,CAAC;YACrD,OAAO;gBACL,GAAG,kBAAkB;gBACrB,GAAG,gBAAgB;gBACnB,kBAAkB,EAAE;oBAClB,GAAG,OAAO,CAAC,kBAAkB;iBAC9B;gBACD,YAAY,EAAE;oBACZ,GAAG,OAAO,CAAC,YAAY;iBACxB;gBACD,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;oBACd,SAAS,EAAE;wBACT,GAAG,SAAS;wBACZ,eAAe,EAAE,OAAO,CAAC,yBAAyB;wBAClD,yBAAyB,EAAE,SAAS,CAAC,yBAAyB;4BAC5D,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,yBAAyB,EAAE,CACpD,aAAa,EACb,OAAO,CAAC,mCAAmC,CAC5C;4BACH,CAAC,CAAC,SAAS;wBACb,cAAc,EAAE,SAAS,CAAC,cAAc;4BACtC,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gCACd,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC;gCAC3C,IAAI,CAAC,OAAO;oCAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gCACzD,OAAO,SAAS,CAAC,cAAe,CAAC,EAAE,GAAG,WAAW,EAAE,OAAO,EAAE,CAAC,CAAC;4BAChE,CAAC;4BACH,CAAC,CAAC,SAAS;qBACd;iBACF,CAAC,CAAC,CAAC,EAAE,CAAC;aACR,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CACxC,OAA2C;IAE3C,IAAI,OAAO,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAC;IACrD,MAAM,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IACxC,IAAI,MAAM,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;eACvC,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAA8D,CAAC;IACrF,IAAI,KAAK,EAAE,IAAI,KAAK,uBAAuB,IAAI,KAAK,EAAE,IAAI,KAAK,6BAA6B;QAAE,OAAO,KAAK,CAAC;IAC3G,IAAI,KAAK,EAAE,IAAI,KAAK,mBAAmB;WAClC,KAAK,EAAE,IAAI,KAAK,yBAAyB;WACzC,KAAK,EAAE,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAC3C,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,8BAA8B,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,CACrC,KAAK,CAAC,IAAI,KAAK,6CAA6C;WACzD,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC;WAC9C,KAAK,CAAC,IAAI,KAAK,gDAAgD,CACnE;QAAE,OAAO,KAAK,CAAC;IAChB,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC;QAAE,OAAO,IAAI,CAAC;IACjG,IAAI,KAAK,EAAE,IAAI,KAAK,oBAAoB;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,CACrC,KAAK,CAAC,IAAI,KAAK,+BAA+B;WAC3C,KAAK,CAAC,IAAI,KAAK,iCAAiC;WAChD,KAAK,CAAC,IAAI,KAAK,oBAAoB;WACnC,KAAK,CAAC,IAAI,KAAK,0BAA0B;WACzC,KAAK,CAAC,IAAI,KAAK,8BAA8B;WAC7C,KAAK,CAAC,IAAI,KAAK,4BAA4B;WAC3C,KAAK,CAAC,IAAI,KAAK,sBAAsB;WACrC,KAAK,CAAC,IAAI,KAAK,4BAA4B;WAC3C,KAAK,CAAC,IAAI,KAAK,6BAA6B,CAChD;QAAE,OAAO,IAAI,CAAC;IACf,IAAI,MAAM,EAAE,IAAI,KAAK,aAAa,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/F,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CAAC,IAAY;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,OAAO,UAAU,KAAK,MAAM;WACvB,UAAU,KAAK,OAAO;WACtB,UAAU,KAAK,UAAU;WACzB,UAAU,KAAK,QAAQ;WACvB,UAAU,KAAK,SAAS;WACxB,UAAU,KAAK,QAAQ;WACvB,UAAU,KAAK,MAAM;WACrB,UAAU,KAAK,eAAe,CAAC;AACtC,CAAC;AAED,SAAS,8BAA8B,CACrC,cAAyB,EACzB,aAAwB;IAExB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7F,OAAO,aAAa,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;AACvG,CAAC","sourcesContent":["import type {\n PlayableLocalEditorAssetActionsCapability,\n PlayableLocalEditorAssetBrowserCapability,\n PlayableLocalEditorDocumentCapability,\n PlayableLocalEditorDocumentLifecycleCapability,\n PlayableLocalEditorHierarchyActionsCapability,\n PlayableLocalEditorHostCapabilities,\n PlayableLocalEditorInspectorCapability,\n PlayableLocalEditorMarkerGraphCapability,\n PlayableLocalEditorPatchResult,\n PlayableLocalEditorPrefabStageCapability,\n PlayableLocalEditorRenderingCapability,\n PlayableLocalEditorSceneGraphCapability,\n PlayableLocalEditorSelectionCapability,\n PlayableLocalEditorTransformCommandsCapability,\n PlayableLocalEditorWorldPreviewCapability,\n PlayableLocalEditorHarnessApi,\n} from './playable-local-editor-host.js';\nimport type {\n FpsGameEditorProductLocalEditorContext,\n FpsGameEditorProductLocalEditorHostOptions,\n} from './playable-product-local-editor.js';\nimport type { DocumentCommand } from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH,\n assertPlayableEditorSceneDocumentContract,\n createEditorSceneSerializedMultiTransformPatch,\n createEditorSceneTransformBatchPatch,\n createEditorSceneTransformPatch,\n getEditorScenePrefabStageDescriptor,\n getEditorScenePrefabStageProjectionNodeIdForNode,\n getEditorScenePrefabStageProjectionNodes,\n getEditorScenePrefabStageStructure,\n resolveEditorSceneLightingPreviewProfile,\n resolveEditorSceneMaterialSlotReimportDiff,\n resolveEditorScenePrefabStagePreviewTarget,\n toEditorSceneLocalTransformFromWorld,\n type EditorSceneAssetLibraryItem,\n type EditorSceneDocument,\n type EditorSceneGameObject,\n type EditorSceneMaterialDocument,\n type FpsGameEditorStandardSceneAssembly,\n} from '@fps-games/editor-playable-sdk';\nimport type { EditorDiagnostic, EditorDiagnosticPhase } from '@fps-games/editor-protocol';\nimport { createBabylonEditorPreviewEngine } from './internal/babylon-preview-engine.js';\n\nexport interface FpsGameEditorPlayableProjectHostAssemblyOptions<TDocument, TAsset> {\n scene: any;\n projection: any;\n sceneSource: any;\n rendering: any;\n projectServices: any;\n /** Overrides for projects whose prefab document semantics differ from the standard scene contract. */\n prefab?: Partial<{\n getDescriptor: typeof getEditorScenePrefabStageDescriptor;\n getProjectionNodes: typeof getEditorScenePrefabStageProjectionNodes;\n getStructure: typeof getEditorScenePrefabStageStructure;\n getInspectorObject: FpsGameEditorStandardSceneAssembly<any, any, any, any, any>['getPrefabStageInspectorObject'];\n resolvePreviewTarget: typeof resolveEditorScenePrefabStagePreviewTarget;\n getProjectionNodeId: typeof getEditorScenePrefabStageProjectionNodeIdForNode;\n }>;\n prepareDocument?(document: TDocument, assets: TAsset[]): TDocument;\n createAssetActionPatch(input: any): any;\n hierarchyOperations?: NonNullable<PlayableLocalEditorHierarchyActionsCapability<TDocument, any>['operations']>;\n loadingContent?: any;\n runtimeWindow: Window;\n gameModeEntryVisible?: boolean;\n loadBabylon(): Promise<any>;\n world?: { cameraTarget?: { x: number; y: number; z: number }; cameraRadius?: number; clearColor?: { r: number; g: number; b: number; a: number }; useRightHandedSystem?: boolean; selectionEdgesPrewarm?: 'eager' | 'lazy' };\n reportError?(error: unknown): void;\n}\n\ninterface FpsGameEditorStandardDocumentPreparation<TDocument, TAsset> {\n document: TDocument;\n assets: TAsset[];\n hydrateDocumentAssets(document: TDocument, assets: TAsset[]): TDocument;\n ensureEnvironmentDefaults(document: TDocument): TDocument;\n normalizeHierarchyDocument(document: TDocument): TDocument;\n}\n\nexport function prepareFpsGameEditorStandardDocument<TDocument, TAsset>(\n input: FpsGameEditorStandardDocumentPreparation<TDocument, TAsset>,\n): TDocument {\n return input.normalizeHierarchyDocument(\n input.ensureEnvironmentDefaults(input.hydrateDocumentAssets(input.document, input.assets)),\n );\n}\n\nconst DEFAULT_PLAYABLE_PROJECT_LOADING_CONTENT = Object.freeze({\n enter: Object.freeze({ title: '正在进入编辑界面…', description: '正在加载场景数据和编辑器,请稍候' }),\n saveScene: Object.freeze({ title: '正在保存场景…', description: '正在写入场景数据,请稍候' }),\n saveAndRunGame: Object.freeze({ title: '正在保存并退出…', description: '正在写入场景并返回游戏,请稍候' }),\n discardAndRunGame: Object.freeze({ title: '正在放弃变更并退出…', description: '正在恢复游戏场景,请稍候' }),\n assetImport: Object.freeze({ title: '正在添加资源…', description: '正在检查资产库并实例化资源,请稍候' }),\n});\n\nexport function createFpsGameEditorPlayableProjectHostAssembly<TDocument, TAsset extends EditorSceneAssetLibraryItem>(\n input: FpsGameEditorPlayableProjectHostAssemblyOptions<TDocument, TAsset>,\n) {\n let assets: TAsset[] = [];\n const scene = input.scene;\n const projection = input.projection;\n const prefab = input.prefab;\n const setAssets = (nextAssets: TAsset[]): TAsset[] => {\n assets = nextAssets;\n input.rendering.setTextures(projection.createEditorSceneInspectorTextureAssets(assets));\n return assets;\n };\n const hydrateDocumentAssets = (document: TDocument, nextAssets: TAsset[]): TDocument => (\n input.projectServices.hydrateDocumentAssets?.(document, nextAssets) ?? document\n );\n const prepareDocument = (document: TDocument, nextAssets: TAsset[]): TDocument => {\n if (input.prepareDocument) return input.prepareDocument(document, nextAssets);\n return prepareFpsGameEditorStandardDocument({\n document,\n assets: nextAssets,\n hydrateDocumentAssets,\n ensureEnvironmentDefaults: scene.ensureEnvironmentDefaults,\n normalizeHierarchyDocument: scene.normalizeHierarchyDocument,\n });\n };\n return createFpsGameEditorProductHostAssembly<any, any, any, any, any>({\n scene,\n document: {\n getProjectionNodes: projection.createProjectionNodes,\n getProjectionNode: (document: any, id: string) => {\n const gameObject = document.scene.gameObjects.find((entry: any) => entry.id === id);\n return gameObject ? projection.createProjectionNode(document, gameObject) : null;\n },\n getProjectionNodesForTarget: projection.getProjectionNodesForTarget,\n resolveProjectionTargetId: projection.resolveProjectionTargetId,\n getProjectionSelectionNodeIds: projection.getProjectionSelectionNodeIds,\n createPatchFromAsset: (asset: any, request: any) => ({ label: `Add ${request?.name?.trim() || asset.displayName}`, patch: { kind: 'game-object.create-from-asset', assetItem: asset, ...(request?.name?.trim() ? { name: request.name.trim() } : {}), ...(request?.placement ? { placement: request.placement } : {}) } }),\n },\n lifecycle: {\n prepareDocument: (document: TDocument, nextAssets: TAsset[]) => prepareDocument(document, setAssets(nextAssets)),\n hydrateDocumentAssets: (document: TDocument, nextAssets: TAsset[]) => {\n const hydratedAssets = setAssets(nextAssets);\n return hydrateDocumentAssets(document, hydratedAssets);\n },\n resolveUpdatedAssetSnapshot: (nextAssets: TAsset[], update: { assetId: string }) => {\n const asset = nextAssets.find(candidate => candidate.assetId === update.assetId || candidate.id === update.assetId);\n if (!asset) return null;\n const contentHash = typeof asset.metadata?.contentHash === 'string'\n ? asset.metadata.contentHash\n : undefined;\n return {\n assetId: asset.assetId,\n ...(contentHash ? { contentHash } : {}),\n };\n },\n listAssetSnapshots: (nextAssets: TAsset[]) => nextAssets.flatMap((asset) => {\n const assetId = typeof asset.assetId === 'string' && asset.assetId.trim()\n ? asset.assetId\n : typeof asset.id === 'string' && asset.id.trim()\n ? asset.id\n : null;\n if (!assetId) return [];\n const contentHash = typeof asset.metadata?.contentHash === 'string'\n ? asset.metadata.contentHash\n : undefined;\n return [{ assetId, ...(contentHash ? { contentHash } : {}) }];\n }),\n reconcileUpdatedAsset: (document: EditorSceneMaterialDocument, update: { assetId: string }) => {\n const diffs = document.scene.gameObjects\n .map(gameObject => resolveEditorSceneMaterialSlotReimportDiff(document, gameObject))\n .filter(diff => diff.assetId === update.assetId);\n return {\n document: scene.ensureEnvironmentDefaults(document),\n reconciledBindingCount: diffs.reduce(\n (count, diff) => count + diff.bindingRemaps.length + diff.bindingRemapIssues.length,\n 0,\n ),\n warnings: diffs.flatMap(diff => [\n ...diff.bindingRemapIssues.map(issue => ({\n code: issue.reason,\n gameObjectId: diff.gameObjectId,\n slotId: issue.fromSlotId,\n materialAssetId: issue.materialAssetId,\n candidateSlotIds: issue.candidateSlotIds,\n })),\n ...diff.issues\n .filter(issue => issue.reason === 'source-material-changed')\n .map(issue => ({\n code: issue.reason,\n gameObjectId: diff.gameObjectId,\n ...(issue.slotId ? { slotId: issue.slotId } : {}),\n ...(issue.materialAssetId ? { materialAssetId: issue.materialAssetId } : {}),\n })),\n ]),\n };\n },\n summarize: input.projectServices.summarize,\n },\n getInspectorContext: () => ({ textureAssets: projection.createEditorSceneInspectorTextureAssets(assets) }),\n agentContext: input.projectServices.agentContext,\n assetActions: { createAssetActionPatch: input.createAssetActionPatch },\n prefabStage: {\n getPrefabStageDescriptor: prefab?.getDescriptor ?? getEditorScenePrefabStageDescriptor,\n getPrefabStageProjectionNodes: prefab?.getProjectionNodes ?? getEditorScenePrefabStageProjectionNodes,\n getPrefabStageStructure: prefab?.getStructure ?? getEditorScenePrefabStageStructure,\n getPrefabStageInspectorObject: prefab?.getInspectorObject ?? scene.getPrefabStageInspectorObject,\n resolvePrefabStagePreviewTarget: prefab?.resolvePreviewTarget ?? resolveEditorScenePrefabStagePreviewTarget,\n getPrefabStageProjectionNodeId: prefab?.getProjectionNodeId ?? getEditorScenePrefabStageProjectionNodeIdForNode,\n },\n hierarchyActions: {\n operations: input.hierarchyOperations ?? [],\n },\n worldPreview: {\n getSceneCameraPreviewRig: projection.createSceneCameraPreviewRig,\n getWorldAppearance: (document: any) => resolveEditorSceneLightingPreviewProfile(document, { environmentLightId: 'environment_light', sunLightId: 'sun_light', defaultEnvironmentLight: scene.defaults.environmentLight, defaultSunLight: scene.defaults.sunLight }),\n },\n rendering: input.rendering.capability,\n runtime: {\n localTestActions: input.runtimeWindow.parent === input.runtimeWindow,\n gameModeEntryVisible: input.gameModeEntryVisible,\n authoring: { drivers: [input.sceneSource.createDriver()] },\n persistenceAdapter: { loadAuthoringSource: async () => { const loaded = await input.sceneSource.load(); return { source: loaded.source, document: loaded.document, assets: loaded.assets, summary: loaded.summary }; }, loadAssets: input.sceneSource.loadAssets },\n worldAdapter: {\n loadPreviewEngine: async () => projection.createEditorPreviewBabylonModule(await input.loadBabylon()),\n createPreviewEngine: createBabylonEditorPreviewEngine,\n importPreviewAsset: projection.importEditorProjectionModel,\n resolveMaterialTextureUrl: (texture: unknown) => projection.resolveEditorSceneTextureRefUrl(assets, texture),\n resolveAssetId: (asset: TAsset) => asset.assetId,\n toBrowserAssetItem: (asset: any) => ({ id: asset.assetId, guid: asset.guid, assetId: asset.assetId, kind: asset.kind, label: asset.displayName, meta: asset.assetId, external: asset.external, origin: asset.origin, dedupeKey: asset.dedupeKey, placeable: asset.placeable, preview: projection.createEditorSceneLibraryAssetPreview(asset), disabled: asset.placeable === false }),\n },\n world: input.world,\n createGrid: projection.createEditorGrid,\n lifecycle: { loadingContent: input.loadingContent ?? DEFAULT_PLAYABLE_PROJECT_LOADING_CONTENT, beforeDiscardAndRunGame: input.rendering.reset },\n forgePlay: { window: input.runtimeWindow, hasUnsavedPlatformChanges: input.rendering.isDirty, handleProjectAssetCommand: input.projectServices.handleProjectAssetCommand, exportDocument: ({ harness, payload, saveState }: any) => input.projectServices.exportDocument(harness, payload, saveState), reportError: input.reportError },\n },\n });\n}\n\nexport interface FpsGameEditorProductSceneDocumentAdapter<\n TDocument,\n TPatch,\n TAsset = unknown,\n> extends Pick<\n PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>,\n | 'reduceDocument'\n | 'getHierarchyItems'\n | 'isHierarchyStructureChange'\n | 'getProjectionNodes'\n | 'getProjectionNode'\n | 'getProjectionNodesForTarget'\n | 'resolveProjectionTargetId'\n | 'getProjectionSelectionNodeIds'\n | 'createPatchFromAsset'\n | 'createSerializedPropertyPatch'\n | 'resolveDiagnosticLocator'\n > {}\n\nexport interface FpsGameEditorProductSceneHostOptions<\n TDocument,\n TPatch,\n TAsset = unknown,\n> {\n documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>;\n capabilities: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>;\n}\n\nexport interface FpsGameEditorProductSceneHostOptionsInput<\n TDocument,\n TPatch,\n TAsset = unknown,\n> {\n document: FpsGameEditorProductSceneDocumentAdapter<TDocument, TPatch, TAsset>;\n lifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n selection?: PlayableLocalEditorSelectionCapability<TDocument>;\n inspector?: PlayableLocalEditorInspectorCapability<TDocument>;\n assetBrowser?: PlayableLocalEditorAssetBrowserCapability<TDocument>;\n agentContext?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>['agentContext'];\n markerGraph?: PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch>;\n assetActions?: PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n transformCommands?: PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch>;\n sceneGraph?: PlayableLocalEditorSceneGraphCapability<TDocument, TPatch>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n}\n\nexport function createFpsGameEditorProductSceneHostOptions<\n TDocument,\n TPatch,\n TAsset = unknown,\n>(\n input: FpsGameEditorProductSceneHostOptionsInput<TDocument, TPatch, TAsset>,\n): FpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset> {\n const documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset> = {\n ...input.document,\n };\n\n return {\n documentAdapter,\n capabilities: {\n documentLifecycle: input.lifecycle,\n selection: input.selection,\n inspector: input.inspector,\n assetBrowser: input.assetBrowser,\n agentContext: input.agentContext,\n markerGraph: input.markerGraph,\n assetActions: input.assetActions,\n prefabStage: input.prefabStage,\n transformCommands: input.transformCommands,\n sceneGraph: input.sceneGraph,\n hierarchyActions: input.hierarchyActions,\n worldPreview: input.worldPreview,\n rendering: input.rendering,\n },\n };\n}\n\nexport interface FpsGameEditorProductHostAssemblyInput<\n TDocument extends EditorSceneDocument<TGameObject>,\n TGameObject extends EditorSceneGameObject,\n TPatch,\n TAsset extends EditorSceneAssetLibraryItem,\n TContext,\n> {\n scene: FpsGameEditorStandardSceneAssembly<TDocument, TGameObject, TPatch, TAsset, TContext>;\n document: Pick<\n FpsGameEditorProductSceneDocumentAdapter<TDocument, TPatch, TAsset>,\n | 'getProjectionNodes'\n | 'getProjectionNode'\n | 'getProjectionNodesForTarget'\n | 'resolveProjectionTargetId'\n | 'getProjectionSelectionNodeIds'\n | 'createPatchFromAsset'\n >;\n lifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n getInspectorContext?: () => TContext;\n agentContext?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>['agentContext'];\n assetActions?: Pick<\n PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>,\n 'createAssetActionPatch' | 'createPlacedAssetPatch' | 'findCreatedId'\n >;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n runtime?: FpsGameEditorProductHostRuntimeOptions<TDocument, TPatch, TAsset>;\n}\n\ntype FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset> = NonNullable<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['forgePlay']\n>;\n\nfunction collectProductEditorSceneDocumentDiagnostics(\n document: EditorSceneDocument,\n phase: EditorDiagnosticPhase,\n): EditorDiagnostic[] {\n try {\n assertPlayableEditorSceneDocumentContract(document);\n return [];\n } catch (error) {\n const record = error && typeof error === 'object'\n ? error as { code?: unknown; path?: unknown; message?: unknown }\n : null;\n const path = typeof record?.path === 'string' ? record.path : undefined;\n const code = classifyProductDocumentValidationCode(document, path)\n ?? (typeof record?.code === 'string'\n ? `document-${record.code.replace(/\\./g, '-')}`\n : 'document-contract-invalid');\n return [{\n code,\n severity: 'error',\n phase,\n source: 'document',\n producer: 'document-validation',\n message: typeof record?.message === 'string' ? record.message : String(error),\n suggestion: path\n ? `检查诊断详情中的文档路径 ${path},修复无效或重复的数据后重新验证。`\n : '检查当前 Scene Document 的结构完整性后重新验证。',\n subject: { kind: 'document' },\n ...(path ? {\n details: { path },\n } : {}),\n }];\n }\n}\n\nfunction classifyProductDocumentValidationCode(\n document: EditorSceneDocument,\n path: string | undefined,\n): string | null {\n if (!path) return null;\n const assetMatch = /^\\$\\.assets\\[(\\d+)\\]\\.id$/.exec(path);\n if (assetMatch && hasDuplicateIdAtIndex(document.assets, Number(assetMatch[1]))) {\n return 'document-asset-id-duplicate';\n }\n const objectMatch = /^\\$\\.scene\\.gameObjects\\[(\\d+)\\]\\.id$/.exec(path);\n if (objectMatch && hasDuplicateIdAtIndex(document.scene.gameObjects, Number(objectMatch[1]))) {\n return 'document-game-object-id-duplicate';\n }\n return null;\n}\n\nfunction hasDuplicateIdAtIndex(values: readonly { id?: unknown }[], index: number): boolean {\n const id = typeof values[index]?.id === 'string' ? values[index].id : null;\n return !!id && values.filter(value => value.id === id).length > 1;\n}\n\nexport interface FpsGameEditorProductHostRuntimeOptions<TDocument, TPatch, TAsset> extends Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n 'documentAdapter' | 'capabilities' | 'persistenceAdapter' | 'worldAdapter' | 'forgePlay'\n> {\n persistenceAdapter: Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['persistenceAdapter'],\n 'runGame'\n >;\n worldAdapter: Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['worldAdapter'],\n 'disposeWorld' | 'disposeGameWorld' | 'getCanvas'\n >;\n forgePlay?: Omit<\n FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>,\n 'handleAssetDrop' | 'handleProjectAssetCommand' | 'exportDocument'\n > & {\n handleProjectAssetCommand?: (\n bridgeContext: Parameters<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['handleProjectAssetCommand']>>[0],\n normalizeLoadedPlatformAssetPayload: (payload: Record<string, unknown>) => Record<string, unknown>,\n ) => Promise<void> | void;\n exportDocument?: (input: Parameters<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['exportDocument']>>[0] & {\n harness: PlayableLocalEditorHarnessApi<TDocument>;\n }) => ReturnType<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['exportDocument']>>;\n };\n}\n\nexport interface FpsGameEditorProductHostAssembly<TDocument, TPatch, TAsset>\n extends FpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset> {\n createHostOptions(\n context: FpsGameEditorProductLocalEditorContext<TDocument>,\n ): FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>;\n}\n\nexport function createFpsGameEditorProductHostAssembly<\n TDocument extends EditorSceneDocument<TGameObject>,\n TGameObject extends EditorSceneGameObject,\n TPatch,\n TAsset extends EditorSceneAssetLibraryItem,\n TContext,\n>(\n input: FpsGameEditorProductHostAssemblyInput<TDocument, TGameObject, TPatch, TAsset, TContext>,\n): FpsGameEditorProductHostAssembly<TDocument, TPatch, TAsset> {\n const scene = input.scene;\n const inspectorContext = (): TContext => input.getInspectorContext?.() ?? ({} as TContext);\n const projectValidateDocument = input.lifecycle?.validateDocument;\n const documentLifecycleCapabilities: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset> = {\n ...input.lifecycle,\n validateDocument: (document, context) => [\n ...collectProductEditorSceneDocumentDiagnostics(document, context.phase),\n ...(projectValidateDocument?.(document, context) ?? []),\n ],\n };\n const sceneHostOptions = createFpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset>({\n document: {\n reduceDocument: scene.reduceDocument,\n getHierarchyItems: scene.getHierarchyItems,\n isHierarchyStructureChange: isProductHierarchyStructureChange,\n getProjectionNodes: input.document.getProjectionNodes,\n getProjectionNode: input.document.getProjectionNode,\n getProjectionNodesForTarget: input.document.getProjectionNodesForTarget,\n resolveProjectionTargetId: input.document.resolveProjectionTargetId,\n getProjectionSelectionNodeIds: input.document.getProjectionSelectionNodeIds,\n createPatchFromAsset: input.document.createPatchFromAsset,\n createSerializedPropertyPatch: scene.createInspectorPropertyPatch,\n resolveDiagnosticLocator: scene.resolveDiagnosticLocator,\n },\n lifecycle: documentLifecycleCapabilities,\n selection: {\n isSelectable: scene.isSelectableHierarchyId,\n isLocked: () => false,\n },\n inspector: {\n getInspectorObject: (document, activeId) => scene.getInspectorObject(document, activeId, inspectorContext()),\n getInspectorMultiObject: (document, selectedIds, activeId) => scene.getInspectorMultiObject(\n document,\n selectedIds,\n activeId,\n inspectorContext(),\n ),\n getRuntimeInspectorSections: scene.getRuntimeInspectorSections,\n },\n assetBrowser: {\n getBrowserAssetItems: scene.createBrowserAssetItems,\n },\n agentContext: input.agentContext,\n markerGraph: {\n getMarkerGraph: scene.getMarkerGraph,\n getMarkerTypeCatalog: scene.getMarkerTypeCatalog,\n getRelationTypeCatalog: scene.getRelationTypeCatalog,\n getPrefabInstanceMarkerOverlays: scene.getPrefabInstanceMarkerOverlays,\n getPrefabStageMarkerOverlays: scene.getPrefabStageMarkerOverlays,\n createMarkerGraphPatch: scene.createMarkerGraphPatch,\n },\n assetActions: {\n ...input.assetActions,\n createPlacedAssetPatch: input.assetActions?.createPlacedAssetPatch ?? ((command) => {\n if (!command.asset || !command.hit) return null;\n return scene.createPlacedAssetPatch({\n document: command.document,\n asset: command.asset,\n hit: command.hit as any,\n }) as PlayableLocalEditorPatchResult<TPatch> | null;\n }),\n findCreatedId: input.assetActions?.findCreatedId ?? findCreatedEditorSceneObjectId,\n },\n prefabStage: input.prefabStage,\n transformCommands: {\n canCreateSerializedMultiPropertyPatch(command) {\n return command.path.startsWith('transform.')\n || command.path === EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH\n || scene.canCreateSerializedMultiPropertyPatch(command);\n },\n createSerializedMultiPropertyPatch(command) {\n const scenePatch = scene.createSerializedMultiPropertyPatch(command);\n if (scenePatch) return scenePatch;\n if (command.targetIds.some(targetId => !scene.createInspectorPropertyPatch({\n document: command.document,\n targetId,\n path: command.path,\n value: command.value,\n }))) return null;\n return createEditorSceneSerializedMultiTransformPatch(command) as ReturnType<typeof scene.createSerializedMultiPropertyPatch>;\n },\n createTransformInspectorPreview: command => toEditorSceneLocalTransformFromWorld(\n command.document,\n command.targetId,\n command.transform,\n ),\n createTransformPatch: command => createEditorSceneTransformPatch(command as any) as any,\n createTransformBatchPatch: command => createEditorSceneTransformBatchPatch(command as any) as any,\n createDuplicateSelectionPatch: scene.createDuplicateSelectionPatch,\n },\n sceneGraph: {\n validateSceneGraphDrop: scene.validateReparent,\n validateSceneGraphMove: scene.validateHierarchyMove,\n validateSceneGraphGroupSelection: scene.validateGroupSelection,\n createSceneGraphRenamePatch: scene.createRenamePatch,\n createSceneGraphCreateGroupPatch: scene.createCreateGroupPatch,\n createSceneGraphCreatePrimitivePatch: scene.createCreatePrimitivePatch,\n createSceneGraphDeletePatch: scene.createDeleteSubtreePatch,\n createSceneGraphDropPatch: scene.createReparentPatch,\n createSceneGraphMovePatch: scene.createHierarchyMovePatch,\n createSceneGraphGroupSelectionPatch: scene.createGroupSelectionPatch,\n },\n hierarchyActions: input.hierarchyActions,\n worldPreview: input.worldPreview,\n rendering: input.rendering,\n });\n return {\n ...sceneHostOptions,\n createHostOptions(context) {\n const runtime = input.runtime;\n if (!runtime) {\n throw new Error('createFpsGameEditorProductHostAssembly requires runtime options before mounting.');\n }\n const { forgePlay, ...runtimeHostOptions } = runtime;\n return {\n ...runtimeHostOptions,\n ...sceneHostOptions,\n persistenceAdapter: {\n ...runtime.persistenceAdapter,\n },\n worldAdapter: {\n ...runtime.worldAdapter,\n },\n ...(forgePlay ? {\n forgePlay: {\n ...forgePlay,\n handleAssetDrop: context.rememberPlatformAssetDrop,\n handleProjectAssetCommand: forgePlay.handleProjectAssetCommand\n ? bridgeContext => forgePlay.handleProjectAssetCommand?.(\n bridgeContext,\n context.normalizeLoadedPlatformAssetPayload,\n )\n : undefined,\n exportDocument: forgePlay.exportDocument\n ? (exportInput) => {\n const harness = context.getHost()?.harness;\n if (!harness) throw new Error('editor_host_unavailable');\n return forgePlay.exportDocument!({ ...exportInput, harness });\n }\n : undefined,\n },\n } : {}),\n };\n },\n };\n}\n\nfunction isProductHierarchyStructureChange<TDocument, TPatch>(\n command: DocumentCommand<TDocument, TPatch>,\n): boolean {\n if (command.type === 'document.replace') return true;\n const impact = command.projectionImpact;\n if (impact?.type === 'incremental') {\n if ((impact.createdNodeIds?.length ?? 0) > 0\n || (impact.deletedNodeIds?.length ?? 0) > 0) {\n return true;\n }\n }\n const patch = command.patch as { kind?: unknown; path?: unknown } | null | undefined;\n if (patch?.kind === 'game-object.transform' || patch?.kind === 'game-object.transform-batch') return false;\n if (patch?.kind === 'game-object.field'\n || patch?.kind === 'game-object.field-batch'\n || patch?.kind === 'serialized-property') {\n return typeof patch.path !== 'string' || isHierarchyVisiblePropertyPath(patch.path);\n }\n if (typeof patch?.kind === 'string' && (\n patch.kind === 'game-object.rendering-alpha-index-migration'\n || patch.kind.startsWith('scene.material-asset.')\n || patch.kind === 'scene.prefab-material-asset.duplicate-and-bind'\n )) return false;\n if (typeof patch?.kind === 'string' && patch.kind.startsWith('scene.prefab-asset.')) return true;\n if (patch?.kind === 'scene.marker-graph') return true;\n if (typeof patch?.kind === 'string' && (\n patch.kind === 'game-object.create-from-asset'\n || patch.kind === 'game-object.duplicate-selection'\n || patch.kind === 'game-object.rename'\n || patch.kind === 'game-object.create-group'\n || patch.kind === 'game-object.create-primitive'\n || patch.kind === 'game-object.delete-subtree'\n || patch.kind === 'game-object.reparent'\n || patch.kind === 'game-object.hierarchy-move'\n || patch.kind === 'game-object.group-selection'\n )) return true;\n if (impact?.type === 'incremental' && (impact.syncTransformIds?.length ?? 0) > 0) return false;\n return true;\n}\n\nfunction isHierarchyVisiblePropertyPath(path: string): boolean {\n const normalized = path.trim();\n return normalized === 'name'\n || normalized === 'label'\n || normalized === 'parentId'\n || normalized === 'active'\n || normalized === 'enabled'\n || normalized === 'locked'\n || normalized === 'kind'\n || normalized === 'transformType';\n}\n\nfunction findCreatedEditorSceneObjectId<TDocument extends EditorSceneDocument>(\n beforeDocument: TDocument,\n afterDocument: TDocument,\n): string | null {\n const beforeIds = new Set(beforeDocument.scene.gameObjects.map(gameObject => gameObject.id));\n return afterDocument.scene.gameObjects.find(gameObject => !beforeIds.has(gameObject.id))?.id ?? null;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"playable-product-scene-capabilities.js","sourceRoot":"","sources":["../src/playable-product-scene-capabilities.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n PlayableLocalEditorAssetActionsCapability,\n PlayableLocalEditorAssetBrowserCapability,\n PlayableLocalEditorDocumentCapability,\n PlayableLocalEditorDocumentLifecycleCapability,\n PlayableLocalEditorHierarchyActionsCapability,\n PlayableLocalEditorHostCapabilities,\n PlayableLocalEditorInspectorCapability,\n PlayableLocalEditorMarkerGraphCapability,\n PlayableLocalEditorPatchResult,\n PlayableLocalEditorPrefabStageCapability,\n PlayableLocalEditorRenderingCapability,\n PlayableLocalEditorSceneGraphCapability,\n PlayableLocalEditorSelectionCapability,\n PlayableLocalEditorTransformCommandsCapability,\n PlayableLocalEditorWorldPreviewCapability,\n PlayableLocalEditorHarnessApi,\n} from './playable-local-editor-host.js';\nimport type {\n FpsGameEditorProductLocalEditorContext,\n FpsGameEditorProductLocalEditorHostOptions,\n} from './playable-product-local-editor.js';\nimport type { DocumentCommand } from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH,\n assertPlayableEditorSceneDocumentContract,\n createEditorSceneSerializedMultiTransformPatch,\n createEditorSceneTransformBatchPatch,\n createEditorSceneTransformPatch,\n getEditorScenePrefabStageDescriptor,\n getEditorScenePrefabStageProjectionNodeIdForNode,\n getEditorScenePrefabStageProjectionNodes,\n getEditorScenePrefabStageStructure,\n resolveEditorSceneAssetLibraryItemRelativePath,\n resolveEditorSceneLightingPreviewProfile,\n resolveEditorSceneMaterialSlotReimportDiff,\n resolveEditorScenePrefabStagePreviewTarget,\n toEditorSceneLocalTransformFromWorld,\n type EditorSceneAssetLibraryItem,\n type EditorSceneDocument,\n type EditorSceneGameObject,\n type EditorSceneMaterialDocument,\n type FpsGameEditorStandardSceneAssembly,\n} from '@fps-games/editor-playable-sdk';\nimport type { EditorDiagnostic, EditorDiagnosticPhase } from '@fps-games/editor-protocol';\nimport { createBabylonEditorPreviewEngine } from './internal/babylon-preview-engine.js';\n\nexport interface FpsGameEditorPlayableProjectHostAssemblyOptions<TDocument, TAsset> {\n scene: any;\n projection: any;\n sceneSource: any;\n rendering: any;\n projectServices: any;\n /** Overrides for projects whose prefab document semantics differ from the standard scene contract. */\n prefab?: Partial<{\n getDescriptor: typeof getEditorScenePrefabStageDescriptor;\n getProjectionNodes: typeof getEditorScenePrefabStageProjectionNodes;\n getStructure: typeof getEditorScenePrefabStageStructure;\n getInspectorObject: FpsGameEditorStandardSceneAssembly<any, any, any, any, any>['getPrefabStageInspectorObject'];\n resolvePreviewTarget: typeof resolveEditorScenePrefabStagePreviewTarget;\n getProjectionNodeId: typeof getEditorScenePrefabStageProjectionNodeIdForNode;\n }>;\n prepareDocument?(document: TDocument, assets: TAsset[]): TDocument;\n createAssetActionPatch(input: any): any;\n hierarchyOperations?: NonNullable<PlayableLocalEditorHierarchyActionsCapability<TDocument, any>['operations']>;\n loadingContent?: any;\n runtimeWindow: Window;\n gameModeEntryVisible?: boolean;\n loadBabylon(): Promise<any>;\n world?: { cameraTarget?: { x: number; y: number; z: number }; cameraRadius?: number; clearColor?: { r: number; g: number; b: number; a: number }; useRightHandedSystem?: boolean; selectionEdgesPrewarm?: 'eager' | 'lazy' };\n reportError?(error: unknown): void;\n}\n\ninterface FpsGameEditorStandardDocumentPreparation<TDocument, TAsset> {\n document: TDocument;\n assets: TAsset[];\n hydrateDocumentAssets(document: TDocument, assets: TAsset[]): TDocument;\n ensureEnvironmentDefaults(document: TDocument): TDocument;\n normalizeHierarchyDocument(document: TDocument): TDocument;\n}\n\nexport function prepareFpsGameEditorStandardDocument<TDocument, TAsset>(\n input: FpsGameEditorStandardDocumentPreparation<TDocument, TAsset>,\n): TDocument {\n return input.normalizeHierarchyDocument(\n input.ensureEnvironmentDefaults(input.hydrateDocumentAssets(input.document, input.assets)),\n );\n}\n\nconst DEFAULT_PLAYABLE_PROJECT_LOADING_CONTENT = Object.freeze({\n enter: Object.freeze({ title: '正在进入编辑界面…', description: '正在加载场景数据和编辑器,请稍候' }),\n saveScene: Object.freeze({ title: '正在保存场景…', description: '正在写入场景数据,请稍候' }),\n saveAndRunGame: Object.freeze({ title: '正在保存并退出…', description: '正在写入场景并返回游戏,请稍候' }),\n discardAndRunGame: Object.freeze({ title: '正在放弃变更并退出…', description: '正在恢复游戏场景,请稍候' }),\n assetImport: Object.freeze({ title: '正在添加资源…', description: '正在检查资产库并实例化资源,请稍候' }),\n});\n\nexport function createFpsGameEditorPlayableProjectHostAssembly<TDocument, TAsset extends EditorSceneAssetLibraryItem>(\n input: FpsGameEditorPlayableProjectHostAssemblyOptions<TDocument, TAsset>,\n) {\n let assets: TAsset[] = [];\n const scene = input.scene;\n const projection = input.projection;\n const prefab = input.prefab;\n const setAssets = (nextAssets: TAsset[]): TAsset[] => {\n assets = nextAssets;\n input.rendering.setTextures(projection.createEditorSceneInspectorTextureAssets(assets));\n return assets;\n };\n const hydrateDocumentAssets = (document: TDocument, nextAssets: TAsset[]): TDocument => (\n input.projectServices.hydrateDocumentAssets?.(document, nextAssets) ?? document\n );\n const prepareDocument = (document: TDocument, nextAssets: TAsset[]): TDocument => {\n if (input.prepareDocument) return input.prepareDocument(document, nextAssets);\n return prepareFpsGameEditorStandardDocument({\n document,\n assets: nextAssets,\n hydrateDocumentAssets,\n ensureEnvironmentDefaults: scene.ensureEnvironmentDefaults,\n normalizeHierarchyDocument: scene.normalizeHierarchyDocument,\n });\n };\n return createFpsGameEditorProductHostAssembly<any, any, any, any, any>({\n scene,\n document: {\n getProjectionNodes: projection.createProjectionNodes,\n getProjectionNode: (document: any, id: string) => {\n const gameObject = document.scene.gameObjects.find((entry: any) => entry.id === id);\n return gameObject ? projection.createProjectionNode(document, gameObject) : null;\n },\n getProjectionNodesForTarget: projection.getProjectionNodesForTarget,\n resolveProjectionTargetId: projection.resolveProjectionTargetId,\n getProjectionSelectionNodeIds: projection.getProjectionSelectionNodeIds,\n createPatchFromAsset: (asset: any, request: any) => ({ label: `Add ${request?.name?.trim() || asset.displayName}`, patch: { kind: 'game-object.create-from-asset', assetItem: asset, ...(request?.name?.trim() ? { name: request.name.trim() } : {}), ...(request?.placement ? { placement: request.placement } : {}) } }),\n },\n lifecycle: {\n prepareDocument: (document: TDocument, nextAssets: TAsset[]) => prepareDocument(document, setAssets(nextAssets)),\n hydrateDocumentAssets: (document: TDocument, nextAssets: TAsset[]) => {\n const hydratedAssets = setAssets(nextAssets);\n return hydrateDocumentAssets(document, hydratedAssets);\n },\n resolveUpdatedAssetSnapshot: (nextAssets: TAsset[], update: { assetId: string }) => {\n const asset = nextAssets.find(candidate => candidate.assetId === update.assetId || candidate.id === update.assetId);\n if (!asset) return null;\n const contentHash = typeof asset.metadata?.contentHash === 'string'\n ? asset.metadata.contentHash\n : undefined;\n return {\n assetId: asset.assetId,\n ...(contentHash ? { contentHash } : {}),\n };\n },\n listAssetSnapshots: (nextAssets: TAsset[]) => nextAssets.flatMap((asset) => {\n const assetId = typeof asset.assetId === 'string' && asset.assetId.trim()\n ? asset.assetId\n : typeof asset.id === 'string' && asset.id.trim()\n ? asset.id\n : null;\n if (!assetId) return [];\n const contentHash = typeof asset.metadata?.contentHash === 'string'\n ? asset.metadata.contentHash\n : undefined;\n return [{ assetId, ...(contentHash ? { contentHash } : {}) }];\n }),\n reconcileUpdatedAsset: (document: EditorSceneMaterialDocument, update: { assetId: string }) => {\n const diffs = document.scene.gameObjects\n .map(gameObject => resolveEditorSceneMaterialSlotReimportDiff(document, gameObject))\n .filter(diff => diff.assetId === update.assetId);\n return {\n document: scene.ensureEnvironmentDefaults(document),\n reconciledBindingCount: diffs.reduce(\n (count, diff) => count + diff.bindingRemaps.length + diff.bindingRemapIssues.length,\n 0,\n ),\n warnings: diffs.flatMap(diff => [\n ...diff.bindingRemapIssues.map(issue => ({\n code: issue.reason,\n gameObjectId: diff.gameObjectId,\n slotId: issue.fromSlotId,\n materialAssetId: issue.materialAssetId,\n candidateSlotIds: issue.candidateSlotIds,\n })),\n ...diff.issues\n .filter(issue => issue.reason === 'source-material-changed')\n .map(issue => ({\n code: issue.reason,\n gameObjectId: diff.gameObjectId,\n ...(issue.slotId ? { slotId: issue.slotId } : {}),\n ...(issue.materialAssetId ? { materialAssetId: issue.materialAssetId } : {}),\n })),\n ]),\n };\n },\n summarize: input.projectServices.summarize,\n },\n getInspectorContext: () => ({ textureAssets: projection.createEditorSceneInspectorTextureAssets(assets) }),\n agentContext: input.projectServices.agentContext,\n assetActions: { createAssetActionPatch: input.createAssetActionPatch },\n prefabStage: {\n getPrefabStageDescriptor: prefab?.getDescriptor ?? getEditorScenePrefabStageDescriptor,\n getPrefabStageProjectionNodes: prefab?.getProjectionNodes ?? getEditorScenePrefabStageProjectionNodes,\n getPrefabStageStructure: prefab?.getStructure ?? getEditorScenePrefabStageStructure,\n getPrefabStageInspectorObject: prefab?.getInspectorObject ?? scene.getPrefabStageInspectorObject,\n resolvePrefabStagePreviewTarget: prefab?.resolvePreviewTarget ?? resolveEditorScenePrefabStagePreviewTarget,\n getPrefabStageProjectionNodeId: prefab?.getProjectionNodeId ?? getEditorScenePrefabStageProjectionNodeIdForNode,\n },\n hierarchyActions: {\n operations: input.hierarchyOperations ?? [],\n },\n worldPreview: {\n getSceneCameraPreviewRig: projection.createSceneCameraPreviewRig,\n getWorldAppearance: (document: any) => resolveEditorSceneLightingPreviewProfile(document, { environmentLightId: 'environment_light', sunLightId: 'sun_light', defaultEnvironmentLight: scene.defaults.environmentLight, defaultSunLight: scene.defaults.sunLight }),\n },\n rendering: input.rendering.capability,\n runtime: {\n localTestActions: input.runtimeWindow.parent === input.runtimeWindow,\n gameModeEntryVisible: input.gameModeEntryVisible,\n authoring: { drivers: [input.sceneSource.createDriver()] },\n persistenceAdapter: {\n loadAuthoringSource: async () => { const loaded = await input.sceneSource.load(); return { source: loaded.source, document: loaded.document, assets: loaded.assets, summary: loaded.summary }; },\n loadAssets: input.sceneSource.loadAssets,\n ...(input.sceneSource.loadProjectFiles ? { loadProjectFiles: input.sceneSource.loadProjectFiles } : {}),\n ...(input.sceneSource.loadProjectFile ? { loadProjectFile: input.sceneSource.loadProjectFile } : {}),\n ...(input.sceneSource.resolveProjectMedia ? { resolveProjectMedia: input.sceneSource.resolveProjectMedia } : {}),\n },\n worldAdapter: {\n loadPreviewEngine: async () => projection.createEditorPreviewBabylonModule(await input.loadBabylon()),\n createPreviewEngine: createBabylonEditorPreviewEngine,\n importPreviewAsset: projection.importEditorProjectionModel,\n resolveMaterialTextureUrl: (texture: unknown) => projection.resolveEditorSceneTextureRefUrl(assets, texture),\n resolveAssetId: (asset: TAsset) => asset.assetId,\n toBrowserAssetItem: (asset: TAsset) => ({ id: asset.assetId, guid: asset.guid, assetId: asset.assetId, kind: asset.kind, label: asset.displayName, relativePath: resolveEditorSceneAssetLibraryItemRelativePath(asset), meta: asset.assetId, external: asset.external, origin: asset.origin, dedupeKey: asset.dedupeKey, contentHash: typeof asset.metadata?.contentHash === 'string' ? asset.metadata.contentHash : undefined, placeable: asset.placeable, preview: projection.createEditorSceneLibraryAssetPreview(asset), disabled: asset.placeable === false }),\n },\n world: input.world,\n createGrid: projection.createEditorGrid,\n lifecycle: { loadingContent: input.loadingContent ?? DEFAULT_PLAYABLE_PROJECT_LOADING_CONTENT, beforeDiscardAndRunGame: input.rendering.reset },\n forgePlay: { window: input.runtimeWindow, hasUnsavedPlatformChanges: input.rendering.isDirty, handleProjectAssetCommand: input.projectServices.handleProjectAssetCommand, exportDocument: ({ harness, payload, saveState }: any) => input.projectServices.exportDocument(harness, payload, saveState), reportError: input.reportError },\n },\n });\n}\n\nexport interface FpsGameEditorProductSceneDocumentAdapter<\n TDocument,\n TPatch,\n TAsset = unknown,\n> extends Pick<\n PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>,\n | 'reduceDocument'\n | 'getHierarchyItems'\n | 'isHierarchyStructureChange'\n | 'getProjectionNodes'\n | 'getProjectionNode'\n | 'getProjectionNodesForTarget'\n | 'resolveProjectionTargetId'\n | 'getProjectionSelectionNodeIds'\n | 'createPatchFromAsset'\n | 'createSerializedPropertyPatch'\n | 'resolveDiagnosticLocator'\n > {}\n\nexport interface FpsGameEditorProductSceneHostOptions<\n TDocument,\n TPatch,\n TAsset = unknown,\n> {\n documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset>;\n capabilities: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>;\n}\n\nexport interface FpsGameEditorProductSceneHostOptionsInput<\n TDocument,\n TPatch,\n TAsset = unknown,\n> {\n document: FpsGameEditorProductSceneDocumentAdapter<TDocument, TPatch, TAsset>;\n lifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n selection?: PlayableLocalEditorSelectionCapability<TDocument>;\n inspector?: PlayableLocalEditorInspectorCapability<TDocument>;\n assetBrowser?: PlayableLocalEditorAssetBrowserCapability<TDocument>;\n agentContext?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>['agentContext'];\n markerGraph?: PlayableLocalEditorMarkerGraphCapability<TDocument, TPatch>;\n assetActions?: PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n transformCommands?: PlayableLocalEditorTransformCommandsCapability<TDocument, TPatch>;\n sceneGraph?: PlayableLocalEditorSceneGraphCapability<TDocument, TPatch>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n}\n\nexport function createFpsGameEditorProductSceneHostOptions<\n TDocument,\n TPatch,\n TAsset = unknown,\n>(\n input: FpsGameEditorProductSceneHostOptionsInput<TDocument, TPatch, TAsset>,\n): FpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset> {\n const documentAdapter: PlayableLocalEditorDocumentCapability<TDocument, TPatch, TAsset> = {\n ...input.document,\n };\n\n return {\n documentAdapter,\n capabilities: {\n documentLifecycle: input.lifecycle,\n selection: input.selection,\n inspector: input.inspector,\n assetBrowser: input.assetBrowser,\n agentContext: input.agentContext,\n markerGraph: input.markerGraph,\n assetActions: input.assetActions,\n prefabStage: input.prefabStage,\n transformCommands: input.transformCommands,\n sceneGraph: input.sceneGraph,\n hierarchyActions: input.hierarchyActions,\n worldPreview: input.worldPreview,\n rendering: input.rendering,\n },\n };\n}\n\nexport interface FpsGameEditorProductHostAssemblyInput<\n TDocument extends EditorSceneDocument<TGameObject>,\n TGameObject extends EditorSceneGameObject,\n TPatch,\n TAsset extends EditorSceneAssetLibraryItem,\n TContext,\n> {\n scene: FpsGameEditorStandardSceneAssembly<TDocument, TGameObject, TPatch, TAsset, TContext>;\n document: Pick<\n FpsGameEditorProductSceneDocumentAdapter<TDocument, TPatch, TAsset>,\n | 'getProjectionNodes'\n | 'getProjectionNode'\n | 'getProjectionNodesForTarget'\n | 'resolveProjectionTargetId'\n | 'getProjectionSelectionNodeIds'\n | 'createPatchFromAsset'\n >;\n lifecycle?: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset>;\n getInspectorContext?: () => TContext;\n agentContext?: PlayableLocalEditorHostCapabilities<TDocument, TPatch, TAsset>['agentContext'];\n assetActions?: Pick<\n PlayableLocalEditorAssetActionsCapability<TDocument, TPatch, TAsset>,\n 'createAssetActionPatch' | 'createPlacedAssetPatch' | 'findCreatedId'\n >;\n prefabStage?: PlayableLocalEditorPrefabStageCapability<TDocument, TAsset>;\n hierarchyActions?: PlayableLocalEditorHierarchyActionsCapability<TDocument, TPatch>;\n worldPreview?: PlayableLocalEditorWorldPreviewCapability<TDocument>;\n rendering?: PlayableLocalEditorRenderingCapability<TDocument, TPatch>;\n runtime?: FpsGameEditorProductHostRuntimeOptions<TDocument, TPatch, TAsset>;\n}\n\ntype FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset> = NonNullable<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['forgePlay']\n>;\n\nfunction collectProductEditorSceneDocumentDiagnostics(\n document: EditorSceneDocument,\n phase: EditorDiagnosticPhase,\n): EditorDiagnostic[] {\n try {\n assertPlayableEditorSceneDocumentContract(document);\n return [];\n } catch (error) {\n const record = error && typeof error === 'object'\n ? error as { code?: unknown; path?: unknown; message?: unknown }\n : null;\n const path = typeof record?.path === 'string' ? record.path : undefined;\n const code = classifyProductDocumentValidationCode(document, path)\n ?? (typeof record?.code === 'string'\n ? `document-${record.code.replace(/\\./g, '-')}`\n : 'document-contract-invalid');\n return [{\n code,\n severity: 'error',\n phase,\n source: 'document',\n producer: 'document-validation',\n message: typeof record?.message === 'string' ? record.message : String(error),\n suggestion: path\n ? `检查诊断详情中的文档路径 ${path},修复无效或重复的数据后重新验证。`\n : '检查当前 Scene Document 的结构完整性后重新验证。',\n subject: { kind: 'document' },\n ...(path ? {\n details: { path },\n } : {}),\n }];\n }\n}\n\nfunction classifyProductDocumentValidationCode(\n document: EditorSceneDocument,\n path: string | undefined,\n): string | null {\n if (!path) return null;\n const assetMatch = /^\\$\\.assets\\[(\\d+)\\]\\.id$/.exec(path);\n if (assetMatch && hasDuplicateIdAtIndex(document.assets, Number(assetMatch[1]))) {\n return 'document-asset-id-duplicate';\n }\n const objectMatch = /^\\$\\.scene\\.gameObjects\\[(\\d+)\\]\\.id$/.exec(path);\n if (objectMatch && hasDuplicateIdAtIndex(document.scene.gameObjects, Number(objectMatch[1]))) {\n return 'document-game-object-id-duplicate';\n }\n return null;\n}\n\nfunction hasDuplicateIdAtIndex(values: readonly { id?: unknown }[], index: number): boolean {\n const id = typeof values[index]?.id === 'string' ? values[index].id : null;\n return !!id && values.filter(value => value.id === id).length > 1;\n}\n\nexport interface FpsGameEditorProductHostRuntimeOptions<TDocument, TPatch, TAsset> extends Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>,\n 'documentAdapter' | 'capabilities' | 'persistenceAdapter' | 'worldAdapter' | 'forgePlay'\n> {\n persistenceAdapter: Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['persistenceAdapter'],\n 'runGame'\n >;\n worldAdapter: Omit<\n FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>['worldAdapter'],\n 'disposeWorld' | 'disposeGameWorld' | 'getCanvas'\n >;\n forgePlay?: Omit<\n FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>,\n 'handleAssetDrop' | 'handleProjectAssetCommand' | 'exportDocument'\n > & {\n handleProjectAssetCommand?: (\n bridgeContext: Parameters<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['handleProjectAssetCommand']>>[0],\n normalizeLoadedPlatformAssetPayload: (payload: Record<string, unknown>) => Record<string, unknown>,\n ) => Promise<void> | void;\n exportDocument?: (input: Parameters<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['exportDocument']>>[0] & {\n harness: PlayableLocalEditorHarnessApi<TDocument>;\n }) => ReturnType<NonNullable<FpsGameEditorProductForgePlayOptions<TDocument, TPatch, TAsset>['exportDocument']>>;\n };\n}\n\nexport interface FpsGameEditorProductHostAssembly<TDocument, TPatch, TAsset>\n extends FpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset> {\n createHostOptions(\n context: FpsGameEditorProductLocalEditorContext<TDocument>,\n ): FpsGameEditorProductLocalEditorHostOptions<TDocument, TPatch, TAsset>;\n}\n\nexport function createFpsGameEditorProductHostAssembly<\n TDocument extends EditorSceneDocument<TGameObject>,\n TGameObject extends EditorSceneGameObject,\n TPatch,\n TAsset extends EditorSceneAssetLibraryItem,\n TContext,\n>(\n input: FpsGameEditorProductHostAssemblyInput<TDocument, TGameObject, TPatch, TAsset, TContext>,\n): FpsGameEditorProductHostAssembly<TDocument, TPatch, TAsset> {\n const scene = input.scene;\n const inspectorContext = (): TContext => input.getInspectorContext?.() ?? ({} as TContext);\n const projectValidateDocument = input.lifecycle?.validateDocument;\n const documentLifecycleCapabilities: PlayableLocalEditorDocumentLifecycleCapability<TDocument, TAsset> = {\n ...input.lifecycle,\n validateDocument: (document, context) => [\n ...collectProductEditorSceneDocumentDiagnostics(document, context.phase),\n ...(projectValidateDocument?.(document, context) ?? []),\n ],\n };\n const sceneHostOptions = createFpsGameEditorProductSceneHostOptions<TDocument, TPatch, TAsset>({\n document: {\n reduceDocument: scene.reduceDocument,\n getHierarchyItems: scene.getHierarchyItems,\n isHierarchyStructureChange: isProductHierarchyStructureChange,\n getProjectionNodes: input.document.getProjectionNodes,\n getProjectionNode: input.document.getProjectionNode,\n getProjectionNodesForTarget: input.document.getProjectionNodesForTarget,\n resolveProjectionTargetId: input.document.resolveProjectionTargetId,\n getProjectionSelectionNodeIds: input.document.getProjectionSelectionNodeIds,\n createPatchFromAsset: input.document.createPatchFromAsset,\n createSerializedPropertyPatch: scene.createInspectorPropertyPatch,\n resolveDiagnosticLocator: scene.resolveDiagnosticLocator,\n },\n lifecycle: documentLifecycleCapabilities,\n selection: {\n isSelectable: scene.isSelectableHierarchyId,\n isLocked: () => false,\n },\n inspector: {\n getInspectorObject: (document, activeId) => scene.getInspectorObject(document, activeId, inspectorContext()),\n getInspectorMultiObject: (document, selectedIds, activeId) => scene.getInspectorMultiObject(\n document,\n selectedIds,\n activeId,\n inspectorContext(),\n ),\n getRuntimeInspectorSections: scene.getRuntimeInspectorSections,\n },\n assetBrowser: {\n getBrowserAssetItems: scene.createBrowserAssetItems,\n },\n agentContext: input.agentContext,\n markerGraph: {\n getMarkerGraph: scene.getMarkerGraph,\n getMarkerTypeCatalog: scene.getMarkerTypeCatalog,\n getRelationTypeCatalog: scene.getRelationTypeCatalog,\n getPrefabInstanceMarkerOverlays: scene.getPrefabInstanceMarkerOverlays,\n getPrefabStageMarkerOverlays: scene.getPrefabStageMarkerOverlays,\n createMarkerGraphPatch: scene.createMarkerGraphPatch,\n },\n assetActions: {\n ...input.assetActions,\n createPlacedAssetPatch: input.assetActions?.createPlacedAssetPatch ?? ((command) => {\n if (!command.asset || !command.hit) return null;\n return scene.createPlacedAssetPatch({\n document: command.document,\n asset: command.asset,\n hit: command.hit as any,\n }) as PlayableLocalEditorPatchResult<TPatch> | null;\n }),\n findCreatedId: input.assetActions?.findCreatedId ?? findCreatedEditorSceneObjectId,\n },\n prefabStage: input.prefabStage,\n transformCommands: {\n canCreateSerializedMultiPropertyPatch(command) {\n return command.path.startsWith('transform.')\n || command.path === EDITOR_SCENE_STATIC_SHADOW_BAKE_ACTION_PATH\n || scene.canCreateSerializedMultiPropertyPatch(command);\n },\n createSerializedMultiPropertyPatch(command) {\n const scenePatch = scene.createSerializedMultiPropertyPatch(command);\n if (scenePatch) return scenePatch;\n if (command.targetIds.some(targetId => !scene.createInspectorPropertyPatch({\n document: command.document,\n targetId,\n path: command.path,\n value: command.value,\n }))) return null;\n return createEditorSceneSerializedMultiTransformPatch(command) as ReturnType<typeof scene.createSerializedMultiPropertyPatch>;\n },\n createTransformInspectorPreview: command => toEditorSceneLocalTransformFromWorld(\n command.document,\n command.targetId,\n command.transform,\n ),\n createTransformPatch: command => createEditorSceneTransformPatch(command as any) as any,\n createTransformBatchPatch: command => createEditorSceneTransformBatchPatch(command as any) as any,\n createDuplicateSelectionPatch: scene.createDuplicateSelectionPatch,\n },\n sceneGraph: {\n validateSceneGraphDrop: scene.validateReparent,\n validateSceneGraphMove: scene.validateHierarchyMove,\n validateSceneGraphGroupSelection: scene.validateGroupSelection,\n createSceneGraphRenamePatch: scene.createRenamePatch,\n createSceneGraphCreateGroupPatch: scene.createCreateGroupPatch,\n createSceneGraphCreatePrimitivePatch: scene.createCreatePrimitivePatch,\n createSceneGraphDeletePatch: scene.createDeleteSubtreePatch,\n createSceneGraphDropPatch: scene.createReparentPatch,\n createSceneGraphMovePatch: scene.createHierarchyMovePatch,\n createSceneGraphGroupSelectionPatch: scene.createGroupSelectionPatch,\n },\n hierarchyActions: input.hierarchyActions,\n worldPreview: input.worldPreview,\n rendering: input.rendering,\n });\n return {\n ...sceneHostOptions,\n createHostOptions(context) {\n const runtime = input.runtime;\n if (!runtime) {\n throw new Error('createFpsGameEditorProductHostAssembly requires runtime options before mounting.');\n }\n const { forgePlay, ...runtimeHostOptions } = runtime;\n return {\n ...runtimeHostOptions,\n ...sceneHostOptions,\n persistenceAdapter: {\n ...runtime.persistenceAdapter,\n },\n worldAdapter: {\n ...runtime.worldAdapter,\n },\n ...(forgePlay ? {\n forgePlay: {\n ...forgePlay,\n handleAssetDrop: context.rememberPlatformAssetDrop,\n handleProjectAssetCommand: forgePlay.handleProjectAssetCommand\n ? bridgeContext => forgePlay.handleProjectAssetCommand?.(\n bridgeContext,\n context.normalizeLoadedPlatformAssetPayload,\n )\n : undefined,\n exportDocument: forgePlay.exportDocument\n ? (exportInput) => {\n const harness = context.getHost()?.harness;\n if (!harness) throw new Error('editor_host_unavailable');\n return forgePlay.exportDocument!({ ...exportInput, harness });\n }\n : undefined,\n },\n } : {}),\n };\n },\n };\n}\n\nfunction isProductHierarchyStructureChange<TDocument, TPatch>(\n command: DocumentCommand<TDocument, TPatch>,\n): boolean {\n if (command.type === 'document.replace') return true;\n const impact = command.projectionImpact;\n if (impact?.type === 'incremental') {\n if ((impact.createdNodeIds?.length ?? 0) > 0\n || (impact.deletedNodeIds?.length ?? 0) > 0) {\n return true;\n }\n }\n const patch = command.patch as { kind?: unknown; path?: unknown } | null | undefined;\n if (patch?.kind === 'game-object.transform' || patch?.kind === 'game-object.transform-batch') return false;\n if (patch?.kind === 'game-object.field'\n || patch?.kind === 'game-object.field-batch'\n || patch?.kind === 'serialized-property') {\n return typeof patch.path !== 'string' || isHierarchyVisiblePropertyPath(patch.path);\n }\n if (typeof patch?.kind === 'string' && (\n patch.kind === 'game-object.rendering-alpha-index-migration'\n || patch.kind.startsWith('scene.material-asset.')\n || patch.kind === 'scene.prefab-material-asset.duplicate-and-bind'\n )) return false;\n if (typeof patch?.kind === 'string' && patch.kind.startsWith('scene.prefab-asset.')) return true;\n if (patch?.kind === 'scene.marker-graph') return true;\n if (typeof patch?.kind === 'string' && (\n patch.kind === 'game-object.create-from-asset'\n || patch.kind === 'game-object.duplicate-selection'\n || patch.kind === 'game-object.rename'\n || patch.kind === 'game-object.create-group'\n || patch.kind === 'game-object.create-primitive'\n || patch.kind === 'game-object.delete-subtree'\n || patch.kind === 'game-object.reparent'\n || patch.kind === 'game-object.hierarchy-move'\n || patch.kind === 'game-object.group-selection'\n )) return true;\n if (impact?.type === 'incremental' && (impact.syncTransformIds?.length ?? 0) > 0) return false;\n return true;\n}\n\nfunction isHierarchyVisiblePropertyPath(path: string): boolean {\n const normalized = path.trim();\n return normalized === 'name'\n || normalized === 'label'\n || normalized === 'parentId'\n || normalized === 'active'\n || normalized === 'enabled'\n || normalized === 'locked'\n || normalized === 'kind'\n || normalized === 'transformType';\n}\n\nfunction findCreatedEditorSceneObjectId<TDocument extends EditorSceneDocument>(\n beforeDocument: TDocument,\n afterDocument: TDocument,\n): string | null {\n const beforeIds = new Set(beforeDocument.scene.gameObjects.map(gameObject => gameObject.id));\n return afterDocument.scene.gameObjects.find(gameObject => !beforeIds.has(gameObject.id))?.id ?? null;\n}\n"]}
|
package/dist/playable-sdk.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ export type { MaterialOwnerCandidate, MaterialOwnerCandidateSummary, MaterialOwn
|
|
|
6
6
|
export { mountEditorRuntimeCameraDebugPanel, mountEditorRuntimeDebugPanelShell, mountEditorRuntimeLightingDebugPanel, } from '@fps-games/editor-browser/runtime-debug';
|
|
7
7
|
export type { EditorRuntimeCameraDebugPanel, EditorRuntimeCameraDebugPanelOptions, EditorRuntimeCameraDebugPanInput, EditorRuntimeCameraDebugScreenPoint, EditorRuntimeCameraDebugViewportRect, EditorRuntimeDebugPanelLanguage, EditorRuntimeDebugPanelMode, EditorRuntimeDebugPanelPlacement, EditorRuntimeDebugPanelShell, EditorRuntimeDebugPanelShellOptions, EditorRuntimeDebugPanelStatusOptions, EditorRuntimeLightingDebugPanel, EditorRuntimeLightingDebugPanelOptions, } from '@fps-games/editor-browser/runtime-debug';
|
|
8
8
|
export { createPlayableBabylonEditorGrid, createBabylonAssetContainerProjectionImporter, createBabylonPrimitiveProjectionInstancingController, applyArtistMaterialProfileToRuntimeMaterial, applyMaterialValueToRuntimeMaterial, applyMaterialValueToRuntimeNode, createMaterialSlotOwnerPathMatchKey, resolveMaterialOwnerNode, resolveMaterialSlotOwnerNodes, isMaterialSlotOwnerPathMatch, normalizeMaterialSlotOwnerPath, resolveMaterialRuntimeKind, applyOutlineValueToRuntimeNode, resolveOutlineOwnerNode, resolveOutlineTarget, applyBabylonDefaultOutline, createBabylonEnvironmentTextureController, createBabylonDefaultPostProcessPipelineController, createBlobShadowSystem, createDynamicShadowSystem, createStaticProjectedShadowBakeHashes, createStaticProjectedShadowProfileHash, createStaticProjectedShadowArtifactSystem, createPlayableBabylonOutlineInspectorSection, createPlayableBabylonOutlineInspectorSeedPatchValue, isPlayableBabylonOutlineInspectorPatchPath, PLAYABLE_BABYLON_DEFAULT_OUTLINE_OVERRIDE, applyPlayableBabylonOutlineOverrideToRuntimeNode, applyPlayableBabylonOutlineOverrideToRuntimeTarget, createPlanarShadowSystem, normalizeBabylonEnvironmentTextureProfile, normalizeBabylonDefaultPostProcessProfile, normalizeBabylonDefaultPostProcessVolumeStack, resolveBabylonDefaultPostProcessVolumeStack, } from './playable-babylon-facade.js';
|
|
9
|
-
export { createPlayableBabylonRenderingCapability, createPlayableBabylonRenderingCapabilityFacade, createPlayableBabylonRenderingAlphaIndexMigrationPatch, createPlayableBabylonWorldRendering, createPlayableBabylonRenderingPanelState, createPlayableBabylonEnvironmentTextureProfile, createPlayableBabylonRenderingDiagnostics, createPlayableBabylonRuntimeRenderingControllers, createPlayableBabylonPlanarShadowPolicy, resolvePlayableBabylonPlanarShadowPolicy, createPlayableBabylonPlanarShadowPolicyInput, createPlayableBabylonPlanarShadowPreviewOptions, createPlayableBabylonPlanarShadowOptions, createPlayableBabylonPlanarShadowSystem, createPlayableBabylonBlobShadowOptions, createPlayableBabylonBlobShadowSystem, createPlayableBabylonStaticProjectedShadowOptions, createPlayableBabylonStaticProjectedShadowArtifactSystem,
|
|
9
|
+
export { createPlayableBabylonRenderingCapability, createPlayableBabylonRenderingCapabilityFacade, createPlayableBabylonRenderingAlphaIndexMigrationPatch, createPlayableBabylonWorldRendering, createPlayableBabylonRenderingPanelState, createPlayableBabylonEnvironmentTextureProfile, createPlayableBabylonRenderingDiagnostics, createPlayableBabylonRuntimeRenderingControllers, createPlayableBabylonPlanarShadowPolicy, resolvePlayableBabylonPlanarShadowPolicy, createPlayableBabylonPlanarShadowPolicyInput, createPlayableBabylonPlanarShadowPreviewOptions, createPlayableBabylonPlanarShadowOptions, createPlayableBabylonPlanarShadowSystem, createPlayableBabylonBlobShadowOptions, createPlayableBabylonBlobShadowSystem, createPlayableBabylonStaticProjectedShadowOptions, createPlayableBabylonStaticProjectedShadowArtifactSystem, resolvePlayableBabylonRenderingEnvironmentTextureResource, resolvePlayableBabylonRenderingEnvironmentTextureDiagnostic, isPlayableBabylonRenderingEnvironmentTextureAsset, isPlayableBabylonRenderingEnvironmentTextureResource, } from './playable-babylon-rendering.js';
|
|
10
10
|
export type { PlayableBabylonProjectionImportContext, PlayableBabylonProjectionImportResult, PlayableBabylonProjectionNode, PlayableBabylonSceneCameraPreviewRig, BabylonAssetContainerProjectionContainer, BabylonAssetContainerProjectionImportEvent, BabylonAssetContainerProjectionImporterOptions, BabylonAssetContainerProjectionInstantiatedEntries, BabylonPrimitiveProjectionInstancingController, BabylonPrimitiveProjectionInstancingControllerOptions, BabylonPrimitiveProjectionMaterialKind, BabylonPrimitiveProjectionNodeLike, BabylonPrimitiveProjectionShape, CanonicalMaterialChange, CanonicalOutlineChange, BabylonDefaultOutlineOptions, BabylonRendererOutlineStrategy, BabylonEnvironmentTextureController, BabylonEnvironmentTextureProfile, PlayableBabylonOutlineInspectorLanguage, PlayableBabylonOutlineInspectorSectionInput, PlayableBabylonOutlineInspectorSeedPatchInput, PlayableBabylonOutlineOverrideConfig, PlayableBabylonOutlineStrategy, PlayableBabylonOutlineRuntimeApplyResult, PlayableBabylonOutlineRuntimeOverride, BlobShadowOptions, BlobShadowSystem, DynamicShadowDiagnostics, DynamicShadowOptions, DynamicShadowParams, DynamicShadowSystem, PlanarShadowOptions, PlanarShadowSystem, StaticProjectedShadowArtifact, StaticProjectedShadowArtifactDiagnostic, StaticProjectedShadowArtifactHashInput, StaticProjectedShadowArtifactOptions, StaticProjectedShadowArtifactSystem, StaticProjectedShadowOptions, BabylonDefaultPostProcessPipelineController, BabylonDefaultPostProcessProfile, BabylonDefaultPostProcessResolveInput, BabylonDefaultPostProcessResolveResult, BabylonDefaultPostProcessResolvedVolume, BabylonDefaultPostProcessSamples, BabylonDefaultPostProcessVolume, BabylonDefaultPostProcessVolumeStack, BabylonDefaultToneMappingType, PostProcessVolumeShape, } from './playable-babylon-facade.js';
|
|
11
11
|
export type { PlayableBabylonRenderingCapabilityOptions, PlayableBabylonRenderingCapabilityFacade, PlayableBabylonRenderingCapabilityFacadeOptions, PlayableBabylonRenderingAlphaIndexMigrationPatchInput, PlayableBabylonRenderingContext, PlayableBabylonRenderingDocumentInput, PlayableBabylonRenderingDiagnostics, PlayableBabylonRenderingEnvironmentTextureDiagnostic, PlayableBabylonRenderingEnvironmentTextureDiagnosticStatus, PlayableBabylonRuntimeRenderingControllerOptions, PlayableBabylonRuntimeRenderingControllers, PlayableBabylonPlanarShadowPolicy, PlayableBabylonPlanarShadowPolicyInput, PlayableBabylonBlobShadowPolicyInput, PlayableBabylonStaticProjectedShadowPolicyInput, PlayableBabylonResolvedPlanarShadowPolicy, PlayableBabylonRenderingSetConfigInput, PlayableBabylonRenderingShadowPreviewOptions, PlayableBabylonRenderingStatusTone, PlayableBabylonRenderingValueResolver, PlayableBabylonWorldRendering, } from './playable-babylon-rendering.js';
|
|
12
12
|
export { SPATIAL_MARKER_GRAPH_SCHEMA_VERSION } from '@fps-games/editor-protocol';
|