@fps-games/editor 0.2.0-beta.3 → 0.2.1-beta.1
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/editor-state.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/editor-state.js +32 -17
- package/dist/agent-bridge/capabilities/editor-state.js.map +1 -1
- package/dist/agent-bridge/capabilities/hierarchy.d.ts +4 -0
- package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +1 -0
- package/dist/agent-bridge/capabilities/hierarchy.js +209 -0
- package/dist/agent-bridge/capabilities/hierarchy.js.map +1 -0
- package/dist/agent-bridge/capabilities/prefabs.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/prefabs.js +243 -60
- package/dist/agent-bridge/capabilities/prefabs.js.map +1 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts +3 -4
- package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/scene-objects.js +111 -25
- package/dist/agent-bridge/capabilities/scene-objects.js.map +1 -1
- package/dist/agent-bridge/capabilities/selection.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/selection.js +8 -5
- package/dist/agent-bridge/capabilities/selection.js.map +1 -1
- package/dist/agent-bridge/capabilities/shadows.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/shadows.js +839 -67
- package/dist/agent-bridge/capabilities/shadows.js.map +1 -1
- package/dist/agent-bridge/capabilities/transform.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/transform.js +6 -4
- package/dist/agent-bridge/capabilities/transform.js.map +1 -1
- package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/ui-regions.js +3 -1
- package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
- package/dist/agent-bridge/capabilities/viewport.d.ts.map +1 -1
- package/dist/agent-bridge/capabilities/viewport.js +92 -47
- package/dist/agent-bridge/capabilities/viewport.js.map +1 -1
- package/dist/agent-bridge/capability-sources.d.ts.map +1 -1
- package/dist/agent-bridge/capability-sources.js +2 -0
- package/dist/agent-bridge/capability-sources.js.map +1 -1
- package/dist/agent-bridge/register.d.ts.map +1 -1
- package/dist/agent-bridge/register.js +194 -0
- package/dist/agent-bridge/register.js.map +1 -1
- package/dist/agent-bridge/shared.d.ts +232 -7
- package/dist/agent-bridge/shared.d.ts.map +1 -1
- package/dist/agent-bridge/shared.js +174 -0
- package/dist/agent-bridge/shared.js.map +1 -1
- package/dist/agent-bridge/source-types.d.ts +17 -1
- package/dist/agent-bridge/source-types.d.ts.map +1 -1
- package/dist/agent-bridge/source-types.js.map +1 -1
- package/dist/build-info.json +57 -42
- package/dist/index.d.ts +7 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/babylon-preview-engine.d.ts +3 -0
- package/dist/internal/babylon-preview-engine.d.ts.map +1 -0
- package/dist/internal/babylon-preview-engine.js +11 -0
- package/dist/internal/babylon-preview-engine.js.map +1 -0
- package/dist/internal/product-local-editor-cleanup.d.ts +5 -0
- package/dist/internal/product-local-editor-cleanup.d.ts.map +1 -0
- package/dist/internal/product-local-editor-cleanup.js +20 -0
- package/dist/internal/product-local-editor-cleanup.js.map +1 -0
- package/dist/local-editor-agent-actions.d.ts +2 -4
- package/dist/local-editor-agent-actions.d.ts.map +1 -1
- package/dist/local-editor-agent-actions.js +61 -33
- package/dist/local-editor-agent-actions.js.map +1 -1
- package/dist/local-editor-agent-context.d.ts +5 -5
- package/dist/local-editor-agent-context.d.ts.map +1 -1
- package/dist/local-editor-agent-context.js.map +1 -1
- package/dist/local-editor-harness.d.ts +340 -35
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +3854 -1118
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-marker-graph.d.ts +15 -15
- package/dist/local-editor-marker-graph.d.ts.map +1 -1
- package/dist/local-editor-marker-graph.js +3 -0
- package/dist/local-editor-marker-graph.js.map +1 -1
- package/dist/local-editor-performance-stats.d.ts +3 -2
- package/dist/local-editor-performance-stats.d.ts.map +1 -1
- package/dist/local-editor-performance-stats.js.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts +19 -0
- package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -0
- package/dist/local-editor-prefab-stage-transaction.js +45 -0
- package/dist/local-editor-prefab-stage-transaction.js.map +1 -0
- package/dist/local-editor-scene-view-interaction-runtime.d.ts +3 -1
- package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.js +24 -0
- package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
- package/dist/local-editor-tools.d.ts +18 -0
- package/dist/local-editor-tools.d.ts.map +1 -0
- package/dist/local-editor-tools.js +53 -0
- package/dist/local-editor-tools.js.map +1 -0
- package/dist/playable-babylon-rendering.d.ts +9 -0
- package/dist/playable-babylon-rendering.d.ts.map +1 -1
- package/dist/playable-babylon-rendering.js +162 -6
- package/dist/playable-babylon-rendering.js.map +1 -1
- package/dist/playable-local-editor-entry.d.ts +68 -0
- package/dist/playable-local-editor-entry.d.ts.map +1 -0
- package/dist/playable-local-editor-entry.js +424 -0
- package/dist/playable-local-editor-entry.js.map +1 -0
- package/dist/playable-local-editor-host.d.ts +51 -29
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +23 -11
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-local-editor.d.ts +10 -12
- package/dist/playable-product-local-editor.d.ts.map +1 -1
- package/dist/playable-product-local-editor.js +178 -85
- package/dist/playable-product-local-editor.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts +4 -1
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +122 -5
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-product-rendering.d.ts +12 -0
- package/dist/playable-product-rendering.d.ts.map +1 -1
- package/dist/playable-product-rendering.js +128 -6
- package/dist/playable-product-rendering.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts +24 -7
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +172 -15
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-project-mode.d.ts +17 -0
- package/dist/playable-project-mode.d.ts.map +1 -0
- package/dist/playable-project-mode.js +2 -0
- package/dist/playable-project-mode.js.map +1 -0
- package/dist/playable-runtime-babylon.d.ts +3 -6
- package/dist/playable-runtime-babylon.d.ts.map +1 -1
- package/dist/playable-runtime-babylon.js +1 -5
- package/dist/playable-runtime-babylon.js.map +1 -1
- package/dist/playable-sdk.d.ts +16 -9
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js +6 -4
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +23 -14
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +53 -19
- package/dist/playable-standard-project.js.map +1 -1
- package/dist/vite-client.d.ts +4 -0
- package/node_modules/@babel/helper-string-parser/lib/index.js +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/identifier.js +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/index.js +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/keyword.js +0 -1
- package/node_modules/@babel/parser/lib/index.js +0 -1
- package/node_modules/@babel/types/lib/asserts/assertNode.js +0 -1
- package/node_modules/@babel/types/lib/asserts/generated/index.js +0 -1
- package/node_modules/@babel/types/lib/ast-types/generated/index.js +0 -1
- package/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js +0 -1
- package/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js +0 -1
- package/node_modules/@babel/types/lib/builders/generated/index.js +0 -1
- package/node_modules/@babel/types/lib/builders/generated/lowercase.js +0 -1
- package/node_modules/@babel/types/lib/builders/generated/uppercase.js +0 -1
- package/node_modules/@babel/types/lib/builders/productions.js +0 -1
- package/node_modules/@babel/types/lib/builders/react/buildChildren.js +0 -1
- package/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js +0 -1
- package/node_modules/@babel/types/lib/builders/validateNode.js +0 -1
- package/node_modules/@babel/types/lib/clone/clone.js +0 -1
- package/node_modules/@babel/types/lib/clone/cloneDeep.js +0 -1
- package/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js +0 -1
- package/node_modules/@babel/types/lib/clone/cloneNode.js +0 -1
- package/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js +0 -1
- package/node_modules/@babel/types/lib/comments/addComment.js +0 -1
- package/node_modules/@babel/types/lib/comments/addComments.js +0 -1
- package/node_modules/@babel/types/lib/comments/inheritInnerComments.js +0 -1
- package/node_modules/@babel/types/lib/comments/inheritLeadingComments.js +0 -1
- package/node_modules/@babel/types/lib/comments/inheritTrailingComments.js +0 -1
- package/node_modules/@babel/types/lib/comments/inheritsComments.js +0 -1
- package/node_modules/@babel/types/lib/comments/removeComments.js +0 -1
- package/node_modules/@babel/types/lib/constants/generated/index.js +0 -1
- package/node_modules/@babel/types/lib/constants/index.js +0 -1
- package/node_modules/@babel/types/lib/converters/ensureBlock.js +0 -1
- package/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js +0 -1
- package/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js +0 -1
- package/node_modules/@babel/types/lib/converters/toBlock.js +0 -1
- package/node_modules/@babel/types/lib/converters/toComputedKey.js +0 -1
- package/node_modules/@babel/types/lib/converters/toExpression.js +0 -1
- package/node_modules/@babel/types/lib/converters/toIdentifier.js +0 -1
- package/node_modules/@babel/types/lib/converters/toKeyAlias.js +0 -1
- package/node_modules/@babel/types/lib/converters/toSequenceExpression.js +0 -1
- package/node_modules/@babel/types/lib/converters/toStatement.js +0 -1
- package/node_modules/@babel/types/lib/converters/valueToNode.js +0 -1
- package/node_modules/@babel/types/lib/definitions/core.js +0 -1
- package/node_modules/@babel/types/lib/definitions/deprecated-aliases.js +0 -1
- package/node_modules/@babel/types/lib/definitions/experimental.js +0 -1
- package/node_modules/@babel/types/lib/definitions/flow.js +0 -1
- package/node_modules/@babel/types/lib/definitions/index.js +0 -1
- package/node_modules/@babel/types/lib/definitions/jsx.js +0 -1
- package/node_modules/@babel/types/lib/definitions/misc.js +0 -1
- package/node_modules/@babel/types/lib/definitions/placeholders.js +0 -1
- package/node_modules/@babel/types/lib/definitions/typescript.js +0 -1
- package/node_modules/@babel/types/lib/definitions/utils.js +0 -1
- package/node_modules/@babel/types/lib/index.js +0 -1
- package/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js +0 -1
- package/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js +0 -1
- package/node_modules/@babel/types/lib/modifications/inherits.js +0 -1
- package/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js +0 -1
- package/node_modules/@babel/types/lib/modifications/removeProperties.js +0 -1
- package/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js +0 -1
- package/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js +0 -1
- package/node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js +0 -1
- package/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js +0 -1
- package/node_modules/@babel/types/lib/retrievers/getFunctionName.js +0 -1
- package/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js +0 -1
- package/node_modules/@babel/types/lib/traverse/traverse.js +0 -1
- package/node_modules/@babel/types/lib/traverse/traverseFast.js +0 -1
- package/node_modules/@babel/types/lib/utils/deprecationWarning.js +0 -1
- package/node_modules/@babel/types/lib/utils/inherit.js +0 -1
- package/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js +0 -1
- package/node_modules/@babel/types/lib/utils/shallowEqual.js +0 -1
- package/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js +0 -1
- package/node_modules/@babel/types/lib/validators/generated/index.js +0 -1
- package/node_modules/@babel/types/lib/validators/is.js +0 -1
- package/node_modules/@babel/types/lib/validators/isBinding.js +0 -1
- package/node_modules/@babel/types/lib/validators/isBlockScoped.js +0 -1
- package/node_modules/@babel/types/lib/validators/isImmutable.js +0 -1
- package/node_modules/@babel/types/lib/validators/isLet.js +0 -1
- package/node_modules/@babel/types/lib/validators/isNode.js +0 -1
- package/node_modules/@babel/types/lib/validators/isNodesEquivalent.js +0 -1
- package/node_modules/@babel/types/lib/validators/isPlaceholderType.js +0 -1
- package/node_modules/@babel/types/lib/validators/isReferenced.js +0 -1
- package/node_modules/@babel/types/lib/validators/isScope.js +0 -1
- package/node_modules/@babel/types/lib/validators/isSpecifierDefault.js +0 -1
- package/node_modules/@babel/types/lib/validators/isType.js +0 -1
- package/node_modules/@babel/types/lib/validators/isValidES3Identifier.js +0 -1
- package/node_modules/@babel/types/lib/validators/isValidIdentifier.js +0 -1
- package/node_modules/@babel/types/lib/validators/isVar.js +0 -1
- package/node_modules/@babel/types/lib/validators/matchesPattern.js +0 -1
- package/node_modules/@babel/types/lib/validators/react/isCompatTag.js +0 -1
- package/node_modules/@babel/types/lib/validators/react/isReactComponent.js +0 -1
- package/node_modules/@babel/types/lib/validators/validate.js +0 -1
- package/node_modules/@babylonjs/loaders/BVH/bvhFileLoader.d.ts +69 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhFileLoader.js +132 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhFileLoader.metadata.d.ts +8 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhFileLoader.metadata.js +7 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhLoader.d.ts +14 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhLoader.js +328 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhLoadingOptions.d.ts +9 -0
- package/node_modules/@babylonjs/loaders/BVH/bvhLoadingOptions.js +1 -0
- package/node_modules/@babylonjs/loaders/BVH/index.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/BVH/index.js +3 -0
- package/node_modules/@babylonjs/loaders/OBJ/index.d.ts +4 -0
- package/node_modules/@babylonjs/loaders/OBJ/index.js +4 -0
- package/node_modules/@babylonjs/loaders/OBJ/mtlFileLoader.d.ts +41 -0
- package/node_modules/@babylonjs/loaders/OBJ/mtlFileLoader.js +230 -0
- package/node_modules/@babylonjs/loaders/OBJ/objFileLoader.d.ts +136 -0
- package/node_modules/@babylonjs/loaders/OBJ/objFileLoader.js +317 -0
- package/node_modules/@babylonjs/loaders/OBJ/objFileLoader.metadata.d.ts +4 -0
- package/node_modules/@babylonjs/loaders/OBJ/objFileLoader.metadata.js +4 -0
- package/node_modules/@babylonjs/loaders/OBJ/objLoadingOptions.d.ts +47 -0
- package/node_modules/@babylonjs/loaders/OBJ/objLoadingOptions.js +1 -0
- package/node_modules/@babylonjs/loaders/OBJ/solidParser.d.ts +175 -0
- package/node_modules/@babylonjs/loaders/OBJ/solidParser.js +903 -0
- package/node_modules/@babylonjs/loaders/SPLAT/index.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/SPLAT/index.js +3 -0
- package/node_modules/@babylonjs/loaders/SPLAT/sog.d.ts +84 -0
- package/node_modules/@babylonjs/loaders/SPLAT/sog.js +294 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatDefs.d.ts +26 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatDefs.js +10 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatFileLoader.d.ts +100 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatFileLoader.js +536 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatFileLoader.metadata.d.ts +20 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatFileLoader.metadata.js +15 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatLoadingOptions.d.ts +33 -0
- package/node_modules/@babylonjs/loaders/SPLAT/splatLoadingOptions.js +1 -0
- package/node_modules/@babylonjs/loaders/SPLAT/spz.d.ts +11 -0
- package/node_modules/@babylonjs/loaders/SPLAT/spz.js +168 -0
- package/node_modules/@babylonjs/loaders/STL/index.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/STL/index.js +1 -0
- package/node_modules/@babylonjs/loaders/STL/stlFileLoader.d.ts +78 -0
- package/node_modules/@babylonjs/loaders/STL/stlFileLoader.js +238 -0
- package/node_modules/@babylonjs/loaders/STL/stlFileLoader.metadata.d.ts +8 -0
- package/node_modules/@babylonjs/loaders/STL/stlFileLoader.metadata.js +7 -0
- package/node_modules/@babylonjs/loaders/bvh/license.md +21 -0
- package/node_modules/@babylonjs/loaders/dynamic.d.ts +5 -0
- package/node_modules/@babylonjs/loaders/dynamic.js +56 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFBinaryExtension.d.ts +16 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFBinaryExtension.js +64 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoader.d.ts +144 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoader.js +1841 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoaderInterfaces.d.ts +412 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoaderInterfaces.js +95 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoaderUtils.d.ts +71 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFLoaderUtils.js +254 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFMaterialsCommonExtension.d.ts +13 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/glTFMaterialsCommonExtension.js +130 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/index.d.ts +5 -0
- package/node_modules/@babylonjs/loaders/glTF/1.0/index.js +5 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_area.d.ts +41 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_area.js +93 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_ies.d.ts +41 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_ies.js +83 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_image_based.d.ts +48 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_lights_image_based.js +115 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.d.ts +39 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_mesh_gpu_instancing.js +94 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_meshopt_compression.d.ts +39 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_meshopt_compression.js +50 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_texture_avif.d.ts +34 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_texture_avif.js +38 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_texture_webp.d.ts +33 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/EXT_texture_webp.js +37 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/ExtrasAsMetadata.d.ts +53 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/ExtrasAsMetadata.js +73 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_animation_pointer.d.ts +47 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_animation_pointer.data.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_animation_pointer.data.js +251 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_animation_pointer.js +77 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_draco_mesh_compression.d.ts +47 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_draco_mesh_compression.js +92 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.d.ts +355 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +1678 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.d.ts +33 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/flowGraphGLTFDataProvider.js +19 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/index.d.ts +3 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/index.js +3 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.d.ts +70 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphParser.js +438 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity.d.ts +38 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_interactivity.js +150 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_lights_punctual.d.ts +41 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_lights_punctual.js +91 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_anisotropy.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_anisotropy.js +65 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_clearcoat.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_clearcoat.js +79 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_coat.d.ts +49 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_coat.js +119 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_diffuse_roughness.js +58 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_diffuse_transmission.js +69 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_dispersion.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_dispersion.js +56 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_emissive_strength.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_emissive_strength.js +47 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_fuzz.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_fuzz.js +77 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_ior.d.ts +46 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_ior.js +54 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_iridescence.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_iridescence.js +68 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_pbrSpecularGlossiness.js +80 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_sheen.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_sheen.js +73 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_specular.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_specular.js +76 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_transmission.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_transmission.js +303 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_unlit.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_unlit.js +66 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_variants.d.ts +112 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_variants.js +262 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_volume.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_volume.js +82 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_volume_scatter.d.ts +45 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_materials_volume_scatter.js +109 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_mesh_quantization.d.ts +29 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_mesh_quantization.js +22 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_hoverability.d.ts +31 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_hoverability.js +189 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_selectability.d.ts +30 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_selectability.js +123 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_visibility.d.ts +30 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_node_visibility.js +66 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_basisu.d.ts +33 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_basisu.js +37 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_transform.d.ts +37 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_texture_transform.js +58 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_xmp_json_ld.d.ts +39 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/KHR_xmp_json_ld.js +47 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_audio_emitter.d.ts +56 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_audio_emitter.js +228 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_lod.d.ts +104 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_lod.js +337 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_minecraftMesh.d.ts +27 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_minecraftMesh.js +39 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_sRGBFactors.d.ts +27 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/MSFT_sRGBFactors.js +38 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/dynamic.d.ts +4 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/dynamic.js +212 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/gltfPathToObjectConverter.d.ts +45 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/gltfPathToObjectConverter.js +100 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/index.d.ts +43 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/index.js +44 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/objectModelMapping.d.ts +306 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/Extensions/objectModelMapping.js +884 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoader.d.ts +450 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoader.js +2485 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderAnimation.d.ts +42 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderAnimation.js +79 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderExtension.d.ts +165 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderExtension.js +1 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderExtensionRegistry.d.ts +25 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderExtensionRegistry.js +32 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderInterfaces.d.ts +262 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/glTFLoaderInterfaces.js +1 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/index.d.ts +8 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/index.js +9 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/materialLoadingAdapter.d.ts +364 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/materialLoadingAdapter.js +1 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/openpbrMaterialLoadingAdapter.d.ts +674 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/openpbrMaterialLoadingAdapter.js +1034 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/pbrMaterialLoadingAdapter.d.ts +705 -0
- package/node_modules/@babylonjs/loaders/glTF/2.0/pbrMaterialLoadingAdapter.js +1126 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFFileLoader.d.ts +553 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFFileLoader.js +998 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFFileLoader.metadata.d.ts +15 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFFileLoader.metadata.js +17 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFValidation.d.ts +35 -0
- package/node_modules/@babylonjs/loaders/glTF/glTFValidation.js +131 -0
- package/node_modules/@babylonjs/loaders/glTF/index.d.ts +5 -0
- package/node_modules/@babylonjs/loaders/glTF/index.js +6 -0
- package/node_modules/@babylonjs/loaders/index.d.ts +6 -0
- package/node_modules/@babylonjs/loaders/index.js +7 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-bvhFileLoader.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-bvhFileLoader.js +15 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-dynamic.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-dynamic.js +13 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF.js +18 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF1.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF1.js +15 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF1FileLoader.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF1FileLoader.js +3 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF2.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF2.js +34 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF2FileLoader.d.ts +2 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTF2FileLoader.js +3 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTFFileLoader.d.ts +3 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-glTFFileLoader.js +4 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-objFileLoader.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-objFileLoader.js +15 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-stlFileLoader.d.ts +1 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy-stlFileLoader.js +15 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy.d.ts +8 -0
- package/node_modules/@babylonjs/loaders/legacy/legacy.js +10 -0
- package/node_modules/@babylonjs/loaders/license.md +71 -0
- package/node_modules/@babylonjs/loaders/package.json +49 -0
- package/node_modules/@babylonjs/loaders/readme.md +23 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts +22 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.d.ts.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js +187 -0
- package/node_modules/@fps-games/babylon-renderer/dist/game-world-plugin-lifecycle.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/index.d.ts +3 -0
- package/node_modules/@fps-games/babylon-renderer/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/index.js +3 -0
- package/node_modules/@fps-games/babylon-renderer/dist/index.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/material-owner-candidates.d.ts +19 -0
- package/node_modules/@fps-games/babylon-renderer/dist/material-owner-candidates.d.ts.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/material-owner-candidates.js +212 -0
- package/node_modules/@fps-games/babylon-renderer/dist/material-owner-candidates.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts +17 -2
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js +192 -17
- package/node_modules/@fps-games/babylon-renderer/dist/plugin.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +2 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js +139 -3
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/types.d.ts +4 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/types.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/types.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/dynamic-shadow-system.d.ts +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/dynamic-shadow-system.d.ts.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/dynamic-shadow-system.js +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/dynamic-shadow-system.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-generator-shaders.d.ts +14 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-generator-shaders.d.ts.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-generator-shaders.js +14 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-generator-shaders.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-depth-backend.d.ts +59 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-depth-backend.d.ts.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-depth-backend.js +725 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-depth-backend.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-system.d.ts +136 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-system.d.ts.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-system.js +2735 -0
- package/node_modules/@fps-games/babylon-renderer/dist/shadows/shadow-map-experiment-system.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
- package/node_modules/@fps-games/editor-babylon/dist/camera-controller.js +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/camera-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/index.d.ts +2 -1
- package/node_modules/@fps-games/editor-babylon/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/index.js +2 -1
- package/node_modules/@fps-games/editor-babylon/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.d.ts +2 -0
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.js +59 -6
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.js +81 -11
- package/node_modules/@fps-games/editor-babylon/dist/material-slot-source-resolver.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js +2 -8
- package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +17 -5
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +300 -362
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts +4 -0
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js +76 -10
- package/node_modules/@fps-games/editor-babylon/dist/scene-view-camera-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-identity-pass.d.ts +46 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-identity-pass.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-identity-pass.js +304 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-identity-pass.js.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +85 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +1600 -0
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts +11 -3
- package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js +105 -15
- package/node_modules/@fps-games/editor-babylon/dist/shadow-preview-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/viewport-ground-projection.d.ts +25 -0
- package/node_modules/@fps-games/editor-babylon/dist/viewport-ground-projection.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/viewport-ground-projection.js +44 -0
- package/node_modules/@fps-games/editor-babylon/dist/viewport-ground-projection.js.map +1 -0
- package/node_modules/@fps-games/editor-babylon/package.json +6 -5
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +8 -9
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +6 -7
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-clipboard.d.ts +2 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-clipboard.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-clipboard.js +36 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-clipboard.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-groups.d.ts +2 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-groups.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-groups.js +17 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-inspector-groups.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts +1 -1
- 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 +6 -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-context-menu.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js +157 -77
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-context-menu.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-dock-panel.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-dock-panel.js +27 -21
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-dock-panel.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +19 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +44 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +36 -5
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js +831 -702
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-drag-policy.d.ts +8 -7
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-drag-policy.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-drag-policy.js +1 -7
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-drag-policy.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view-adapter.d.ts +7 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view-adapter.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view-adapter.js +20 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view-adapter.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts +6 -7
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js +266 -114
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-view.js.map +1 -1
- 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 +11 -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-input-router.d.ts +3 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js +58 -25
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-input-router.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-modal-dialog.d.ts +14 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-modal-dialog.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-modal-dialog.js +44 -62
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-modal-dialog.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +10 -7
- 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 +591 -639
- 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 +8 -36
- 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 +25 -103
- 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-primitives.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js +29 -110
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-primitives.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.d.ts +1 -3
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.js +6 -90
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shared.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shortcuts.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shortcuts.js +9 -54
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-shortcuts.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts +39 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js +74 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-diagnostics.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-format.d.ts +4 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-format.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-format.js +44 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-status-format.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-policy.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-policy.js +35 -44
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-structured-drag-policy.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-theme.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-theme.js +40 -24
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-theme.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-tooltip.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-tooltip.js +2 -20
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-tooltip.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +56 -301
- 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 +4 -14
- 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 +33 -119
- 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 +5 -10
- 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 +760 -524
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/plugin-contributions.d.ts +2 -3
- package/node_modules/@fps-games/editor-browser/dist/plugin-contributions.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/plugin-contributions.js +0 -180
- package/node_modules/@fps-games/editor-browser/dist/plugin-contributions.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/runtime-debug.d.ts +5 -0
- package/node_modules/@fps-games/editor-browser/dist/runtime-debug.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/runtime-debug.js +5 -0
- package/node_modules/@fps-games/editor-browser/dist/runtime-debug.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/package.json +15 -4
- package/node_modules/@fps-games/editor-core/dist/editor-diagnostic-store.d.ts +22 -0
- package/node_modules/@fps-games/editor-core/dist/editor-diagnostic-store.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-diagnostic-store.js +226 -0
- package/node_modules/@fps-games/editor-core/dist/editor-diagnostic-store.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -1
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js +94 -2
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +26 -1
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-session.js +77 -8
- package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +112 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js +613 -0
- package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/inspector.d.ts +46 -0
- package/node_modules/@fps-games/editor-core/dist/inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/inspector.js +62 -0
- package/node_modules/@fps-games/editor-core/dist/inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/scene-graph.d.ts +1 -0
- package/node_modules/@fps-games/editor-core/dist/scene-graph.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/scene-graph.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +14 -6
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js +14 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/metadata.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/node.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts +14 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js +49 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-database/registry.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +58 -2
- 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/document.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.js +48 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/document.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts +28 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js +314 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/index.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/index.js +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-instance-identity.d.ts +11 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-instance-identity.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-instance-identity.js +27 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-instance-identity.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-marker.d.ts +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-marker.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-marker.js +285 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/prefab-marker.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts +7 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +3 -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 +6 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js +23 -81
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-manifest.d.ts +41 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-manifest.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-manifest.js +93 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-manifest.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-module.d.ts +29 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-module.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-module.js +77 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-module.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-performance.d.ts +51 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-performance.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-performance.js +105 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry-performance.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry.d.ts +60 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry.js +287 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/editor-entry.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +6 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js +53 -17
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts +16 -8
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js +10 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/host-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts +5 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js +134 -66
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/lifecycle.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.d.ts +11 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.js +21 -14
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/project-asset-commands.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts +17 -9
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js +20 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js +49 -10
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/package-resolution/aliases.d.ts +2 -2
- 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 +18 -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/prefab-stage/action-patches.d.ts +7 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/action-patches.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/action-patches.js +130 -20
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/action-patches.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/assets.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/assets.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/assets.js +12 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/assets.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/derived-markers.d.ts +11 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/derived-markers.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/derived-markers.js +136 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/derived-markers.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/projection.d.ts +36 -51
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/projection.js +40 -65
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +5 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js +207 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js +3 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts +18 -7
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js +110 -18
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/project-host-services.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +5 -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 +6 -0
- 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/product/standard-scene-assembly.d.ts +5 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js +22 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-scene-assembly.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/rendering-profile/panel.js +144 -0
- 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 +16 -0
- 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/nodes.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js +241 -13
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/compiler.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/shadow-map-experiment-migration.d.ts +31 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/shadow-map-experiment-migration.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/shadow-map-experiment-migration.js +170 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/shadow-map-experiment-migration.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts +153 -13
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/validation.d.ts +17 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/validation.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/validation.js +1295 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-compiler/validation.js.map +1 -1
- 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 +14 -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/scene-source/driver.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/driver.js +57 -34
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/driver.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js +4 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/protocol.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts +4 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js +20 -198
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy-facade.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy-facade.js +5 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy-facade.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.d.ts +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.js +144 -8
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/reducer-core.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/reducer-core.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/reducer-core.js +30 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/reducer-core.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/types.d.ts +6 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/upgrade-doctor/inspectors.js +31 -3
- 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/vite/editor-scene-workflow.d.ts +5 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +40 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +116 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-adapter.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.d.ts +17 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.js +50 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-asset-authoring.js.map +1 -1
- 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 +7 -5
- 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/product-scene-authoring.d.ts +5 -6
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.js +31 -17
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-scene-authoring.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +6 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +417 -2
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js +692 -2
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/editor-diagnostics.d.ts +55 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-diagnostics.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-diagnostics.js +2 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-diagnostics.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +3 -18
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/index.js +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-protocol/package.json +2 -2
- package/node_modules/@fps-games/editor-tooling/dist/package-metadata-node.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-tooling/dist/package-metadata-node.js +5 -0
- package/node_modules/@fps-games/editor-tooling/dist/package-metadata-node.js.map +1 -1
- package/node_modules/@fps-games/editor-tooling/dist/vite.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-tooling/dist/vite.js +151 -5
- package/node_modules/@fps-games/editor-tooling/dist/vite.js.map +1 -1
- package/node_modules/@fps-games/editor-tooling/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-controls.d.ts +107 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-controls.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-controls.js +770 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-controls.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-layer-host.d.ts +21 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-layer-host.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-layer-host.js +172 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-layer-host.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-shell.d.ts +14 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-shell.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-shell.js +32 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-shell.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts +3 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +653 -0
- package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/gallery.d.ts +3 -0
- package/node_modules/@fps-games/editor-ui/dist/gallery.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/gallery.js +3 -0
- package/node_modules/@fps-games/editor-ui/dist/gallery.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/index.d.ts +5 -0
- package/node_modules/@fps-games/editor-ui/dist/index.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/index.js +5 -0
- package/node_modules/@fps-games/editor-ui/dist/index.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-model.d.ts +7 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-model.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-model.js +29 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-model.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-styles.d.ts +2 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-styles.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-styles.js +95 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery-styles.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery.d.ts +28 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery.js +387 -0
- package/node_modules/@fps-games/editor-ui/dist/inspector-property-gallery.js.map +1 -0
- package/node_modules/@fps-games/editor-ui/package.json +23 -0
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/dist/index.d.ts +1 -0
- package/node_modules/@fps-games/playable-contracts/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-contracts/dist/index.js +1 -0
- package/node_modules/@fps-games/playable-contracts/dist/index.js.map +1 -1
- package/node_modules/@fps-games/playable-contracts/dist/material-owner.d.ts +116 -0
- package/node_modules/@fps-games/playable-contracts/dist/material-owner.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-contracts/dist/material-owner.js +403 -0
- package/node_modules/@fps-games/playable-contracts/dist/material-owner.js.map +1 -0
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/index.d.ts +3 -0
- package/node_modules/@fps-games/playable-rendering/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/index.js +3 -0
- package/node_modules/@fps-games/playable-rendering/dist/index.js.map +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-validation.js +5 -25
- package/node_modules/@fps-games/playable-rendering/dist/rendering-profile-validation.js.map +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/runtime.d.ts +3 -0
- package/node_modules/@fps-games/playable-rendering/dist/runtime.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/runtime.js +3 -0
- package/node_modules/@fps-games/playable-rendering/dist/runtime.js.map +1 -1
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-depth.d.ts +61 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-depth.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-depth.js +176 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-depth.js.map +1 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-lifecycle.d.ts +84 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-lifecycle.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-lifecycle.js +362 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment-lifecycle.js.map +1 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment.d.ts +167 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment.d.ts.map +1 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment.js +484 -0
- package/node_modules/@fps-games/playable-rendering/dist/shadow-map-experiment.js.map +1 -0
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/dist/compiled-scene-data.d.ts +5 -0
- package/node_modules/@fps-games/playable-runtime/dist/compiled-scene-data.d.ts.map +1 -1
- package/node_modules/@fps-games/playable-runtime/dist/compiled-scene-data.js +1 -0
- package/node_modules/@fps-games/playable-runtime/dist/compiled-scene-data.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/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 +5 -5
- package/node_modules/@fps-games/plugin-hierarchy/dist/editor.d.ts +6 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/editor.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/editor.js +16 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/editor.js.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/integration.d.ts +7 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/integration.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/integration.js +47 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/integration.js.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +306 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +1237 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/reference.d.ts +8 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/reference.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/reference.js +32 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/reference.js.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +2 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +2 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/package.json +57 -0
- 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/reference.d.ts +8 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/reference.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/reference.js +35 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/reference.js.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/runtime.d.ts +11 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/runtime.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/runtime.js +14 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/runtime.js.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +2 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +2 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -0
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +53 -0
- 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/node_modules/@playcanvas/observer/LICENSE +19 -0
- package/node_modules/@playcanvas/observer/README.md +72 -0
- package/node_modules/@playcanvas/observer/dist/index.cjs +2033 -0
- package/node_modules/@playcanvas/observer/dist/index.js +2039 -0
- package/node_modules/@playcanvas/observer/dist/index.mjs +2026 -0
- package/node_modules/@playcanvas/observer/package.json +78 -0
- package/node_modules/@playcanvas/observer/types/event-handle.d.ts +41 -0
- package/node_modules/@playcanvas/observer/types/events.d.ts +162 -0
- package/node_modules/@playcanvas/observer/types/history.d.ts +123 -0
- package/node_modules/@playcanvas/observer/types/index.d.ts +15 -0
- package/node_modules/@playcanvas/observer/types/observer-history.d.ts +32 -0
- package/node_modules/@playcanvas/observer/types/observer-list.d.ts +39 -0
- package/node_modules/@playcanvas/observer/types/observer.d.ts +157 -0
- package/node_modules/@playcanvas/observer/types/utils.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/LICENSE +19 -0
- package/node_modules/@playcanvas/pcui/README.md +164 -0
- package/node_modules/@playcanvas/pcui/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/constants.mjs +6 -0
- package/node_modules/@playcanvas/pcui/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve-evaluator.mjs +119 -0
- package/node_modules/@playcanvas/pcui/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve-set.mjs +82 -0
- package/node_modules/@playcanvas/pcui/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve.mjs +92 -0
- package/node_modules/@playcanvas/pcui/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/math.mjs +105 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/Math/color-value.mjs +77 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/binding/BindingBase/index.mjs +215 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/binding/BindingElementToObservers/index.mjs +297 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/binding/BindingObserversToElement/index.mjs +110 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/binding/BindingTwoWay/index.mjs +113 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/class.mjs +19 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/ArrayInput/index.mjs +498 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/BooleanInput/index.mjs +122 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Button/index.mjs +119 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Canvas/index.mjs +104 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Code/index.mjs +43 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/ColorPicker/index.mjs +619 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Container/index.mjs +642 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Divider/index.mjs +20 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Element/index.mjs +829 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/GradientPicker/index.mjs +1136 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/GridView/index.mjs +448 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/GridViewItem/index.mjs +152 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/InfoBox/index.mjs +90 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/InputElement/index.mjs +186 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Label/index.mjs +124 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/LabelGroup/index.mjs +74 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Menu/index.mjs +174 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/MenuItem/index.mjs +223 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/NumericInput/index.mjs +400 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Overlay/index.mjs +108 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Panel/index.mjs +400 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Progress/index.mjs +45 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/RadioButton/index.mjs +113 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/SelectInput/index.mjs +1085 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/SliderInput/index.mjs +333 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/Spinner/index.mjs +34 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/TextAreaInput/index.mjs +50 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/TextInput/index.mjs +98 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/TreeView/index.mjs +1131 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/TreeViewItem/index.mjs +500 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/components/VectorInput/index.mjs +366 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/helpers/search.mjs +194 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/helpers/utils.mjs +43 -0
- package/node_modules/@playcanvas/pcui/dist/module/src/index.mjs +56 -0
- package/node_modules/@playcanvas/pcui/dist/pcui-theme-green.scss +2798 -0
- package/node_modules/@playcanvas/pcui/dist/pcui-theme-grey.scss +2798 -0
- package/node_modules/@playcanvas/pcui/package.json +150 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/constants.mjs +6 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve-evaluator.mjs +119 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve-set.mjs +82 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/curve.mjs +92 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/node_modules/playcanvas/build/playcanvas/src/core/math/math.mjs +105 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/Math/color-value.mjs +77 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/binding/BindingBase/index.mjs +215 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/binding/BindingElementToObservers/index.mjs +297 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/binding/BindingObserversToElement/index.mjs +110 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/binding/BindingTwoWay/index.mjs +113 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/class.mjs +19 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/ArrayInput/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/ArrayInput/index.mjs +498 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/BooleanInput/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/BooleanInput/index.mjs +122 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Button/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Button/index.mjs +119 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Canvas/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Canvas/index.mjs +104 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Code/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Code/index.mjs +43 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/ColorPicker/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/ColorPicker/index.mjs +619 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Container/component.mjs +36 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Container/index.mjs +642 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Divider/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Divider/index.mjs +20 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Element/component.mjs +107 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Element/index.mjs +829 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GradientPicker/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GradientPicker/index.mjs +1136 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GridView/component.mjs +38 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GridView/index.mjs +448 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GridViewItem/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/GridViewItem/index.mjs +152 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/InfoBox/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/InfoBox/index.mjs +90 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/InputElement/index.mjs +186 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Label/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Label/index.mjs +124 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/LabelGroup/component.mjs +42 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/LabelGroup/index.mjs +74 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Menu/component.mjs +23 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Menu/index.mjs +174 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/MenuItem/index.mjs +223 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/NumericInput/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/NumericInput/index.mjs +400 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Overlay/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Overlay/index.mjs +108 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Panel/component.mjs +32 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Panel/index.mjs +400 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Progress/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Progress/index.mjs +45 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/RadioButton/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/RadioButton/index.mjs +113 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/SelectInput/component.mjs +21 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/SelectInput/index.mjs +1085 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/SliderInput/component.mjs +12 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/SliderInput/index.mjs +333 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Spinner/component.mjs +16 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/Spinner/index.mjs +34 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TextAreaInput/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TextAreaInput/index.mjs +50 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TextInput/component.mjs +23 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TextInput/index.mjs +98 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TreeView/component.mjs +52 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TreeView/index.mjs +1131 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TreeViewItem/component.mjs +33 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/TreeViewItem/index.mjs +500 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/VectorInput/component.mjs +11 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/components/VectorInput/index.mjs +366 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/helpers/search.mjs +194 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/helpers/utils.mjs +43 -0
- package/node_modules/@playcanvas/pcui/react/dist/module/src/index.mjs +39 -0
- package/node_modules/@playcanvas/pcui/react/package.json +18 -0
- package/node_modules/@playcanvas/pcui/react/types/Math/color-value.d.ts +3 -0
- package/node_modules/@playcanvas/pcui/react/types/binding/BindingBase/index.d.ts +178 -0
- package/node_modules/@playcanvas/pcui/react/types/binding/BindingElementToObservers/index.d.ts +24 -0
- package/node_modules/@playcanvas/pcui/react/types/binding/BindingObserversToElement/index.d.ts +40 -0
- package/node_modules/@playcanvas/pcui/react/types/binding/BindingTwoWay/index.d.ts +54 -0
- package/node_modules/@playcanvas/pcui/react/types/binding/index.d.ts +5 -0
- package/node_modules/@playcanvas/pcui/react/types/class.d.ts +17 -0
- package/node_modules/@playcanvas/pcui/react/types/components/ArrayInput/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/ArrayInput/index.d.ts +140 -0
- package/node_modules/@playcanvas/pcui/react/types/components/BooleanInput/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/BooleanInput/index.d.ts +41 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Button/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Button/index.d.ts +75 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Canvas/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Canvas/index.d.ts +61 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Code/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Code/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/react/types/components/ColorPicker/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/ColorPicker/index.d.ts +99 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Container/component.d.ts +15 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Container/index.d.ts +292 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Divider/component.d.ts +10 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Divider/index.d.ts +13 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Element/component.d.ts +23 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Element/index.d.ts +671 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GradientPicker/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GradientPicker/index.d.ts +152 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GridView/component.d.ts +14 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GridView/index.d.ts +103 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GridViewItem/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/GridViewItem/index.d.ts +82 -0
- package/node_modules/@playcanvas/pcui/react/types/components/InfoBox/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/InfoBox/index.d.ts +71 -0
- package/node_modules/@playcanvas/pcui/react/types/components/InputElement/index.d.ts +84 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Label/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Label/index.d.ts +85 -0
- package/node_modules/@playcanvas/pcui/react/types/components/LabelGroup/component.d.ts +10 -0
- package/node_modules/@playcanvas/pcui/react/types/components/LabelGroup/index.d.ts +62 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Menu/component.d.ts +14 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Menu/index.d.ts +70 -0
- package/node_modules/@playcanvas/pcui/react/types/components/MenuItem/index.d.ts +139 -0
- package/node_modules/@playcanvas/pcui/react/types/components/NumericInput/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/NumericInput/index.d.ts +173 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Overlay/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Overlay/index.d.ts +53 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Panel/component.d.ts +16 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Panel/index.d.ts +178 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Progress/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Progress/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/react/types/components/RadioButton/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/RadioButton/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/react/types/components/SelectInput/component.d.ts +12 -0
- package/node_modules/@playcanvas/pcui/react/types/components/SelectInput/index.d.ts +278 -0
- package/node_modules/@playcanvas/pcui/react/types/components/SliderInput/component.d.ts +10 -0
- package/node_modules/@playcanvas/pcui/react/types/components/SliderInput/index.d.ts +133 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Spinner/component.d.ts +11 -0
- package/node_modules/@playcanvas/pcui/react/types/components/Spinner/index.d.ts +27 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TextAreaInput/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TextAreaInput/index.d.ts +24 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TextInput/component.d.ts +12 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TextInput/index.d.ts +40 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TreeView/component.d.ts +17 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TreeView/index.d.ts +359 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TreeViewItem/component.d.ts +13 -0
- package/node_modules/@playcanvas/pcui/react/types/components/TreeViewItem/index.d.ts +224 -0
- package/node_modules/@playcanvas/pcui/react/types/components/VectorInput/component.d.ts +9 -0
- package/node_modules/@playcanvas/pcui/react/types/components/VectorInput/index.d.ts +176 -0
- package/node_modules/@playcanvas/pcui/react/types/components/components.d.ts +30 -0
- package/node_modules/@playcanvas/pcui/react/types/components/index.d.ts +32 -0
- package/node_modules/@playcanvas/pcui/react/types/helpers/search.d.ts +31 -0
- package/node_modules/@playcanvas/pcui/react/types/helpers/utils.d.ts +2 -0
- package/node_modules/@playcanvas/pcui/react/types/index.d.ts +4 -0
- package/node_modules/@playcanvas/pcui/styles/dist/index.mjs +11 -0
- package/node_modules/@playcanvas/pcui/styles/package.json +17 -0
- package/node_modules/@playcanvas/pcui/types/Math/color-value.d.ts +3 -0
- package/node_modules/@playcanvas/pcui/types/binding/BindingBase/index.d.ts +178 -0
- package/node_modules/@playcanvas/pcui/types/binding/BindingElementToObservers/index.d.ts +24 -0
- package/node_modules/@playcanvas/pcui/types/binding/BindingObserversToElement/index.d.ts +40 -0
- package/node_modules/@playcanvas/pcui/types/binding/BindingTwoWay/index.d.ts +54 -0
- package/node_modules/@playcanvas/pcui/types/binding/index.d.ts +5 -0
- package/node_modules/@playcanvas/pcui/types/class.d.ts +17 -0
- package/node_modules/@playcanvas/pcui/types/components/ArrayInput/index.d.ts +140 -0
- package/node_modules/@playcanvas/pcui/types/components/BooleanInput/index.d.ts +41 -0
- package/node_modules/@playcanvas/pcui/types/components/Button/index.d.ts +75 -0
- package/node_modules/@playcanvas/pcui/types/components/Canvas/index.d.ts +61 -0
- package/node_modules/@playcanvas/pcui/types/components/Code/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/types/components/ColorPicker/index.d.ts +99 -0
- package/node_modules/@playcanvas/pcui/types/components/Container/index.d.ts +292 -0
- package/node_modules/@playcanvas/pcui/types/components/Divider/index.d.ts +13 -0
- package/node_modules/@playcanvas/pcui/types/components/Element/index.d.ts +671 -0
- package/node_modules/@playcanvas/pcui/types/components/GradientPicker/index.d.ts +152 -0
- package/node_modules/@playcanvas/pcui/types/components/GridView/index.d.ts +103 -0
- package/node_modules/@playcanvas/pcui/types/components/GridViewItem/index.d.ts +82 -0
- package/node_modules/@playcanvas/pcui/types/components/InfoBox/index.d.ts +71 -0
- package/node_modules/@playcanvas/pcui/types/components/InputElement/index.d.ts +84 -0
- package/node_modules/@playcanvas/pcui/types/components/Label/index.d.ts +85 -0
- package/node_modules/@playcanvas/pcui/types/components/LabelGroup/index.d.ts +62 -0
- package/node_modules/@playcanvas/pcui/types/components/Menu/index.d.ts +70 -0
- package/node_modules/@playcanvas/pcui/types/components/MenuItem/index.d.ts +139 -0
- package/node_modules/@playcanvas/pcui/types/components/NumericInput/index.d.ts +173 -0
- package/node_modules/@playcanvas/pcui/types/components/Overlay/index.d.ts +53 -0
- package/node_modules/@playcanvas/pcui/types/components/Panel/index.d.ts +178 -0
- package/node_modules/@playcanvas/pcui/types/components/Progress/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/types/components/RadioButton/index.d.ts +33 -0
- package/node_modules/@playcanvas/pcui/types/components/SelectInput/index.d.ts +278 -0
- package/node_modules/@playcanvas/pcui/types/components/SliderInput/index.d.ts +133 -0
- package/node_modules/@playcanvas/pcui/types/components/Spinner/index.d.ts +27 -0
- package/node_modules/@playcanvas/pcui/types/components/TextAreaInput/index.d.ts +24 -0
- package/node_modules/@playcanvas/pcui/types/components/TextInput/index.d.ts +40 -0
- package/node_modules/@playcanvas/pcui/types/components/TreeView/index.d.ts +359 -0
- package/node_modules/@playcanvas/pcui/types/components/TreeViewItem/index.d.ts +224 -0
- package/node_modules/@playcanvas/pcui/types/components/VectorInput/index.d.ts +176 -0
- package/node_modules/@playcanvas/pcui/types/components/index.d.ts +32 -0
- package/node_modules/@playcanvas/pcui/types/helpers/search.d.ts +31 -0
- package/node_modules/@playcanvas/pcui/types/helpers/utils.d.ts +2 -0
- package/node_modules/@playcanvas/pcui/types/index.d.ts +20 -0
- package/node_modules/babylonjs-gltf2interface/babylon.glTF2Interface.d.ts +1655 -0
- package/node_modules/babylonjs-gltf2interface/license.md +71 -0
- package/node_modules/babylonjs-gltf2interface/package.json +26 -0
- package/package.json +31 -19
- package/dist/editor-plugin-hierarchy-command.d.ts +0 -19
- package/dist/editor-plugin-hierarchy-command.d.ts.map +0 -1
- package/dist/editor-plugin-hierarchy-command.js +0 -119
- package/dist/editor-plugin-hierarchy-command.js.map +0 -1
- package/node_modules/@babel/helper-string-parser/lib/index.js.map +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/identifier.js.map +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/index.js.map +0 -1
- package/node_modules/@babel/helper-validator-identifier/lib/keyword.js.map +0 -1
- package/node_modules/@babel/parser/lib/index.js.map +0 -1
- package/node_modules/@babel/types/lib/asserts/assertNode.js.map +0 -1
- package/node_modules/@babel/types/lib/asserts/generated/index.js.map +0 -1
- package/node_modules/@babel/types/lib/ast-types/generated/index.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/flow/createFlowUnionType.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/flow/createTypeAnnotationBasedOnTypeof.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/generated/index.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/generated/lowercase.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/generated/uppercase.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/productions.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/react/buildChildren.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/typescript/createTSUnionType.js.map +0 -1
- package/node_modules/@babel/types/lib/builders/validateNode.js.map +0 -1
- package/node_modules/@babel/types/lib/clone/clone.js.map +0 -1
- package/node_modules/@babel/types/lib/clone/cloneDeep.js.map +0 -1
- package/node_modules/@babel/types/lib/clone/cloneDeepWithoutLoc.js.map +0 -1
- package/node_modules/@babel/types/lib/clone/cloneNode.js.map +0 -1
- package/node_modules/@babel/types/lib/clone/cloneWithoutLoc.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/addComment.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/addComments.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/inheritInnerComments.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/inheritLeadingComments.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/inheritTrailingComments.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/inheritsComments.js.map +0 -1
- package/node_modules/@babel/types/lib/comments/removeComments.js.map +0 -1
- package/node_modules/@babel/types/lib/constants/generated/index.js.map +0 -1
- package/node_modules/@babel/types/lib/constants/index.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/ensureBlock.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/gatherSequenceExpressions.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toBindingIdentifierName.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toBlock.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toComputedKey.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toExpression.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toIdentifier.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toKeyAlias.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toSequenceExpression.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/toStatement.js.map +0 -1
- package/node_modules/@babel/types/lib/converters/valueToNode.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/core.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/deprecated-aliases.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/experimental.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/flow.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/index.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/jsx.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/misc.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/placeholders.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/typescript.js.map +0 -1
- package/node_modules/@babel/types/lib/definitions/utils.js.map +0 -1
- package/node_modules/@babel/types/lib/index.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/appendToMemberExpression.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/flow/removeTypeDuplicates.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/inherits.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/prependToMemberExpression.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/removeProperties.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/removePropertiesDeep.js.map +0 -1
- package/node_modules/@babel/types/lib/modifications/typescript/removeTypeDuplicates.js.map +0 -1
- package/node_modules/@babel/types/lib/retrievers/getAssignmentIdentifiers.js.map +0 -1
- package/node_modules/@babel/types/lib/retrievers/getBindingIdentifiers.js.map +0 -1
- package/node_modules/@babel/types/lib/retrievers/getFunctionName.js.map +0 -1
- package/node_modules/@babel/types/lib/retrievers/getOuterBindingIdentifiers.js.map +0 -1
- package/node_modules/@babel/types/lib/traverse/traverse.js.map +0 -1
- package/node_modules/@babel/types/lib/traverse/traverseFast.js.map +0 -1
- package/node_modules/@babel/types/lib/utils/deprecationWarning.js.map +0 -1
- package/node_modules/@babel/types/lib/utils/inherit.js.map +0 -1
- package/node_modules/@babel/types/lib/utils/react/cleanJSXElementLiteralChild.js.map +0 -1
- package/node_modules/@babel/types/lib/utils/shallowEqual.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/buildMatchMemberExpression.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/generated/index.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/is.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isBinding.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isBlockScoped.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isImmutable.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isLet.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isNode.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isNodesEquivalent.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isPlaceholderType.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isReferenced.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isScope.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isSpecifierDefault.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isType.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isValidES3Identifier.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isValidIdentifier.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/isVar.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/matchesPattern.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/react/isCompatTag.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/react/isReactComponent.js.map +0 -1
- package/node_modules/@babel/types/lib/validators/validate.js.map +0 -1
- package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.d.ts +0 -37
- package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.js +0 -451
- package/node_modules/@fps-games/editor-babylon/dist/prefab-comparison-preview-controller.js.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.d.ts +0 -49
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js +0 -627
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-actions.js.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.d.ts +0 -52
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js +0 -450
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts +0 -21
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js +0 -75
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-command-adapter.js.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts +0 -5
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js +0 -92
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-scope.js.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts +0 -63
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js +0 -285
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-tree.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorSelectionState,\n EditorTransformMatrix,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n cloneEditorTransformMatrix,\n combineEditorTransforms,\n createIdentityEditorTransformMatrix,\n createEditorTransformMatrixSnapshot,\n isEditorTransformMatrixSnapshot,\n readEditorTransformPosition,\n toEditorLocalTransformFromWorld,\n} from '@fps-games/editor-core';\nimport type {\n ArtistMaterialProfile,\n ArtistMaterialSlotBinding,\n ArtistMaterialTextureRef,\n MaterialSlotSourceDescriptor,\n SceneMaterialAssetKind,\n} from '@fps-games/editor-protocol';\nimport { applyBabylonDefaultOutline, type BabylonDefaultOutlineOptions } from '@fps-games/babylon-renderer';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeCamera,\n RuntimeScene,\n} from './types';\nimport { applyArtistMaterialProfileToRuntimeMaterial } from './material-property-adapter';\nimport {\n pickBabylonProjectionNodeIdAt,\n resolveBabylonPickSelectionNodeId,\n resolveBabylonProjectionNodeId,\n} from './projection-pick-resolver';\nimport {\n normalizeProjectionOwnerNodePath,\n readProjectionSourceNodeSegment,\n} from './projection-source-owner-path';\nimport {\n createMaterialSlotOwnerPathMatchKey,\n isMaterialSlotOwnerPathMatch,\n} from './material-slot-source-resolver';\nimport {\n isBabylonPrimitiveProjectionSharedMaterial,\n} from './primitive-projection-instancing';\n\nexport type BabylonEditorProjectionVec3 = EditorTransformVec3;\nexport interface BabylonEditorProjectionVec2 {\n x: number;\n y: number;\n}\n\nconst LARGE_SELECTION_EDGE_LIMIT = 200;\nconst PROJECTION_LOCAL_MATRIX_METADATA_KEY = 'editorLocalTransformMatrix';\nconst MIN_SELECTION_BOUNDS_PROXY_SIZE = 0.002;\n\nexport type BabylonEditorProjectionTransform = EditorTransformSnapshot;\n\nexport interface BabylonEditorProjectionAssetTransform {\n position?: BabylonEditorProjectionVec3;\n rotation?: BabylonEditorProjectionVec3;\n rotationDeg?: BabylonEditorProjectionVec3;\n scale?: number | BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionAsset {\n id?: string;\n sourceId?: string;\n transform?: BabylonEditorProjectionAssetTransform;\n metadata?: Record<string, unknown>;\n}\n\nexport type BabylonEditorProjectionPrimitiveShape = 'cube' | 'sphere' | 'plane' | 'capsule';\n\nexport interface BabylonEditorProjectionPrimitive {\n shape: BabylonEditorProjectionPrimitiveShape;\n}\n\nexport interface BabylonEditorProjectionOutline {\n strategy?: 'babylon-default';\n renderOutline?: boolean;\n outlineWidth?: number;\n outlineColor?: BabylonEditorProjectionColorRGB;\n}\n\nexport type BabylonEditorProjectionCameraMode = 'orthographic' | 'perspective';\n\nexport interface BabylonEditorProjectionCameraSettings {\n projection?: BabylonEditorProjectionCameraMode;\n alpha: number;\n beta: number;\n radius: number;\n orthoSize: number;\n fov?: number;\n targetOffset?: BabylonEditorProjectionVec3;\n minZ?: number;\n maxZ?: number;\n lowerBetaLimit?: number;\n upperBetaLimit?: number;\n lowerRadiusLimit?: number;\n upperRadiusLimit?: number;\n inertia?: number;\n targetScreenOffset?: BabylonEditorProjectionVec2;\n}\n\nexport interface BabylonEditorProjectionCameraRigApplyOptions {\n target?: BabylonEditorProjectionVec3 | null;\n lockOrbit?: boolean;\n}\n\nexport interface BabylonEditorProjectionColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface BabylonEditorProjectionDirectionalLightSettings {\n type: 'directional';\n intensity: number;\n direction: BabylonEditorProjectionVec3;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport interface BabylonEditorProjectionHemisphericLightSettings {\n type: 'hemispheric';\n intensity: number;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n groundColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport type BabylonEditorProjectionLightSettings =\n | BabylonEditorProjectionDirectionalLightSettings\n | BabylonEditorProjectionHemisphericLightSettings;\n\nexport type BabylonEditorProjectionShadowMode = 'default' | 'none' | 'blob' | 'static' | 'planar' | 'dynamic';\n\nexport interface BabylonEditorProjectionRendering {\n renderingGroupId?: number;\n alphaIndex?: number;\n}\n\nexport type BabylonEditorProjectionAssetInstantiationMode = 'auto' | 'meshClone' | 'instancedMesh';\n\nexport interface BabylonEditorProjectionNode {\n id: string;\n name?: string;\n parentId?: string | null;\n active?: boolean;\n transform?: BabylonEditorProjectionTransform;\n asset?: BabylonEditorProjectionAsset | null;\n primitive?: BabylonEditorProjectionPrimitive | null;\n helperKind?: 'root';\n runtimeKind?: 'camera' | 'light';\n shadow?: unknown;\n shadowPlan?: unknown;\n rendering?: BabylonEditorProjectionRendering;\n camera?: BabylonEditorProjectionCameraSettings;\n light?: BabylonEditorProjectionLightSettings;\n outline?: BabylonEditorProjectionOutline | null;\n assetInstantiationMode?: BabylonEditorProjectionAssetInstantiationMode;\n artistMaterialKind?: SceneMaterialAssetKind;\n artistMaterialProfile?: ArtistMaterialProfile;\n artistMaterialSlotBindings?: ArtistMaterialSlotBinding[];\n}\n\nexport interface BabylonEditorProjectionImportResult {\n meshes?: any[];\n transformNodes?: any[];\n animationGroups?: any[];\n}\n\nexport type BabylonEditorProjectionImportNodeKind = 'root' | 'transform' | 'mesh';\n\nexport interface BabylonEditorProjectionImportNodeSnapshot {\n id: string;\n parentId: string | null;\n name: string;\n kind: BabylonEditorProjectionImportNodeKind;\n sourceName?: string;\n ownerNodePath?: string;\n materialIds?: string[];\n}\n\nexport interface BabylonEditorProjectionImportMaterialSnapshot {\n id: string;\n name: string;\n kind?: string;\n nodeIds: string[];\n textureIds: string[];\n}\n\nexport interface BabylonEditorProjectionImportTextureSnapshot {\n id: string;\n name: string;\n kind?: string;\n url?: string;\n}\n\nexport interface BabylonEditorProjectionImportAnimationSnapshot {\n id: string;\n name: string;\n}\n\nexport interface BabylonEditorProjectionImportStructureSnapshot {\n projectionNodeId: string;\n assetId?: string;\n sourceId?: string;\n nodes: BabylonEditorProjectionImportNodeSnapshot[];\n materials: BabylonEditorProjectionImportMaterialSnapshot[];\n textures: BabylonEditorProjectionImportTextureSnapshot[];\n animations: BabylonEditorProjectionImportAnimationSnapshot[];\n}\n\nexport interface BabylonEditorProjectionImportContext {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n root: any;\n node: BabylonEditorProjectionNode;\n asset: BabylonEditorProjectionAsset;\n}\n\nexport type BabylonEditorProjectionImporter = (\n context: BabylonEditorProjectionImportContext,\n) => Promise<BabylonEditorProjectionImportResult | null | undefined>;\n\nexport type BabylonEditorProjectionMaterialProfileSource = 'rootProfile' | 'slotBinding';\nexport type BabylonEditorProjectionMaterialProfileMatchKind = 'root' | 'exact' | 'descendant' | 'none';\nexport type BabylonEditorProjectionMaterialProfileTargetStatus =\n | 'material'\n | 'subMaterial'\n | 'primitiveFallbackMaterial'\n | 'missingMeshOwner'\n | 'missingMaterial'\n | 'missingTargetMaterial'\n | 'missingSubMaterial';\n\nexport interface BabylonEditorProjectionMaterialProfileDiagnostic {\n projectionNodeId: string;\n source: BabylonEditorProjectionMaterialProfileSource;\n applied: boolean;\n matchKind: BabylonEditorProjectionMaterialProfileMatchKind;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n slotId?: string;\n ownerNodePath?: string;\n meshOwnerNodePath?: string | null;\n primitiveIndex?: number;\n targetMaterialName?: string;\n targetMaterialType?: string | null;\n warningMessage?: string;\n}\n\nexport interface BabylonEditorProjectionOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n importModel?: BabylonEditorProjectionImporter;\n resolveTextureUrl?: (texture: ArtistMaterialTextureRef) => string | null | undefined;\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n logger?: Pick<Console, 'warn'>;\n onProjectionReady?: (event: BabylonEditorProjectionReadyEvent) => void;\n onProjectionBatchSettled?: (event: BabylonEditorProjectionBatchSettledEvent) => void;\n onMaterialProfileDiagnostic?: (diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic) => void;\n}\n\nexport type BabylonEditorProjectionSelectionEdgesPrewarm = 'eager' | 'lazy' | 'idle';\n\ntype ProjectionMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\ntype ProjectionMaterialSlotDescriptor = MaterialSlotSourceDescriptor & {\n key: string;\n normalizedOwnerNodePath: string;\n matchKey: string;\n triangleCount?: number;\n boundingBox?: ProjectionMaterialSlotBoundingBox;\n};\n\ntype ProjectionMaterialSlotBinding = {\n slot: ProjectionMaterialSlotDescriptor;\n profile: ArtistMaterialProfile;\n source: Exclude<BabylonEditorProjectionMaterialProfileSource, 'rootProfile'>;\n};\n\ntype ProjectionMaterialSlotBindingMatch = {\n binding: ProjectionMaterialSlotBinding;\n matchKind: Extract<BabylonEditorProjectionMaterialProfileMatchKind, 'exact' | 'descendant'>;\n};\n\ntype ProjectionMaterialSlotDescriptorInput = Partial<Record<keyof MaterialSlotSourceDescriptor, unknown>> & {\n triangleCount?: unknown;\n boundingBox?: unknown;\n};\n\ntype ProjectionMaterialSlotTarget = {\n material: unknown;\n clonedMaterials: unknown[];\n};\n\ntype ProjectionMaterialDetachResult = {\n material: unknown;\n clonedMaterials: unknown[];\n projectionOwnsMaterialLifecycle: boolean;\n};\n\ntype ProjectionMaterialSlotTargetResolution = {\n target: ProjectionMaterialSlotTarget | null;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n warningMessage?: string;\n};\n\nexport interface BabylonEditorProjectionReadyEvent {\n nodeId: string;\n async: boolean;\n}\n\nexport interface BabylonEditorProjectionBatchSettledEvent {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n settledNodeIds: string[];\n}\n\nexport type BabylonEditorProjectionBatchState = 'pending' | 'settled' | 'stale';\n\nexport interface BabylonEditorProjectionBatchStatus {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: string[];\n settledNodeIds: string[];\n state: BabylonEditorProjectionBatchState;\n}\n\nexport interface BabylonEditorProjectionBatchHandle {\n batchId: number;\n nodeIds: string[];\n getStatus(): BabylonEditorProjectionBatchStatus;\n settled: Promise<BabylonEditorProjectionBatchStatus>;\n}\n\nexport interface BabylonEditorProjectionIdleState {\n idle: boolean;\n activeBatchIds: number[];\n lastBatch: BabylonEditorProjectionBatchStatus | null;\n}\n\nexport interface BabylonEditorProjectionPreviewVisibilityEntry {\n nodeId: string;\n visible: boolean;\n authoredActive: boolean;\n effectiveVisible: boolean;\n}\n\nexport interface BabylonEditorProjectionDebugBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionShadowDebugOverlayItem {\n id: string;\n kind: 'caster-bounds' | 'receiver-bounds' | 'receiver-surface' | 'light-direction' | 'footprint' | 'artifact-bounds';\n bounds?: BabylonEditorProjectionDebugBounds;\n center?: BabylonEditorProjectionVec3;\n size?: BabylonEditorProjectionVec3;\n direction?: BabylonEditorProjectionVec3;\n}\n\nexport interface ProjectedBabylonEditorNode {\n nodeId: string;\n root: any;\n outlineMeshes: any[];\n selectionMeshes?: any[];\n animationGroups: any[];\n runtimeObjects: any[];\n importStructure?: BabylonEditorProjectionImportStructureSnapshot | null;\n loadPromise?: Promise<void>;\n selectionEdgesPrewarmCancel?: (() => void) | null;\n}\n\nexport interface BabylonEditorProjection {\n projectNodes(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n projectNode(node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null;\n removeNode(nodeId: string): void;\n rebuild(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n getLastProjectionBatch(): BabylonEditorProjectionBatchHandle | null;\n getIdleState(): BabylonEditorProjectionIdleState;\n waitForIdle(): Promise<BabylonEditorProjectionIdleState>;\n readNodeTransform(nodeId: string): EditorTransformSnapshot | null;\n readNodeTransforms(nodeIds: string[]): Record<string, EditorTransformSnapshot>;\n readNodeImportStructure(nodeId: string): BabylonEditorProjectionImportStructureSnapshot | null;\n setNodeTransformPreview(nodeId: string, transform: EditorTransformSnapshot): void;\n setNodeTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): void;\n getAttachableRoot(nodeId: string): any | null;\n getSelectionBounds(nodeIds: string[]): BabylonEditorProjectionBounds | null;\n getSelectionPivot(nodeIds: string[]): EditorTransformPivot | null;\n syncNodeTransform(node: BabylonEditorProjectionNode): void;\n syncRuntimeNode(node: BabylonEditorProjectionNode): boolean;\n syncNodeMetadata(node: BabylonEditorProjectionNode): void;\n syncSelection(selection: EditorSelectionState): void;\n resolveProjectionNodeId(target: unknown): string | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickNodeIdAt(clientX: number, clientY: number): string | null;\n getNodeIdsInScreenRect(rect: BabylonEditorProjectionScreenRect): string[];\n getProjectedNode(nodeId: string): ProjectedBabylonEditorNode | null;\n getProjectedNodeIds(): string[];\n getProjectionParentIds(nodeId: string): string[];\n getPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setPreviewVisibilityOverrides(overrides: Record<string, boolean>): BabylonEditorProjectionPreviewVisibilityEntry[];\n clearPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setShadowDebugOverlay(items: BabylonEditorProjectionShadowDebugOverlayItem[]): string[];\n clearShadowDebugOverlay(): boolean;\n dispose(): void;\n}\n\nexport interface BabylonEditorProjectionScreenRect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface BabylonEditorProjectionBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n}\n\ninterface BabylonEditorProjectionBatch {\n id: number;\n generation: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: Set<string>;\n settledNodeIds: Set<string>;\n notifyScheduled: boolean;\n state: BabylonEditorProjectionBatchState;\n handle: BabylonEditorProjectionBatchHandle;\n resolveSettled(status: BabylonEditorProjectionBatchStatus): void;\n}\n\nconst ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nfunction requireBabylonCtor<T>(value: T | undefined, name: string): T {\n if (!value) throw new Error(`Babylon runtime missing ${name}`);\n return value;\n}\n\nexport function createBabylonEditorProjection(\n options: BabylonEditorProjectionOptions,\n): BabylonEditorProjection {\n const projections = new Map<string, ProjectedBabylonEditorNode>();\n const projectionParentIds = new Map<string, string | null>();\n const projectionAuthoredActive = new Map<string, boolean>();\n const previewVisibilityOverrides = new Map<string, boolean>();\n const shadowDebugOverlayObjects: any[] = [];\n const selectionEdgesPrewarm = options.selectionEdgesPrewarm ?? 'eager';\n const activeBatches = new Set<BabylonEditorProjectionBatch>();\n const idleWaiters = new Set<(state: BabylonEditorProjectionIdleState) => void>();\n let nextBatchId = 1;\n let projectionGeneration = 0;\n let lastBatch: BabylonEditorProjectionBatch | null = null;\n let idleNotificationSuspendCount = 0;\n\n const createBatch = (nodeIds: string[]): BabylonEditorProjectionBatch => {\n let resolveSettled!: (status: BabylonEditorProjectionBatchStatus) => void;\n const settled = new Promise<BabylonEditorProjectionBatchStatus>(resolve => {\n resolveSettled = resolve;\n });\n const batch: BabylonEditorProjectionBatch = {\n id: nextBatchId,\n generation: projectionGeneration,\n nodeIds,\n asyncNodeIds: [],\n pendingNodeIds: new Set(),\n settledNodeIds: new Set(),\n notifyScheduled: false,\n state: 'pending',\n handle: null as unknown as BabylonEditorProjectionBatchHandle,\n resolveSettled,\n };\n batch.handle = {\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n getStatus: () => createBatchStatus(batch),\n settled,\n };\n nextBatchId += 1;\n lastBatch = batch;\n activeBatches.add(batch);\n return batch;\n };\n\n const createBatchStatus = (\n batch: BabylonEditorProjectionBatch,\n ): BabylonEditorProjectionBatchStatus => ({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n pendingNodeIds: [...batch.pendingNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n state: batch.state,\n });\n\n const getIdleState = (): BabylonEditorProjectionIdleState => ({\n idle: activeBatches.size === 0,\n activeBatchIds: [...activeBatches].map(batch => batch.id),\n lastBatch: lastBatch ? createBatchStatus(lastBatch) : null,\n });\n\n const notifyIdleWaitersIfNeeded = (): void => {\n if (idleNotificationSuspendCount > 0 || activeBatches.size > 0 || idleWaiters.size === 0) return;\n const state = getIdleState();\n for (const resolve of idleWaiters) resolve(state);\n idleWaiters.clear();\n };\n\n const completeBatch = (\n batch: BabylonEditorProjectionBatch,\n state: Exclude<BabylonEditorProjectionBatchState, 'pending'>,\n ): BabylonEditorProjectionBatchStatus => {\n if (batch.state !== 'pending') return createBatchStatus(batch);\n batch.state = state;\n const status = createBatchStatus(batch);\n activeBatches.delete(batch);\n batch.resolveSettled(status);\n notifyIdleWaitersIfNeeded();\n return status;\n };\n\n const markActiveBatchesStale = (): void => {\n for (const batch of [...activeBatches]) {\n completeBatch(batch, 'stale');\n }\n };\n\n const scheduleBatchSettled = (batch: BabylonEditorProjectionBatch): void => {\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0 || batch.notifyScheduled) return;\n batch.notifyScheduled = true;\n void Promise.resolve().then(() => {\n batch.notifyScheduled = false;\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0) return;\n if (batch.generation !== projectionGeneration) {\n completeBatch(batch, 'stale');\n return;\n }\n options.onProjectionBatchSettled?.({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n });\n completeBatch(batch, 'settled');\n });\n };\n\n const trackAsyncProjection = (\n batch: BabylonEditorProjectionBatch,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n ): Promise<void> => {\n batch.asyncNodeIds.push(node.id);\n batch.pendingNodeIds.add(node.id);\n return loadModelProjection(options, node, projection).finally(() => {\n batch.pendingNodeIds.delete(node.id);\n batch.settledNodeIds.add(node.id);\n if (projections.get(node.id) === projection && !projection.root.isDisposed?.()) {\n delete projection.loadPromise;\n applyProjectionPreviewVisibility(node.id);\n applyProjectionOutline(node, projection);\n scheduleProjectionSelectionEdgesPrewarm(projection);\n options.onProjectionReady?.({ nodeId: node.id, async: true });\n }\n scheduleBatchSettled(batch);\n });\n };\n\n const disposeProjectedNode = (projection: ProjectedBabylonEditorNode): void => {\n projection.selectionEdgesPrewarmCancel?.();\n projection.selectionEdgesPrewarmCancel = null;\n projection.importStructure = null;\n for (const animationGroup of projection.animationGroups) {\n animationGroup.dispose?.();\n }\n let disposedRuntimeLight = false;\n for (const runtimeObject of projection.runtimeObjects) {\n disposedRuntimeLight = disposedRuntimeLight || isProjectionRuntimeLightObject(runtimeObject);\n runtimeObject.dispose?.();\n }\n if (disposedRuntimeLight) resyncProjectionSceneLightSources(options.scene);\n projection.root?.dispose?.();\n };\n\n const disposeAll = (): void => {\n markActiveBatchesStale();\n projectionGeneration += 1;\n clearShadowDebugOverlayObjects();\n for (const projection of projections.values()) {\n disposeProjectedNode(projection);\n }\n projections.clear();\n projectionParentIds.clear();\n projectionAuthoredActive.clear();\n previewVisibilityOverrides.clear();\n };\n\n const createPreviewVisibilityEntry = (\n nodeId: string,\n visible: boolean,\n ): BabylonEditorProjectionPreviewVisibilityEntry => {\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n return {\n nodeId,\n visible,\n authoredActive,\n effectiveVisible: authoredActive && visible !== false,\n };\n };\n\n const applyProjectionPreviewVisibility = (nodeId: string): void => {\n const projection = projections.get(nodeId);\n if (!projection) return;\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n const override = previewVisibilityOverrides.get(nodeId);\n const effectiveVisible = authoredActive && override !== false;\n projection.root?.setEnabled?.(effectiveVisible);\n for (const runtimeObject of projection.runtimeObjects) {\n runtimeObject.setEnabled?.(effectiveVisible);\n }\n };\n\n const clearShadowDebugOverlayObjects = (): boolean => {\n const hadObjects = shadowDebugOverlayObjects.length > 0;\n for (const object of shadowDebugOverlayObjects.splice(0)) {\n object.dispose?.();\n }\n return hadObjects;\n };\n\n const scheduleProjectionSelectionEdgesPrewarm = (projection: ProjectedBabylonEditorNode): void => {\n projection.selectionEdgesPrewarmCancel?.();\n projection.selectionEdgesPrewarmCancel = null;\n if (selectionEdgesPrewarm === 'lazy') return;\n if (selectionEdgesPrewarm === 'eager') {\n prewarmProjectionSelectionEdges(projection);\n return;\n }\n projection.selectionEdgesPrewarmCancel = scheduleIdleProjectionSelectionEdgesPrewarm(projection);\n };\n\n const syncProjectionHierarchy = (): void => {\n for (const [nodeId, projection] of projections) {\n const parentId = projectionParentIds.get(nodeId) ?? null;\n const parent = parentId && parentId !== nodeId\n ? projections.get(parentId)?.root ?? null\n : null;\n if (projection.root.parent !== parent) {\n projection.root.parent = parent;\n }\n }\n };\n\n const projectNodeInBatch = (\n node: BabylonEditorProjectionNode,\n batch: BabylonEditorProjectionBatch,\n ): ProjectedBabylonEditorNode | null => {\n removeNode(node.id);\n const root = createProjectionRoot(options.babylon, options.scene, node);\n if (!root) return null;\n const projection: ProjectedBabylonEditorNode = {\n nodeId: node.id,\n root,\n outlineMeshes: [],\n selectionMeshes: [],\n animationGroups: [],\n runtimeObjects: [],\n };\n projections.set(node.id, projection);\n projectionParentIds.set(node.id, node.parentId ?? null);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n if (node.transform) applyProjectionTransform(options.babylon, root, node.transform);\n\n if (node.helperKind !== 'root' && !attachRuntimeProjection(options.babylon, options.scene, node, projection)) {\n if (node.asset && options.importModel) {\n projection.loadPromise = trackAsyncProjection(batch, node, projection);\n } else if (node.primitive) {\n attachPrimitiveProjection(options, node, projection);\n } else if (node.asset) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n }\n }\n if (!projection.loadPromise) {\n applyProjectionOutline(node, projection);\n scheduleProjectionSelectionEdgesPrewarm(projection);\n }\n if (!projection.loadPromise) batch.settledNodeIds.add(node.id);\n return projection;\n };\n\n const projectNode = (node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null => {\n const batch = createBatch([node.id]);\n const projection = projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return projection;\n };\n\n const removeNode = (nodeId: string): void => {\n const existing = projections.get(nodeId);\n if (!existing) return;\n projections.delete(nodeId);\n projectionParentIds.delete(nodeId);\n projectionAuthoredActive.delete(nodeId);\n previewVisibilityOverrides.delete(nodeId);\n syncProjectionHierarchy();\n disposeProjectedNode(existing);\n };\n\n return {\n projectNodes(nodes) {\n const nodeList = [...nodes];\n idleNotificationSuspendCount += 1;\n try {\n disposeAll();\n const batch = createBatch(nodeList.map(node => node.id));\n for (const node of nodeList) projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return batch.handle;\n } finally {\n idleNotificationSuspendCount = Math.max(0, idleNotificationSuspendCount - 1);\n notifyIdleWaitersIfNeeded();\n }\n },\n projectNode,\n removeNode,\n rebuild(nodes) {\n return this.projectNodes(nodes);\n },\n getLastProjectionBatch() {\n return lastBatch?.handle ?? null;\n },\n getIdleState,\n waitForIdle() {\n if (activeBatches.size === 0) return Promise.resolve(getIdleState());\n return new Promise(resolve => {\n idleWaiters.add(resolve);\n });\n },\n readNodeTransform(nodeId) {\n const projection = projections.get(nodeId);\n return projection?.root ? readProjectionTransform(projection.root) : null;\n },\n readNodeTransforms(nodeIds) {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of nodeIds) {\n const transform = this.readNodeTransform(nodeId);\n if (transform) transforms[nodeId] = transform;\n }\n return transforms;\n },\n readNodeImportStructure(nodeId) {\n return cloneProjectionImportStructureSnapshot(projections.get(nodeId)?.importStructure ?? null);\n },\n setNodeTransformPreview(nodeId, transform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return;\n if (!applyProjectionWorldTransform(options.babylon, projection.root, transform)) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to preview non-representable world transform for \"${nodeId}\"`);\n }\n },\n setNodeTransformsPreview(transforms) {\n for (const [nodeId, transform] of Object.entries(transforms)) {\n this.setNodeTransformPreview(nodeId, transform);\n }\n },\n getAttachableRoot(nodeId) {\n return projections.get(nodeId)?.root ?? null;\n },\n getSelectionBounds(nodeIds) {\n return getProjectionSelectionBounds(projections, nodeIds);\n },\n getSelectionPivot(nodeIds) {\n const bounds = getProjectionSelectionBounds(projections, nodeIds);\n if (bounds) {\n return {\n mode: 'selection-center',\n position: bounds.center,\n };\n }\n const transforms = nodeIds\n .map(nodeId => this.readNodeTransform(nodeId))\n .filter((transform): transform is EditorTransformSnapshot => !!transform);\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n },\n syncNodeTransform(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n scheduleProjectionSelectionEdgesPrewarm(projection);\n },\n syncRuntimeNode(node) {\n const projection = projections.get(node.id);\n if (!projection || node.runtimeKind !== 'light') return false;\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n if (!syncRuntimeLightProjection(options.babylon, options.scene, node, projection)) return false;\n scheduleProjectionSelectionEdgesPrewarm(projection);\n return true;\n },\n syncNodeMetadata(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n syncProjectionNodeMetadata(projection, node);\n },\n syncSelection(selection) {\n syncProjectionSelection(options.babylon, projections, selection);\n },\n resolveProjectionNodeId(target) {\n return resolveBabylonProjectionNodeId(target);\n },\n resolvePickSelectionNodeId(target) {\n return resolveBabylonPickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return pickBabylonProjectionNodeIdAt(options.scene, clientX, clientY);\n },\n getNodeIdsInScreenRect(rect) {\n return getProjectionNodeIdsInScreenRect(options.babylon, options.scene, projections, rect);\n },\n getProjectedNode(nodeId) {\n return projections.get(nodeId) ?? null;\n },\n getProjectedNodeIds() {\n return [...projections.keys()];\n },\n getProjectionParentIds(nodeId) {\n const parentIds: string[] = [];\n const seen = new Set<string>([nodeId]);\n let currentId: string | null = nodeId;\n while (currentId) {\n const parentId: string | null = projectionParentIds.get(currentId) ?? null;\n if (!parentId || parentId === currentId || seen.has(parentId)) break;\n seen.add(parentId);\n parentIds.push(parentId);\n currentId = parentId;\n }\n return parentIds;\n },\n getPreviewVisibilityOverrides() {\n return [...previewVisibilityOverrides.entries()]\n .map(([nodeId, visible]) => createPreviewVisibilityEntry(nodeId, visible));\n },\n setPreviewVisibilityOverrides(overrides) {\n for (const [nodeId, visible] of Object.entries(overrides)) {\n if (!projections.has(nodeId)) continue;\n previewVisibilityOverrides.set(nodeId, visible !== false);\n applyProjectionPreviewVisibility(nodeId);\n }\n return this.getPreviewVisibilityOverrides();\n },\n clearPreviewVisibilityOverrides() {\n const changedNodeIds = [...previewVisibilityOverrides.keys()];\n previewVisibilityOverrides.clear();\n for (const nodeId of changedNodeIds) applyProjectionPreviewVisibility(nodeId);\n return [];\n },\n setShadowDebugOverlay(items) {\n clearShadowDebugOverlayObjects();\n for (const item of items) {\n const object = createShadowDebugOverlayObject(options.babylon, options.scene, item);\n if (object) shadowDebugOverlayObjects.push(object);\n }\n return items.map(item => item.id);\n },\n clearShadowDebugOverlay() {\n return clearShadowDebugOverlayObjects();\n },\n dispose() {\n disposeAll();\n },\n };\n}\n\nfunction readVector3(value: any, fallback: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Number.isFinite(value?.x) ? Number(value.x) : fallback.x,\n y: Number.isFinite(value?.y) ? Number(value.y) : fallback.y,\n z: Number.isFinite(value?.z) ? Number(value.z) : fallback.z,\n };\n}\n\nfunction createShadowDebugOverlayObject(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n if (item.kind === 'light-direction') return createShadowDebugDirectionOverlay(babylon, scene, item);\n const bounds = item.bounds ?? createBoundsFromCenterSize(item.center, item.size);\n if (!bounds) return null;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const size = {\n x: Math.max(Math.abs(bounds.size.x), 0.01),\n y: Math.max(Math.abs(bounds.size.y), item.kind === 'footprint' ? 0.015 : 0.01),\n z: Math.max(Math.abs(bounds.size.z), 0.01),\n };\n const mesh = MeshBuilder.CreateBox(`${item.id}.shadowDebugOverlay`, {\n width: size.x,\n height: size.y,\n depth: size.z,\n }, scene);\n if (!mesh) return null;\n mesh.id = item.id;\n mesh.name = item.id;\n mesh.isPickable = false;\n mesh.renderingGroupId = 3;\n mesh.metadata = createShadowDebugOverlayMetadata();\n mesh.position = createBabylonVector3(babylon, bounds.center);\n const material = new StandardMaterial(`${item.id}.shadowDebugOverlay.material`, scene);\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) {\n material.diffuseColor = color;\n material.emissiveColor = color;\n }\n material.alpha = item.kind === 'receiver-surface' ? 0.14 : item.kind === 'footprint' ? 0.32 : 0.5;\n material.wireframe = item.kind !== 'footprint' && item.kind !== 'receiver-surface';\n material.disableLighting = true;\n mesh.material = material;\n const disposeMaterial = material.dispose?.bind(material);\n const disposeMesh = mesh.dispose?.bind(mesh);\n mesh.dispose = (...args: unknown[]) => {\n disposeMaterial?.();\n return disposeMesh?.(...args);\n };\n return mesh;\n}\n\nfunction createShadowDebugDirectionOverlay(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n if (!MeshBuilder?.CreateLineSystem) return null;\n const center = item.center ?? item.bounds?.center;\n const direction = normalizeDebugVec3(item.direction ?? { x: -0.3, y: -1, z: -0.2 });\n if (!center || !direction) return null;\n const length = Math.max(item.size?.x ?? item.bounds?.size.x ?? 2, item.size?.y ?? item.bounds?.size.y ?? 2, item.size?.z ?? item.bounds?.size.z ?? 2, 2);\n const start = createBabylonVector3(babylon, {\n x: center.x - direction.x * length * 0.5,\n y: center.y - direction.y * length * 0.5,\n z: center.z - direction.z * length * 0.5,\n });\n const end = createBabylonVector3(babylon, {\n x: center.x + direction.x * length * 0.5,\n y: center.y + direction.y * length * 0.5,\n z: center.z + direction.z * length * 0.5,\n });\n const arrowLeft = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 + direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 - direction.x * length * 0.08,\n });\n const arrowRight = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 - direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 + direction.x * length * 0.08,\n });\n const line = MeshBuilder.CreateLineSystem(`${item.id}.shadowDebugOverlay`, {\n lines: [\n [start, end],\n [end, arrowLeft],\n [end, arrowRight],\n ],\n }, scene);\n if (!line) return null;\n line.id = item.id;\n line.name = item.id;\n line.isPickable = false;\n line.renderingGroupId = 3;\n line.metadata = createShadowDebugOverlayMetadata();\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) line.color = color;\n return line;\n}\n\nfunction createShadowDebugOverlayMetadata(): Record<string, unknown> {\n return {\n shadowDebugOverlayInternal: true,\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n };\n}\n\nfunction createBoundsFromCenterSize(\n center: BabylonEditorProjectionVec3 | undefined,\n size: BabylonEditorProjectionVec3 | undefined,\n): BabylonEditorProjectionDebugBounds | null {\n if (!center || !size) return null;\n return {\n center,\n size,\n min: {\n x: center.x - size.x / 2,\n y: center.y - size.y / 2,\n z: center.z - size.z / 2,\n },\n max: {\n x: center.x + size.x / 2,\n y: center.y + size.y / 2,\n z: center.z + size.z / 2,\n },\n };\n}\n\nfunction createBabylonVector3(babylon: BabylonRuntimeGlobal, value: BabylonEditorProjectionVec3): any {\n const Vector3 = (babylon as any).Vector3;\n return Vector3 ? new Vector3(value.x, value.y, value.z) : { x: value.x, y: value.y, z: value.z };\n}\n\nfunction normalizeDebugVec3(value: BabylonEditorProjectionVec3): BabylonEditorProjectionVec3 | null {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.0001) return null;\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction readShadowDebugOverlayColor(babylon: BabylonRuntimeGlobal, kind: BabylonEditorProjectionShadowDebugOverlayItem['kind']): any | null {\n const Color3 = (babylon as any).Color3;\n if (!Color3) return null;\n if (kind === 'caster-bounds') return new Color3(1, 0.78, 0.1);\n if (kind === 'receiver-bounds') return new Color3(0.1, 0.75, 1);\n if (kind === 'receiver-surface') return new Color3(0.05, 0.55, 1);\n if (kind === 'light-direction') return new Color3(1, 0.95, 0.2);\n if (kind === 'footprint') return new Color3(0.1, 1, 0.42);\n return new Color3(1, 0.25, 0.25);\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n}\n\nfunction averagePositions(transforms: EditorTransformSnapshot[]): EditorTransformVec3 {\n const sum = transforms.reduce(\n (current, transform) => addVec3(current, readEditorTransformPosition(transform)),\n { x: 0, y: 0, z: 0 },\n );\n return scaleVec3(sum, 1 / transforms.length);\n}\n\nfunction getProjectionSelectionBounds(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeIds: string[],\n): BabylonEditorProjectionBounds | null {\n let min: EditorTransformVec3 | null = null;\n let max: EditorTransformVec3 | null = null;\n for (const nodeId of nodeIds) {\n const bounds = readProjectionBounds(resolveProjectionSelectionBoundsTarget(projections, nodeId));\n if (!bounds) continue;\n min = min\n ? {\n x: Math.min(min.x, bounds.min.x),\n y: Math.min(min.y, bounds.min.y),\n z: Math.min(min.z, bounds.min.z),\n }\n : bounds.min;\n max = max\n ? {\n x: Math.max(max.x, bounds.max.x),\n y: Math.max(max.y, bounds.max.y),\n z: Math.max(max.z, bounds.max.z),\n }\n : bounds.max;\n }\n if (!min || !max) return null;\n const center = {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n };\n return {\n min,\n max,\n center,\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction resolveProjectionSelectionBoundsTarget(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeId: string,\n): any | null {\n const projection = projections.get(nodeId);\n if (projection?.root) return projection.root;\n for (const candidateProjection of projections.values()) {\n const selectionTarget = findProjectionSelectionMeshByNodeId(candidateProjection, nodeId);\n if (selectionTarget) return selectionTarget;\n }\n return null;\n}\n\nfunction findProjectionSelectionMeshByNodeId(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n): any | null {\n for (const mesh of projection.selectionMeshes ?? []) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n for (const mesh of projection.outlineMeshes) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n return null;\n}\n\nfunction readProjectionMeshSelectionNodeId(mesh: any): string | null {\n const nodeId = mesh?.metadata?.editorProjection?.nodeId;\n return typeof nodeId === 'string' && nodeId.length > 0 ? nodeId : null;\n}\n\nfunction readProjectionBounds(root: any): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n if (!root) return null;\n const bounds = root.getHierarchyBoundingVectors?.();\n if (bounds?.min && bounds?.max) {\n return {\n min: readVector3(bounds.min, { x: 0, y: 0, z: 0 }),\n max: readVector3(bounds.max, { x: 0, y: 0, z: 0 }),\n };\n }\n const transform = readProjectionTransform(root);\n const position = readEditorTransformPosition(transform);\n return {\n min: position,\n max: position,\n };\n}\n\nexport function readProjectionTransform(node: any): EditorTransformSnapshot {\n return readProjectionWorldTransform(node);\n}\n\nfunction readProjectionWorldTransform(node: any, seen = new Set<any>()): EditorTransformSnapshot {\n const local = readProjectionLocalTransform(node);\n const parent = node?.parent ?? null;\n if (!parent || seen.has(node)) return local;\n seen.add(node);\n const parentWorld = readProjectionWorldTransform(parent, seen);\n return combineEditorTransforms(parentWorld, local) ?? local;\n}\n\nfunction readProjectionLocalTransform(node: any): EditorTransformSnapshot {\n const matrix = readProjectionLocalMatrixTransform(node);\n if (matrix) return matrix;\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVector3(node?.position, { x: 0, y: 0, z: 0 }),\n rotation: readVector3(rotation, { x: 0, y: 0, z: 0 }),\n scale: readVector3(node?.scaling, { x: 1, y: 1, z: 1 }),\n };\n}\n\nfunction readProjectionLocalMatrixTransform(node: any): EditorTransformSnapshot | null {\n const metadata = readProjectionObject(node?.metadata);\n const metadataMatrix = metadata?.[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n if (Array.isArray(metadataMatrix)) {\n const transform = createEditorTransformMatrixSnapshot(metadataMatrix);\n if (transform) return transform;\n }\n const pivotMatrix = node?._usePivotMatrix ? node?._pivotMatrix?.asArray?.() : null;\n return Array.isArray(pivotMatrix) || ArrayBuffer.isView(pivotMatrix)\n ? createEditorTransformMatrixSnapshot(Array.from(pivotMatrix as ArrayLike<number>))\n : null;\n}\n\nfunction createProjectionRoot(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n): any | null {\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`${node.id}.projection`, scene);\n root.id = node.id;\n root.name = node.name ?? node.id;\n const disableGeneratedShadow = node.runtimeKind === 'camera' || node.runtimeKind === 'light' || node.helperKind === 'root';\n root.metadata = {\n ...(root.metadata ?? {}),\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId: node.id,\n ...(node.runtimeKind ? { runtimeKind: node.runtimeKind } : {}),\n ...createProjectionShadowMetadata(node),\n },\n };\n return root;\n}\n\nasync function loadModelProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): Promise<void> {\n const asset = node.asset;\n if (!asset || !options.importModel) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, !!asset);\n applyProjectionOutline(node, projection);\n return;\n }\n\n try {\n const result = await options.importModel({\n babylon: options.babylon,\n scene: options.scene,\n root: projection.root,\n node,\n asset,\n });\n if (!result) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n applyProjectionOutline(node, projection);\n return;\n }\n if (projection.root.isDisposed?.()) {\n disposeImportedProjectionResult(result);\n return;\n }\n attachImportedProjectionResult(options, node, asset, projection, result);\n applyProjectionOutline(node, projection);\n } catch (error) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to project model \"${asset.sourceId ?? asset.id ?? node.id}\"`, error);\n if (!projection.root.isDisposed?.()) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n applyProjectionOutline(node, projection);\n }\n }\n}\n\nfunction attachImportedProjectionResult(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n projection: ProjectedBabylonEditorNode,\n result: BabylonEditorProjectionImportResult,\n): void {\n const { babylon, scene } = options;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n try {\n const modelRoot = new TransformNode(`${node.id}.modelRoot`, scene);\n modelRoot.parent = projection.root;\n modelRoot.metadata = {\n ...(modelRoot.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n applyAssetDefaultsTransform(babylon, modelRoot, asset.transform);\n collapseZeroVertexProjectionWrapperMeshes(babylon, scene, result);\n\n const importedNodes = [\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ];\n const importedNodeSet = new Set<any>(importedNodes);\n for (const importedNode of importedNodes) {\n if (importedNode === modelRoot) continue;\n if (!importedNode.parent || !importedNodeSet.has(importedNode.parent)) {\n importedNode.parent = modelRoot;\n }\n importedNode.metadata = {\n ...(importedNode.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n const materialSlots = readProjectionAssetMaterialSlots(asset, node.id);\n const ownerNodePathByMesh = new Map<any, string>();\n const ownerMeshCountByKey = new Map<string, number>();\n for (const mesh of result.meshes ?? []) {\n const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!ownerNodePath) continue;\n ownerNodePathByMesh.set(mesh, ownerNodePath);\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n ownerMeshCountByKey.set(ownerKey, (ownerMeshCountByKey.get(ownerKey) ?? 0) + 1);\n }\n const splitPrimitiveOrdinalByOwnerKey = new Map<string, number>();\n const primitiveBoundsProxyOwnerKeys = new Set<string>();\n for (const mesh of result.meshes ?? []) {\n mesh.isPickable = true;\n applyProjectionRenderingToMesh(node, mesh);\n const ownerNodePath = ownerNodePathByMesh.get(mesh) ?? null;\n if (ownerNodePath) {\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n const ownerMeshCount = ownerMeshCountByKey.get(ownerKey) ?? 0;\n const splitPrimitiveSlot = resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh,\n materialSlots,\n ownerNodePath,\n node.id,\n ownerMeshCount,\n splitPrimitiveOrdinalByOwnerKey,\n );\n const primitiveSelectionMeshes = createProjectionAssetMeshSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n );\n const primitiveBoundsSelectionMeshes = !splitPrimitiveSlot\n && primitiveSelectionMeshes.length === 0\n && !primitiveBoundsProxyOwnerKeys.has(ownerKey)\n ? createProjectionPrimitiveBoundsSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n ownerMeshCount,\n )\n : [];\n if (primitiveBoundsSelectionMeshes.length > 0) primitiveBoundsProxyOwnerKeys.add(ownerKey);\n const usesSelectionMeshes = primitiveSelectionMeshes.length > 0\n || primitiveBoundsSelectionMeshes.length > 0\n || primitiveBoundsProxyOwnerKeys.has(ownerKey);\n const selectionKey = resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath, node.id);\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: splitPrimitiveSlot\n ? createAssetMeshProjectionNodeId(node.id, splitPrimitiveSlot.key)\n : usesSelectionMeshes\n ? node.id\n : createAssetMeshProjectionNodeId(node.id, selectionKey),\n rootNodeId: node.id,\n sourceId: asset.sourceId,\n ownerNodePath,\n ...(splitPrimitiveSlot\n ? {\n slotSelectionKey: splitPrimitiveSlot.key,\n primitiveIndex: splitPrimitiveSlot.primitiveIndex,\n }\n : {}),\n ...(!splitPrimitiveSlot && !usesSelectionMeshes && selectionKey !== ownerNodePath\n ? { slotSelectionKey: selectionKey }\n : {}),\n runtimeKind: 'assetMesh',\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n }\n projection.runtimeObjects.push(\n ...applyProjectionArtistMaterialProfilesToMeshes(options, node, modelRoot, result.meshes ?? []),\n );\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.stop?.();\n }\n projection.animationGroups = result.animationGroups ?? [];\n projection.outlineMeshes = (result.meshes ?? []).filter((mesh: any) => mesh.getTotalVertices?.() > 0);\n projection.importStructure = createProjectionImportStructureSnapshot(node, asset, modelRoot, result);\n } catch (error) {\n disposeImportedProjectionResult(result);\n throw error;\n }\n}\n\nfunction collapseZeroVertexProjectionWrapperMeshes(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n result: BabylonEditorProjectionImportResult,\n): void {\n const meshes = result.meshes ?? [];\n if (meshes.length === 0) return;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n const sourceMeshes = collectProjectionSourceMeshReferences(meshes);\n const keptMeshes: any[] = [];\n const replacementTransformNodes: any[] = [];\n for (const mesh of meshes) {\n if (!canCollapseProjectionWrapperMesh(mesh, sourceMeshes)) {\n keptMeshes.push(mesh);\n continue;\n }\n const replacement = createProjectionWrapperTransformNode(TransformNode, scene, mesh);\n if (!replacement) {\n keptMeshes.push(mesh);\n continue;\n }\n for (const child of readProjectionDirectChildren(mesh)) {\n child.parent = replacement;\n }\n mesh.dispose?.(true, false);\n replacementTransformNodes.push(replacement);\n }\n if (replacementTransformNodes.length === 0) return;\n result.meshes = keptMeshes;\n result.transformNodes = [\n ...(result.transformNodes ?? []),\n ...replacementTransformNodes,\n ];\n}\n\nfunction collectProjectionSourceMeshReferences(meshes: readonly any[]): Set<any> {\n const sourceMeshes = new Set<any>();\n for (const mesh of meshes) {\n const sourceMesh = mesh?.sourceMesh;\n if (sourceMesh) sourceMeshes.add(sourceMesh);\n }\n return sourceMeshes;\n}\n\nfunction canCollapseProjectionWrapperMesh(mesh: any, sourceMeshes: ReadonlySet<any>): boolean {\n if (!mesh || mesh.getClassName?.() !== 'Mesh') return false;\n if (sourceMeshes.has(mesh)) return false;\n if (mesh.sourceMesh) return false;\n const vertices = mesh.getTotalVertices?.();\n if (vertices !== 0) return false;\n if (Array.isArray(mesh.instances) && mesh.instances.length > 0) return false;\n if (mesh.skeleton || mesh.morphTargetManager) return false;\n if (Array.isArray(mesh.subMeshes) && mesh.subMeshes.length > 0) return false;\n if (mesh.material) return false;\n const projection = readProjectionObject(mesh.metadata?.editorProjection);\n const runtimeKind = projection?.runtimeKind;\n if (\n runtimeKind === 'assetMeshSelectionProxy'\n || runtimeKind === 'primitive'\n || runtimeKind === 'camera'\n || runtimeKind === 'light'\n || projection?.primitiveShape != null\n || projection?.helper != null\n || projection?.disableStaticProjectedShadow === false\n ) {\n return false;\n }\n return true;\n}\n\nfunction createProjectionWrapperTransformNode(\n TransformNode: new (name: string, scene: RuntimeScene) => any,\n scene: RuntimeScene,\n mesh: any,\n): any | null {\n const name = typeof mesh.name === 'string' ? mesh.name : typeof mesh.id === 'string' ? mesh.id : 'projectionWrapper';\n const replacement = new TransformNode(name, scene);\n if (typeof mesh.id === 'string') replacement.id = mesh.id;\n if (typeof mesh.name === 'string') replacement.name = mesh.name;\n replacement.parent = mesh.parent ?? null;\n if (mesh.metadata && typeof mesh.metadata === 'object') {\n replacement.metadata = { ...mesh.metadata };\n }\n if (mesh.reservedDataStore && typeof mesh.reservedDataStore === 'object') {\n replacement.reservedDataStore = { ...mesh.reservedDataStore };\n }\n if (Array.isArray(mesh.animations)) replacement.animations = [...mesh.animations];\n copyProjectionWrapperTransform(mesh, replacement);\n if (typeof mesh.isEnabled === 'function' && typeof replacement.setEnabled === 'function') {\n replacement.setEnabled(mesh.isEnabled());\n }\n if (typeof mesh.state === 'string') replacement.state = mesh.state;\n if (typeof mesh.layerMask === 'number') replacement.layerMask = mesh.layerMask;\n return replacement;\n}\n\nfunction copyProjectionWrapperTransform(source: any, target: any): void {\n copyBabylonVector3(source.position, target.position);\n copyBabylonVector3(source.rotation, target.rotation);\n copyBabylonVector3(source.scaling, target.scaling);\n if (source.rotationQuaternion?.clone) {\n target.rotationQuaternion = source.rotationQuaternion.clone();\n } else {\n target.rotationQuaternion = null;\n }\n const pivotMatrix = source._pivotMatrix?.clone?.() ?? source.getPivotMatrix?.()?.clone?.();\n if (pivotMatrix) {\n if (source._usePivotMatrix && typeof target.setPreTransformMatrix === 'function') {\n target.setPreTransformMatrix(pivotMatrix.clone?.() ?? pivotMatrix);\n } else if (typeof target.setPivotMatrix === 'function') {\n target.setPivotMatrix(pivotMatrix.clone?.() ?? pivotMatrix, false);\n }\n }\n}\n\nfunction copyBabylonVector3(source: any, target: any): void {\n if (!source || !target) return;\n if (typeof target.copyFrom === 'function') {\n target.copyFrom(source);\n return;\n }\n target.x = source.x;\n target.y = source.y;\n target.z = source.z;\n}\n\nfunction readProjectionDirectChildren(node: any): any[] {\n const children = node?.getChildren?.((candidate: any) => candidate?.parent === node, true);\n return Array.isArray(children) ? children.filter(child => child?.parent === node) : [];\n}\n\nfunction createProjectionImportStructureSnapshot(\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): BabylonEditorProjectionImportStructureSnapshot {\n const runtimeNodes = collectProjectionImportRuntimeNodes(modelRoot, result);\n const nodeIdByRuntimeNode = new Map<any, string>();\n const materialIdByRuntimeMaterial = new Map<any, string>();\n const textureIdByRuntimeTexture = new Map<any, string>();\n const materialNodeIds = new Map<string, Set<string>>();\n const materialTextureIds = new Map<string, Set<string>>();\n const rootSnapshotId = 'root';\n const snapshots: BabylonEditorProjectionImportNodeSnapshot[] = [{\n id: rootSnapshotId,\n parentId: null,\n name: readProjectionRuntimeName(modelRoot, node.name ?? node.id),\n kind: 'root',\n }];\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = createProjectionImportRuntimeNodeId(runtimeNode, nodeIdByRuntimeNode.size);\n nodeIdByRuntimeNode.set(runtimeNode, snapshotId);\n }\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = nodeIdByRuntimeNode.get(runtimeNode);\n if (!snapshotId) continue;\n const materialIds = readProjectionRuntimeNodeMaterials(runtimeNode)\n .map(runtimeMaterial => getProjectionImportMaterialSnapshotId(runtimeMaterial, materialIdByRuntimeMaterial))\n .filter((materialId): materialId is string => !!materialId);\n for (const materialId of materialIds) {\n const nodeIds = materialNodeIds.get(materialId) ?? new Set<string>();\n nodeIds.add(snapshotId);\n materialNodeIds.set(materialId, nodeIds);\n const textureIds = readProjectionRuntimeMaterialTextures(readProjectionRuntimeNodeMaterialById(runtimeNode, runtimeNode, materialId, materialIdByRuntimeMaterial))\n .map(runtimeTexture => getProjectionImportTextureSnapshotId(runtimeTexture, textureIdByRuntimeTexture))\n .filter((textureId): textureId is string => !!textureId);\n const materialTextures = materialTextureIds.get(materialId) ?? new Set<string>();\n for (const textureId of textureIds) materialTextures.add(textureId);\n materialTextureIds.set(materialId, materialTextures);\n }\n snapshots.push({\n id: snapshotId,\n parentId: resolveProjectionImportRuntimeParentId(runtimeNode, modelRoot, nodeIdByRuntimeNode, rootSnapshotId),\n name: readProjectionRuntimeName(runtimeNode, snapshotId),\n kind: isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'transform',\n ...readProjectionRuntimeSourceName(runtimeNode),\n ...readProjectionRuntimeOwnerNodePath(runtimeNode),\n ...(materialIds.length > 0 ? { materialIds } : {}),\n });\n }\n\n const materials = [...materialIdByRuntimeMaterial.entries()].map(([runtimeMaterial, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeMaterial, id),\n ...readProjectionRuntimeKind(runtimeMaterial),\n nodeIds: [...(materialNodeIds.get(id) ?? [])],\n textureIds: [...(materialTextureIds.get(id) ?? [])],\n }));\n const textures = [...textureIdByRuntimeTexture.entries()].map(([runtimeTexture, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeTexture, id),\n ...readProjectionRuntimeKind(runtimeTexture),\n ...readProjectionRuntimeTextureUrl(runtimeTexture),\n }));\n const animations = createProjectionImportAnimationSnapshots(result.animationGroups ?? []);\n\n return {\n projectionNodeId: node.id,\n ...(asset.id ? { assetId: asset.id } : {}),\n ...(asset.sourceId ? { sourceId: asset.sourceId } : {}),\n nodes: snapshots,\n materials,\n textures,\n animations,\n };\n}\n\nfunction collectProjectionImportRuntimeNodes(\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): any[] {\n const known = new Set<any>([\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ].filter(Boolean));\n const ordered: any[] = [];\n const visit = (runtimeNode: any): void => {\n for (const child of readProjectionRuntimeChildren(runtimeNode)) {\n if (!known.has(child) || ordered.includes(child)) continue;\n ordered.push(child);\n visit(child);\n }\n };\n visit(modelRoot);\n for (const runtimeNode of known) {\n if (!ordered.includes(runtimeNode)) ordered.push(runtimeNode);\n }\n return ordered;\n}\n\nfunction readProjectionRuntimeChildren(runtimeNode: any): any[] {\n const children = runtimeNode?.getChildren?.();\n return Array.isArray(children) ? children : [];\n}\n\nfunction createProjectionImportRuntimeNodeId(runtimeNode: any, index: number): string {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n const rawName = sourceName || runtimeNode?.name || runtimeNode?.id || `node-${index + 1}`;\n return `${isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'node'}:${sanitizeProjectionImportSnapshotId(rawName)}:${index + 1}`;\n}\n\nfunction resolveProjectionImportRuntimeParentId(\n runtimeNode: any,\n modelRoot: any,\n nodeIdByRuntimeNode: ReadonlyMap<any, string>,\n rootSnapshotId: string,\n): string | null {\n const parent = runtimeNode?.parent ?? null;\n if (!parent || parent === modelRoot) return rootSnapshotId;\n return nodeIdByRuntimeNode.get(parent) ?? rootSnapshotId;\n}\n\nfunction isProjectionRuntimeMeshLike(runtimeNode: any): boolean {\n return typeof runtimeNode?.getTotalVertices === 'function';\n}\n\nfunction readProjectionRuntimeNodeMaterials(runtimeNode: any): any[] {\n const material = runtimeNode?.material;\n if (!material) return [];\n const subMaterials = material.subMaterials;\n if (Array.isArray(subMaterials) && subMaterials.length > 0) {\n return subMaterials.filter(Boolean);\n }\n return [material];\n}\n\nfunction readProjectionRuntimeNodeMaterialById(\n runtimeNode: any,\n _fallbackNode: any,\n materialId: string,\n materialIdByRuntimeMaterial: ReadonlyMap<any, string>,\n): any | null {\n for (const material of readProjectionRuntimeNodeMaterials(runtimeNode)) {\n if (materialIdByRuntimeMaterial.get(material) === materialId) return material;\n }\n return null;\n}\n\nfunction getProjectionImportMaterialSnapshotId(\n runtimeMaterial: any,\n materialIdByRuntimeMaterial: Map<any, string>,\n): string | null {\n if (!runtimeMaterial) return null;\n const existing = materialIdByRuntimeMaterial.get(runtimeMaterial);\n if (existing) return existing;\n const id = `material:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(runtimeMaterial, 'material'))}:${materialIdByRuntimeMaterial.size + 1}`;\n materialIdByRuntimeMaterial.set(runtimeMaterial, id);\n return id;\n}\n\nfunction readProjectionRuntimeMaterialTextures(runtimeMaterial: any | null): any[] {\n if (!runtimeMaterial) return [];\n const textures = runtimeMaterial.getActiveTextures?.();\n return Array.isArray(textures) ? textures.filter(Boolean) : [];\n}\n\nfunction getProjectionImportTextureSnapshotId(\n runtimeTexture: any,\n textureIdByRuntimeTexture: Map<any, string>,\n): string | null {\n if (!runtimeTexture) return null;\n const existing = textureIdByRuntimeTexture.get(runtimeTexture);\n if (existing) return existing;\n const name = readProjectionRuntimeTextureUrl(runtimeTexture).url\n ?? readProjectionRuntimeName(runtimeTexture, 'texture');\n const id = `texture:${sanitizeProjectionImportSnapshotId(name)}:${textureIdByRuntimeTexture.size + 1}`;\n textureIdByRuntimeTexture.set(runtimeTexture, id);\n return id;\n}\n\nfunction createProjectionImportAnimationSnapshots(animationGroups: any[]): BabylonEditorProjectionImportAnimationSnapshot[] {\n return animationGroups.filter(Boolean).map((animationGroup, index) => ({\n id: `animation:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(animationGroup, 'animation'))}:${index + 1}`,\n name: readProjectionRuntimeName(animationGroup, `Animation ${index + 1}`),\n }));\n}\n\nfunction readProjectionRuntimeName(runtimeObject: any, fallback: string): string {\n const name = runtimeObject?.name ?? runtimeObject?.id;\n return typeof name === 'string' && name.trim() ? name.trim() : fallback;\n}\n\nfunction readProjectionRuntimeKind(runtimeObject: any): { kind?: string } {\n const kind = runtimeObject?.getClassName?.();\n return typeof kind === 'string' && kind.trim() ? { kind: kind.trim() } : {};\n}\n\nfunction readProjectionRuntimeTextureUrl(runtimeTexture: any): { url?: string } {\n const url = runtimeTexture?.url ?? runtimeTexture?.name;\n return typeof url === 'string' && url.trim() ? { url: url.trim() } : {};\n}\n\nfunction readProjectionRuntimeSourceName(runtimeNode: any): { sourceName?: string } {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n return sourceName ? { sourceName } : {};\n}\n\nfunction readProjectionRuntimeOwnerNodePath(runtimeNode: any): { ownerNodePath?: string } {\n const ownerNodePath = runtimeNode?.metadata?.editorProjection?.ownerNodePath;\n return typeof ownerNodePath === 'string' && ownerNodePath.trim() ? { ownerNodePath: ownerNodePath.trim() } : {};\n}\n\nfunction sanitizeProjectionImportSnapshotId(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/gi, '-').replace(/^-+|-+$/g, '') || 'item';\n}\n\nfunction cloneProjectionImportStructureSnapshot(\n snapshot: BabylonEditorProjectionImportStructureSnapshot | null,\n): BabylonEditorProjectionImportStructureSnapshot | null {\n if (!snapshot) return null;\n return {\n ...snapshot,\n nodes: snapshot.nodes.map(item => ({\n ...item,\n ...(item.materialIds ? { materialIds: [...item.materialIds] } : {}),\n })),\n materials: snapshot.materials.map(item => ({\n ...item,\n nodeIds: [...item.nodeIds],\n textureIds: [...item.textureIds],\n })),\n textures: snapshot.textures.map(item => ({ ...item })),\n animations: snapshot.animations.map(item => ({ ...item })),\n };\n}\n\nfunction disposeImportedProjectionResult(result: BabylonEditorProjectionImportResult): void {\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.dispose?.();\n }\n for (const node of [...(result.meshes ?? []), ...(result.transformNodes ?? [])]) {\n node.dispose?.();\n }\n}\n\nfunction attachRuntimeProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.runtimeKind === 'camera') {\n attachCameraProjection(babylon, scene, node, projection);\n return true;\n }\n if (node.runtimeKind === 'light') {\n if (node.light?.type === 'hemispheric') {\n attachHemisphericLightProjection(babylon, scene, node, projection);\n } else {\n attachDirectionalLightProjection(babylon, scene, node, projection);\n }\n return true;\n }\n return false;\n}\n\nfunction attachCameraProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n\n const settings = normalizeBabylonEditorProjectionCameraSettings(node.camera);\n const body = MeshBuilder.CreateBox(`${node.id}.cameraHelper`, {\n width: 0.38,\n height: 0.28,\n depth: 0.24,\n }, scene);\n body.parent = projection.root;\n body.metadata = createProjectionMetadata(node.id, { runtimeKind: 'camera', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.cameraHelper.material`, scene);\n material.diffuseColor = new Color3(0.45, 0.68, 1);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n body.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [body];\n\n const frustum = createCameraFrustumLines(babylon, scene, node, settings);\n if (frustum) {\n frustum.parent = projection.root;\n frustum.isPickable = false;\n }\n}\n\nfunction attachDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const DirectionalLight = (babylon as any).DirectionalLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const direction = new Vector3(settings.direction.x, settings.direction.y, settings.direction.z);\n\n if (DirectionalLight) {\n const light = new DirectionalLight(`${node.id}.directionalLight`, direction, scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'directional' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateBox(`${node.id}.lightHelper`, {\n size: 0.28,\n }, scene);\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.lightHelper.material`, scene);\n material.diffuseColor = new Color3(1, 0.92, 0.42);\n material.emissiveColor = new Color3(0.5, 0.42, 0.12);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n\n const arrow = createLightDirectionLines(babylon, scene, node, settings.direction);\n if (arrow) {\n arrow.parent = projection.root;\n arrow.isPickable = false;\n }\n}\n\nfunction attachFallbackProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n rendererFallback: boolean,\n): void {\n const mesh = createFallbackProjectionMesh(babylon, scene, node, rendererFallback);\n if (!mesh) return;\n mesh.parent = projection.root;\n projection.outlineMeshes = [mesh];\n}\n\nfunction attachPrimitiveProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const { babylon, scene } = options;\n const mesh = createPrimitiveProjectionMesh(babylon, scene, node, options);\n if (!mesh) {\n attachFallbackProjection(babylon, scene, node, projection, true);\n return;\n }\n mesh.parent = projection.root;\n mesh.isPickable = true;\n if (mesh.material && !isBabylonPrimitiveProjectionSharedMaterial(mesh.material)) {\n projection.runtimeObjects.push(mesh.material);\n }\n projection.outlineMeshes = [mesh];\n}\n\nfunction applyProjectionOutline(\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const options = createBabylonDefaultOutlineOptions(node.outline);\n if (!options) return;\n for (const mesh of projection.outlineMeshes) {\n applyBabylonDefaultOutline(mesh, options);\n }\n}\n\nfunction createBabylonDefaultOutlineOptions(\n outline: BabylonEditorProjectionOutline | null | undefined,\n): BabylonDefaultOutlineOptions | null {\n if (!outline) return null;\n const options: BabylonDefaultOutlineOptions = {};\n if (typeof outline.renderOutline === 'boolean') options.enabled = outline.renderOutline;\n if (typeof outline.outlineWidth === 'number' && Number.isFinite(outline.outlineWidth)) {\n options.width = outline.outlineWidth;\n }\n if (outline.outlineColor) {\n const color = outline.outlineColor;\n options.color = { r: color.r, g: color.g, b: color.b };\n }\n return Object.keys(options).length > 0 ? options : null;\n}\n\nfunction createPrimitiveProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n options?: Pick<BabylonEditorProjectionOptions, 'resolveTextureUrl'>,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const PBRMaterial = (babylon as any).PBRMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const shape = node.primitive?.shape;\n const name = `${node.id}.${shape ?? 'primitive'}Projection`;\n const mesh = shape === 'sphere'\n ? MeshBuilder.CreateSphere?.(name, { diameter: 1, segments: 32 }, scene)\n : shape === 'plane'\n ? MeshBuilder.CreateGround?.(name, { width: 1, height: 1, subdivisions: 1 }, scene)\n : shape === 'capsule'\n ? MeshBuilder.CreateCapsule?.(name, { height: 2, radius: 0.5, tessellation: 24, subdivisions: 8 }, scene)\n : MeshBuilder.CreateBox?.(name, { size: 1 }, scene);\n if (!mesh) return null;\n const material = node.artistMaterialKind === 'standard' || !PBRMaterial\n ? new StandardMaterial(`${node.id}.primitive.material`, scene)\n : new PBRMaterial(`${node.id}.primitive.material`, scene);\n if ('albedoColor' in material) material.albedoColor = new Color3(0.72, 0.74, 0.76);\n else material.diffuseColor = new Color3(0.72, 0.74, 0.76);\n if ('specularColor' in material) material.specularColor = new Color3(0.12, 0.14, 0.16);\n if ('metallic' in material) material.metallic = 0;\n if ('roughness' in material) material.roughness = 1;\n if (shape === 'plane') material.backFaceCulling = false;\n applyProjectionArtistMaterialProfile({ babylon, scene, resolveTextureUrl: options?.resolveTextureUrl }, material, node.artistMaterialProfile);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'primitive',\n primitiveShape: shape,\n ...createProjectionShadowMetadata(node),\n });\n return mesh;\n}\n\nfunction applyProjectionArtistMaterialProfilesToMeshes(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n modelRoot: any,\n meshes: any[],\n): unknown[] {\n const slotBindings = createProjectionMaterialSlotBindings(node);\n const hasRootProfile = !!node.artistMaterialProfile;\n const hasSlotProfiles = slotBindings.length > 0;\n if (!hasRootProfile && !hasSlotProfiles) return [];\n const clonedMaterials: unknown[] = [];\n const materials = new Set<unknown>();\n if (hasRootProfile) {\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n const meshOwnerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!material) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath,\n warningMessage: 'Root material profile was not applied because an imported mesh has no target material.',\n });\n continue;\n }\n if (materials.has(material)) continue;\n materials.add(material);\n applyProjectionArtistMaterialProfile(options, material, node.artistMaterialProfile);\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: true,\n matchKind: 'root',\n targetMaterialStatus: 'material',\n meshOwnerNodePath,\n targetMaterialName: readProjectionMaterialName(material),\n targetMaterialType: readProjectionMaterialType(material),\n });\n }\n if (materials.size === 0 && meshes.length === 0) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath: null,\n warningMessage: 'Root material profile was not applied because the imported model produced no meshes.',\n });\n }\n }\n if (!hasSlotProfiles) return clonedMaterials;\n const materialCounts = countProjectionMeshMaterials(meshes);\n const assetMaterialSlots = node.asset ? readProjectionAssetMaterialSlots(node.asset, node.id) : [];\n const unmatchedSlotBindings = new Set(slotBindings);\n for (const mesh of meshes) {\n const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n const meshSlotBindingMatches = resolveProjectionSlotBindingMatches(slotBindings, ownerNodePath, node.id);\n for (const { binding: slotBinding, matchKind } of meshSlotBindingMatches) {\n unmatchedSlotBindings.delete(slotBinding);\n if (!readProjectionWritableMeshMaterial(mesh)) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: 'missingMaterial',\n warningMessage: 'Slot material profile was not applied because the matched mesh has no target material.',\n });\n continue;\n }\n const resolution = resolveProjectionSlotMaterialTarget(mesh, materialCounts, slotBinding.slot, ownerNodePath, {\n projectionNodeId: node.id,\n primitiveSingleMaterialFallbackAllowed: isProjectionSinglePrimitiveMaterialSlot(slotBinding.slot, assetMaterialSlots),\n });\n const targetMaterial = resolution.target?.material ?? readProjectionWritableMeshMaterial(mesh);\n if (!resolution.target) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: resolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(targetMaterial),\n targetMaterialType: readProjectionMaterialType(targetMaterial),\n warningMessage: resolution.warningMessage,\n });\n continue;\n }\n const target = resolution.target;\n clonedMaterials.push(...target.clonedMaterials);\n applyProjectionArtistMaterialProfile(options, target.material, slotBinding.profile);\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: true,\n matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: resolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(target.material),\n targetMaterialType: readProjectionMaterialType(target.material),\n });\n }\n }\n for (const slotBinding of unmatchedSlotBindings) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: 'none',\n meshOwnerNodePath: null,\n targetMaterialStatus: 'missingMeshOwner',\n warningMessage: 'Slot material profile was not applied because no imported mesh matched its owner path.',\n });\n }\n return clonedMaterials;\n}\n\nfunction applyProjectionArtistMaterialProfile(\n options: Pick<BabylonEditorProjectionOptions, 'babylon' | 'scene' | 'resolveTextureUrl'>,\n material: unknown,\n profile: ArtistMaterialProfile | null | undefined,\n): void {\n if (!profile) return;\n applyArtistMaterialProfileToRuntimeMaterial(material, options.scene, profile, {\n babylon: options.babylon,\n resolveTextureUrl: options.resolveTextureUrl,\n });\n}\n\nfunction emitProjectionSlotMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n projectionNodeId: string,\n slotBinding: ProjectionMaterialSlotBinding,\n diagnostic: Omit<BabylonEditorProjectionMaterialProfileDiagnostic, 'projectionNodeId' | 'source' | 'slotId' | 'ownerNodePath' | 'primitiveIndex'>,\n): void {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId,\n source: slotBinding.source,\n slotId: slotBinding.slot.slotId,\n ownerNodePath: slotBinding.slot.ownerNodePath,\n primitiveIndex: slotBinding.slot.primitiveIndex,\n ...diagnostic,\n });\n}\n\nfunction emitProjectionMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic,\n): void {\n options.onMaterialProfileDiagnostic?.(diagnostic);\n if (!diagnostic.warningMessage) return;\n options.logger?.warn?.('[BabylonEditorProjection] Material profile diagnostic warning', {\n projectionNodeId: diagnostic.projectionNodeId,\n source: diagnostic.source,\n slotId: diagnostic.slotId,\n ownerNodePath: diagnostic.ownerNodePath,\n meshOwnerNodePath: diagnostic.meshOwnerNodePath,\n matchKind: diagnostic.matchKind,\n targetMaterialStatus: diagnostic.targetMaterialStatus,\n warningMessage: diagnostic.warningMessage,\n });\n}\n\nfunction readProjectionMaterialName(material: unknown): string | undefined {\n const name = (material as any)?.name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\nfunction readProjectionMaterialType(material: unknown): string | null | undefined {\n const getClassName = (material as any)?.getClassName;\n const className = typeof getClassName === 'function' ? getClassName.call(material) : null;\n return typeof className === 'string' && className.trim() ? className.trim() : className;\n}\n\nfunction createProjectionMaterialSlotBindings(\n node: Pick<BabylonEditorProjectionNode, 'artistMaterialSlotBindings' | 'id'>,\n): ProjectionMaterialSlotBinding[] {\n const bindings: ProjectionMaterialSlotBinding[] = [];\n for (const binding of node.artistMaterialSlotBindings ?? []) {\n const profile = binding?.profile;\n const slot = createProjectionMaterialSlotDescriptor(binding?.slot, node.id);\n if (!profile || !slot) continue;\n bindings.push({ slot, profile, source: 'slotBinding' });\n }\n return bindings;\n}\n\nfunction createProjectionMaterialSlotDescriptor(\n value: ProjectionMaterialSlotDescriptorInput | null | undefined,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object') return null;\n const ownerNodePath = typeof value.ownerNodePath === 'string'\n ? normalizeProjectionOwnerNodePath(value.ownerNodePath, { projectionNodeId })\n : '';\n const slotId = typeof value.slotId === 'string' && value.slotId.trim() ? value.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof value.label === 'string' && value.label.trim() ? value.label.trim() : '';\n const nodeIndex = Number.isInteger(value.nodeIndex) ? value.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(value.nodeIndexPath)\n ? value.nodeIndexPath.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const meshIndex = Number.isInteger(value.meshIndex) ? value.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(value.primitiveIndex) ? value.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(value.sourceMaterialIndex) ? value.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(value.sourceMaterialIndices)\n ? value.sourceMaterialIndices.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const materialName = typeof value.materialName === 'string' && value.materialName.trim() ? value.materialName.trim() : '';\n const materialNames = Array.isArray(value.materialNames)\n ? value.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = Number.isFinite(value.triangleCount) ? value.triangleCount as number : undefined;\n const boundingBox = readProjectionMaterialSlotBoundingBox(value.boundingBox);\n return {\n slotId,\n ownerNodePath,\n ...(label ? { label } : {}),\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0\n ? { sourceMaterialIndices }\n : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n key: slotId || ownerNodePath,\n normalizedOwnerNodePath: ownerNodePath,\n matchKey: createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId }),\n };\n}\n\nfunction readProjectionMaterialSlotBoundingBox(value: unknown): ProjectionMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readProjectionMaterialSlotBoundsTuple(record.min);\n const max = readProjectionMaterialSlotBoundsTuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readProjectionMaterialSlotBoundsTuple(value: unknown): [number, number, number] | undefined {\n if (!Array.isArray(value) || value.length < 3) return undefined;\n const tuple = value.slice(0, 3).map(item => Number(item));\n if (!tuple.every(item => Number.isFinite(item))) return undefined;\n return tuple as [number, number, number];\n}\n\nfunction resolveProjectionSlotBindingMatches(\n slotBindings: readonly ProjectionMaterialSlotBinding[],\n ownerNodePath: string | null,\n projectionNodeId?: string,\n): ProjectionMaterialSlotBindingMatch[] {\n if (ownerNodePath == null) return [];\n const normalized = normalizeProjectionOwnerNodePath(ownerNodePath, { projectionNodeId });\n const normalizedMatchKey = createMaterialSlotOwnerPathMatchKey(normalized, { projectionNodeId });\n const exactMatches: ProjectionMaterialSlotBindingMatch[] = [];\n const descendantMatches: ProjectionMaterialSlotBindingMatch[] = [];\n let descendantMatchLength = -1;\n for (const binding of slotBindings) {\n if (binding.slot.matchKey === normalizedMatchKey) {\n exactMatches.push({ binding, matchKind: 'exact' });\n continue;\n }\n if (isMaterialSlotOwnerPathMatch(normalized, binding.slot.normalizedOwnerNodePath, { projectionNodeId })) {\n if (binding.slot.matchKey.length > descendantMatchLength) {\n descendantMatches.length = 0;\n descendantMatchLength = binding.slot.matchKey.length;\n }\n if (binding.slot.matchKey.length === descendantMatchLength) {\n descendantMatches.push({ binding, matchKind: 'descendant' });\n }\n }\n }\n return exactMatches.length > 0 ? exactMatches : descendantMatches;\n}\n\nfunction buildProjectionOwnerNodePath(node: any, rootNode: any, projectionNodeId?: string): string | null {\n if (!node || !rootNode || node === rootNode) return '';\n const segments: string[] = [];\n let current = node;\n while (current && current !== rootNode) {\n const segment = stableProjectionNodeSegment(current);\n if (!segment) return null;\n segments.push(segment);\n current = current.parent ?? null;\n }\n if (current !== rootNode) return null;\n return normalizeProjectionOwnerNodePath(segments.reverse().join('/'), { projectionNodeId });\n}\n\nfunction stableProjectionNodeSegment(node: any): string | null {\n const sourceSegment = readProjectionSourceNodeSegment(node);\n if (sourceSegment) return sourceSegment;\n const candidates = [node?.name, node?.id];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue;\n const trimmed = candidate.trim();\n if (trimmed) return trimmed;\n }\n return null;\n}\n\nfunction createAssetMeshProjectionNodeId(rootNodeId: string, ownerNodePath: string): string {\n return `${rootNodeId}${ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(ownerNodePath)}`;\n}\n\nfunction resolveProjectionAssetMeshSelectionKey(\n asset: BabylonEditorProjectionAsset,\n ownerNodePath: string,\n projectionNodeId?: string,\n): string {\n const normalizedOwnerPath = normalizeProjectionOwnerNodePath(ownerNodePath, { projectionNodeId });\n let bestSlot: ProjectionMaterialSlotDescriptor | null = null;\n for (const slot of readProjectionAssetMaterialSlots(asset, projectionNodeId)) {\n if (!isMaterialSlotOwnerPathMatch(normalizedOwnerPath, slot.normalizedOwnerNodePath, { projectionNodeId })) continue;\n if (!bestSlot || slot.matchKey.length > bestSlot.matchKey.length) {\n bestSlot = slot;\n }\n }\n return bestSlot?.key ?? ownerNodePath;\n}\n\nfunction resolveProjectionAssetMeshSelectionSlots(\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n ownerNodePath: string,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor[] {\n const normalizedOwnerPath = normalizeProjectionOwnerNodePath(ownerNodePath, { projectionNodeId });\n const normalizedMatchKey = createMaterialSlotOwnerPathMatchKey(normalizedOwnerPath, { projectionNodeId });\n const exactMatches: ProjectionMaterialSlotDescriptor[] = [];\n const descendantMatches: ProjectionMaterialSlotDescriptor[] = [];\n let descendantMatchLength = -1;\n for (const slot of materialSlots) {\n if (slot.matchKey === normalizedMatchKey) {\n exactMatches.push(slot);\n continue;\n }\n if (isMaterialSlotOwnerPathMatch(normalizedOwnerPath, slot.normalizedOwnerNodePath, { projectionNodeId })) {\n if (slot.matchKey.length > descendantMatchLength) {\n descendantMatches.length = 0;\n descendantMatchLength = slot.matchKey.length;\n }\n if (slot.matchKey.length === descendantMatchLength) descendantMatches.push(slot);\n }\n }\n return exactMatches.length > 0 ? exactMatches : descendantMatches;\n}\n\nfunction createProjectionAssetMeshSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n): any[] {\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(materialSlots, ownerNodePath, node.id)\n .filter(slot => Number.isInteger(slot.primitiveIndex));\n if (primitiveSlots.length <= 1) return [];\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length <= 1) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const subMesh = subMeshes[primitiveIndex];\n if (!subMesh) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionSubMeshSelectionProxy(options, node, mesh, subMesh, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh: any,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n ownerNodePath: string,\n projectionNodeId: string,\n ownerMeshCount: number,\n ordinalByOwnerKey: Map<string, number>,\n): ProjectionMaterialSlotDescriptor | null {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return null;\n if ((mesh?.getTotalVertices?.() ?? 0) <= 0) return null;\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(materialSlots, ownerNodePath, projectionNodeId)\n .filter((slot): slot is ProjectionMaterialSlotDescriptor & { primitiveIndex: number } => (\n Number.isInteger(slot.primitiveIndex)\n ))\n .sort((left, right) => left.primitiveIndex - right.primitiveIndex);\n if (primitiveSlots.length <= 1) return null;\n if (ownerMeshCount < primitiveSlots.length) return null;\n\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId });\n const ordinal = ordinalByOwnerKey.get(ownerKey) ?? 0;\n ordinalByOwnerKey.set(ownerKey, ordinal + 1);\n\n const namedSlot = primitiveSlots.find(slot => isProjectionRuntimeSplitPrimitiveOwnerNode(mesh, slot));\n if (namedSlot) return namedSlot;\n return primitiveSlots.find(slot => slot.primitiveIndex === ordinal) ?? primitiveSlots[ordinal] ?? null;\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n ownerMeshCount: number,\n): any[] {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return [];\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(materialSlots, ownerNodePath, node.id)\n .filter(slot => Number.isInteger(slot.primitiveIndex) && !!slot.boundingBox)\n .sort((left, right) => (left.primitiveIndex ?? 0) - (right.primitiveIndex ?? 0));\n if (primitiveSlots.length <= 1) return [];\n if (ownerMeshCount >= primitiveSlots.length) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionPrimitiveBoundsSelectionProxy(options, node, mesh, slot, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n slot: ProjectionMaterialSlotDescriptor,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const bounds = readProjectionPrimitiveSlotBounds(slot);\n if (!bounds) return null;\n\n const size = {\n x: Math.max(Math.abs(bounds.max.x - bounds.min.x), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n y: Math.max(Math.abs(bounds.max.y - bounds.min.y), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n z: Math.max(Math.abs(bounds.max.z - bounds.min.z), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n };\n const center = {\n x: (bounds.min.x + bounds.max.x) / 2,\n y: (bounds.min.y + bounds.max.y) / 2,\n z: (bounds.min.z + bounds.max.z) / 2,\n };\n const proxy = MeshBuilder.CreateBox(\n `${sourceMesh.name ?? node.id}.selectionBoundsProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`,\n {\n width: size.x,\n height: size.y,\n depth: size.z,\n },\n scene,\n );\n if (!proxy) return null;\n proxy.parent = sourceMesh;\n proxy.position.x = center.x;\n proxy.position.y = center.y;\n proxy.position.z = center.z;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjectionSelectionBoundsProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionPrimitiveSlotBounds(\n slot: ProjectionMaterialSlotDescriptor,\n): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n const min = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.min);\n const max = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.max);\n if (!min || !max) return null;\n return { min, max };\n}\n\nfunction readProjectionMaterialSlotBoundsVec3(value: readonly number[] | undefined): EditorTransformVec3 | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value.map(item => Number(item));\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;\n return { x, y, z };\n}\n\nfunction isProjectionRuntimeSplitPrimitiveOwnerNode(\n ownerNode: any,\n slot: ProjectionMaterialSlotDescriptor,\n): boolean {\n if (slot.primitiveIndex == null) return false;\n const primitiveNames = new Set<string>();\n for (const baseName of [\n slot.ownerNodePath,\n readProjectionOwnerPathLastSegment(slot.ownerNodePath),\n stripProjectionPrimitiveLabelSuffix(readProjectionSlotLabel(slot)),\n readProjectionSlotLabel(slot),\n ]) {\n addProjectionRuntimeOwnerName(\n primitiveNames,\n appendProjectionPrimitiveOwnerSuffix(baseName, slot.primitiveIndex),\n );\n }\n return collectProjectionRuntimeNodeMatchNames(ownerNode).some(name => primitiveNames.has(name));\n}\n\nfunction collectProjectionRuntimeNodeMatchNames(node: any): string[] {\n const rawNames = [\n typeof node?.name === 'string' ? node.name : null,\n typeof node?.id === 'string' ? node.id : null,\n readProjectionRuntimeNodeDisplayName(node),\n readProjectionSourceNodeSegment(node),\n ];\n const names = new Set<string>();\n for (const rawName of rawNames) {\n addProjectionRuntimeOwnerName(names, rawName);\n for (const tailName of collectProjectionRuntimeOwnerTailNames(rawName)) {\n addProjectionRuntimeOwnerName(names, tailName);\n }\n }\n return [...names];\n}\n\nfunction readProjectionRuntimeNodeDisplayName(node: any): string | null {\n const name = typeof node?.name === 'string' ? node.name.trim() : '';\n const id = typeof node?.id === 'string' ? node.id.trim() : '';\n if (name && id && name !== id) return `${name} (${id})`;\n return name || id || null;\n}\n\nfunction collectProjectionRuntimeOwnerTailNames(value: string | null | undefined): string[] {\n const raw = typeof value === 'string' ? value.trim() : '';\n if (!raw) return [];\n const names = new Set<string>();\n const withoutClonePrefix = raw.replace(/^Clone of\\s+/i, '').trim();\n for (const candidate of [raw, withoutClonePrefix]) {\n const colonTail = candidate.includes(':') ? candidate.split(':').pop() : '';\n const dotTail = candidate.includes('.') ? candidate.split('.').pop() : '';\n if (colonTail) names.add(colonTail);\n if (dotTail) names.add(dotTail);\n }\n return [...names];\n}\n\nfunction readProjectionOwnerPathLastSegment(ownerNodePath: string): string | null {\n const segments = ownerNodePath.split('/').map(segment => segment.trim()).filter(Boolean);\n return segments.length > 0 ? segments[segments.length - 1] ?? null : null;\n}\n\nfunction stripProjectionPrimitiveLabelSuffix(value: string | null | undefined): string | null {\n if (typeof value !== 'string') return null;\n const stripped = value.replace(/\\s*\\/\\s*Primitive\\s+\\d+\\s*$/i, '').trim();\n return stripped || null;\n}\n\nfunction appendProjectionPrimitiveOwnerSuffix(value: string | null | undefined, primitiveIndex: number): string | null {\n if (typeof value !== 'string') return null;\n const baseName = stripProjectionPrimitiveLabelSuffix(value) ?? value.trim();\n return baseName ? `${baseName}_primitive${primitiveIndex}` : null;\n}\n\nfunction readProjectionSlotLabel(slot: ProjectionMaterialSlotDescriptor): string | null {\n const label = typeof slot.label === 'string' ? slot.label.trim() : '';\n if (label) return label;\n const materialName = typeof slot.materialName === 'string' ? slot.materialName.trim() : '';\n return materialName || null;\n}\n\nfunction addProjectionRuntimeOwnerName(names: Set<string>, value: string | null | undefined): void {\n const normalized = normalizeProjectionRuntimeOwnerName(value);\n if (normalized) names.add(normalized);\n}\n\nfunction normalizeProjectionRuntimeOwnerName(value: string | null | undefined): string | null {\n const trimmed = typeof value === 'string' ? value.trim() : '';\n if (!trimmed) return null;\n return createMaterialSlotOwnerPathMatchKey(trimmed);\n}\n\nfunction createProjectionSubMeshSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n subMesh: any,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const Mesh = (babylon as any).Mesh;\n const VertexData = (babylon as any).VertexData;\n const VertexBuffer = (babylon as any).VertexBuffer;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!Mesh || !VertexData || !VertexBuffer || !StandardMaterial) return null;\n\n const positions = sourceMesh.getVerticesData?.(VertexBuffer.PositionKind, true, true);\n if (!positions || positions.length < 9) return null;\n const sourceIndices = sourceMesh.getIndices?.(true, true) ?? null;\n const subIndices = readProjectionSubMeshIndices(sourceIndices, subMesh);\n if (subIndices.length < 3) return null;\n\n const indexMap = new Map<number, number>();\n const proxyPositions: number[] = [];\n const proxyIndices: number[] = [];\n for (const sourceIndex of subIndices) {\n const vertexIndex = Number(sourceIndex);\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0) continue;\n let mappedIndex = indexMap.get(vertexIndex);\n if (mappedIndex == null) {\n const positionIndex = vertexIndex * 3;\n if (positionIndex + 2 >= positions.length) continue;\n mappedIndex = indexMap.size;\n indexMap.set(vertexIndex, mappedIndex);\n proxyPositions.push(\n Number(positions[positionIndex] ?? 0),\n Number(positions[positionIndex + 1] ?? 0),\n Number(positions[positionIndex + 2] ?? 0),\n );\n }\n proxyIndices.push(mappedIndex);\n }\n if (proxyPositions.length < 9 || proxyIndices.length < 3) return null;\n\n const proxy = new Mesh(`${sourceMesh.name ?? node.id}.selectionProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`, scene);\n proxy.parent = sourceMesh;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const vertexData = new VertexData();\n vertexData.positions = proxyPositions;\n vertexData.indices = proxyIndices;\n vertexData.applyToMesh(proxy, false);\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionSubMeshIndices(sourceIndices: ArrayLike<number> | null, subMesh: any): number[] {\n const indexStart = Number.isInteger(subMesh?.indexStart) ? subMesh.indexStart as number : 0;\n const indexCount = Number.isInteger(subMesh?.indexCount) ? subMesh.indexCount as number : 0;\n if (sourceIndices && indexCount > 0) {\n return Array.from(sourceIndices).slice(indexStart, indexStart + indexCount);\n }\n const verticesStart = Number.isInteger(subMesh?.verticesStart) ? subMesh.verticesStart as number : 0;\n const verticesCount = Number.isInteger(subMesh?.verticesCount) ? subMesh.verticesCount as number : 0;\n return Array.from({ length: Math.max(0, verticesCount) }, (_, index) => verticesStart + index);\n}\n\nfunction readProjectionAssetMaterialSlots(\n asset: BabylonEditorProjectionAsset,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor[] {\n const rawSlots = asset.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: ProjectionMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readProjectionAssetMaterialSlot(rawSlot, projectionNodeId);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nfunction readProjectionAssetMaterialSlot(value: unknown, projectionNodeId?: string): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return createProjectionMaterialSlotDescriptor(record, projectionNodeId);\n}\n\nfunction countProjectionMeshMaterials(meshes: any[]): Map<unknown, number> {\n const counts = new Map<unknown, number>();\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) continue;\n counts.set(material, (counts.get(material) ?? 0) + 1);\n }\n return counts;\n}\n\nfunction isProjectionSinglePrimitiveMaterialSlot(\n slot: ProjectionMaterialSlotDescriptor,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n): boolean {\n if (slot.primitiveIndex !== 0 || materialSlots.length === 0) return false;\n const matchingPrimitiveSlots = materialSlots.filter(candidate => (\n candidate.primitiveIndex != null\n && candidate.matchKey === slot.matchKey\n && isProjectionMaterialSlotSameMesh(candidate, slot)\n ));\n return matchingPrimitiveSlots.length === 1 && matchingPrimitiveSlots[0]?.primitiveIndex === 0;\n}\n\nfunction isProjectionMaterialSlotSameMesh(\n left: ProjectionMaterialSlotDescriptor,\n right: ProjectionMaterialSlotDescriptor,\n): boolean {\n if (left.meshIndex != null || right.meshIndex != null) {\n return left.meshIndex === right.meshIndex;\n }\n return true;\n}\n\nfunction detachProjectionSlotMaterial(\n mesh: any,\n materialCounts: Map<unknown, number>,\n ownerNodePath: string | null,\n): ProjectionMaterialDetachResult | null {\n const materialOwner = resolveProjectionWritableMaterialOwner(mesh);\n const material = materialOwner?.material;\n if (!material) return null;\n const projectionOwnsMaterialLifecycle = materialOwner === mesh;\n if (typeof material !== 'object') {\n return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n }\n const materialUseCount = materialCounts.get(material) ?? 0;\n if (materialUseCount <= 1) return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n const clone = typeof (material as any).clone === 'function'\n ? (material as any).clone(createProjectionSlotMaterialName(material, ownerNodePath))\n : null;\n if (!clone) return null;\n cloneProjectionSubMaterials(clone, material, ownerNodePath);\n materialOwner.material = clone;\n materialCounts.set(material, materialUseCount - 1);\n materialCounts.set(clone, 1);\n return {\n material: clone,\n clonedMaterials: projectionOwnsMaterialLifecycle ? [clone] : [],\n projectionOwnsMaterialLifecycle,\n };\n}\n\nfunction resolveProjectionSlotMaterialTarget(\n mesh: any,\n materialCounts: Map<unknown, number>,\n slot: ProjectionMaterialSlotDescriptor,\n ownerNodePath: string | null,\n options: {\n projectionNodeId?: string;\n primitiveSingleMaterialFallbackAllowed: boolean;\n },\n): ProjectionMaterialSlotTargetResolution {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) {\n return {\n target: null,\n targetMaterialStatus: 'missingMaterial',\n warningMessage: 'Slot material profile was not applied because the matched mesh has no target material.',\n };\n }\n if (slot.primitiveIndex == null) {\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Slot material profile was not applied because the mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'material',\n };\n }\n if (!Array.isArray((material as any).subMaterials)) {\n const isSplitPrimitiveOwner = isProjectionRuntimeSplitPrimitiveOwnerNode(mesh, slot);\n if (!isSplitPrimitiveOwner && (slot.primitiveIndex !== 0 || !options.primitiveSingleMaterialFallbackAllowed)) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target mesh does not expose a matching subMaterial.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the fallback mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'primitiveFallbackMaterial',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n const slotMaterial = detachResult?.material;\n if (!detachResult || !Array.isArray((slotMaterial as any).subMaterials)) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the multi-material target could not be detached.',\n };\n }\n const subMaterials = (slotMaterial as any).subMaterials;\n const subMaterial = subMaterials[slot.primitiveIndex];\n if (!subMaterial || typeof subMaterial !== 'object' || typeof subMaterial.clone !== 'function') {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial is missing or cannot be cloned.',\n };\n }\n const clonedSubMaterial = subMaterial.clone(createProjectionSlotSubMaterialName(subMaterial, ownerNodePath, slot.primitiveIndex));\n if (!clonedSubMaterial) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial clone failed.',\n };\n }\n subMaterials[slot.primitiveIndex] = clonedSubMaterial;\n return {\n target: {\n material: clonedSubMaterial,\n clonedMaterials: [\n ...detachResult.clonedMaterials,\n ...(detachResult.projectionOwnsMaterialLifecycle ? [clonedSubMaterial] : []),\n ],\n },\n targetMaterialStatus: 'subMaterial',\n };\n}\n\nfunction readProjectionWritableMeshMaterial(mesh: any): unknown | null {\n return resolveProjectionWritableMaterialOwner(mesh)?.material ?? null;\n}\n\nfunction resolveProjectionWritableMaterialOwner(mesh: any): any | null {\n if (!mesh || typeof mesh !== 'object') return null;\n if (isProjectionInstancedMesh(mesh) && mesh.sourceMesh) return mesh.sourceMesh;\n return mesh;\n}\n\nfunction isProjectionInstancedMesh(mesh: any): boolean {\n if (!mesh || typeof mesh !== 'object') return false;\n const className = typeof mesh.getClassName === 'function' ? mesh.getClassName() : undefined;\n return className === 'InstancedMesh'\n || (mesh.constructor?.name === 'InstancedMesh' && !!mesh.sourceMesh);\n}\n\nfunction cloneProjectionSubMaterials(clone: any, source: any, ownerNodePath: string | null): void {\n if (!Array.isArray(clone?.subMaterials) || !Array.isArray(source?.subMaterials)) return;\n clone.subMaterials = source.subMaterials.map((subMaterial: any, index: number) => {\n if (!subMaterial || typeof subMaterial !== 'object') return subMaterial;\n if (typeof subMaterial.clone !== 'function') return subMaterial;\n const clonedSubMaterial = subMaterial.clone(createProjectionSlotSubMaterialName(subMaterial, ownerNodePath, index));\n return clonedSubMaterial ?? subMaterial;\n });\n}\n\nfunction createProjectionSlotMaterialName(material: any, ownerNodePath: string | null): string {\n const baseName = String(material?.name ?? material?.id ?? 'material');\n const suffix = ownerNodePath?.trim()\n ? ownerNodePath.replace(/[^a-zA-Z0-9_-]+/g, '_')\n : 'root';\n return `${baseName}.projectionSlot.${suffix}`;\n}\n\nfunction createProjectionSlotSubMaterialName(material: any, ownerNodePath: string | null, index: number): string {\n return `${createProjectionSlotMaterialName(material, ownerNodePath)}.sub${index}`;\n}\n\nfunction createFallbackProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n rendererFallback: boolean,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const mesh = MeshBuilder.CreateBox(`${node.id}.fallbackProjection`, {\n size: rendererFallback ? 1 : 0.24,\n }, scene);\n const material = new StandardMaterial(`${node.id}.projection.material`, scene);\n if (rendererFallback) {\n material.diffuseColor = new Color3(0.22, 0.55, 0.28);\n } else {\n material.diffuseColor = new Color3(0.5, 0.58, 0.68);\n material.alpha = 0.45;\n }\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n fallback: true,\n ...createProjectionShadowMetadata(node),\n },\n };\n return mesh;\n}\n\nfunction applyProjectionRenderingToMesh(node: BabylonEditorProjectionNode, mesh: any): void {\n const rendering = node.rendering;\n if (!mesh || !rendering) return;\n if (isProjectionRenderingGroupId(rendering.renderingGroupId)) {\n mesh.renderingGroupId = rendering.renderingGroupId;\n }\n if (typeof rendering.alphaIndex === 'number' && Number.isFinite(rendering.alphaIndex)) {\n mesh.alphaIndex = rendering.alphaIndex;\n }\n}\n\nfunction isProjectionRenderingGroupId(value: unknown): value is 0 | 1 | 2 | 3 {\n return value === 0 || value === 1 || value === 2 || value === 3;\n}\n\nfunction createCameraFrustumLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n settings: BabylonEditorProjectionCameraSettings,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const distance = Math.max(0.4, settings.radius * 0.12);\n const aspect = 16 / 9;\n const nearDistance = 0.18;\n let lines: any[];\n\n if (settings.projection === 'perspective') {\n const halfHeight = Math.max(0.12, Math.tan((settings.fov ?? 0.85) / 2) * distance);\n const halfWidth = halfHeight * aspect;\n const origin = new Vector3(0, 0, nearDistance);\n const topLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const topRight = new Vector3(halfWidth, halfHeight, -distance);\n const bottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const bottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [topLeft, topRight, bottomRight, bottomLeft, topLeft],\n [origin, topLeft],\n [origin, topRight],\n [origin, bottomRight],\n [origin, bottomLeft],\n ];\n } else {\n const halfHeight = Math.max(0.12, settings.orthoSize * 0.08);\n const halfWidth = halfHeight * aspect;\n const nearTopLeft = new Vector3(-halfWidth, halfHeight, nearDistance);\n const nearTopRight = new Vector3(halfWidth, halfHeight, nearDistance);\n const nearBottomRight = new Vector3(halfWidth, -halfHeight, nearDistance);\n const nearBottomLeft = new Vector3(-halfWidth, -halfHeight, nearDistance);\n const farTopLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const farTopRight = new Vector3(halfWidth, halfHeight, -distance);\n const farBottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const farBottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [nearTopLeft, nearTopRight, nearBottomRight, nearBottomLeft, nearTopLeft],\n [farTopLeft, farTopRight, farBottomRight, farBottomLeft, farTopLeft],\n [nearTopLeft, farTopLeft],\n [nearTopRight, farTopRight],\n [nearBottomRight, farBottomRight],\n [nearBottomLeft, farBottomLeft],\n ];\n }\n\n const frustum = MeshBuilder.CreateLineSystem(`${node.id}.cameraFrustum`, {\n lines,\n }, scene);\n frustum.color = new Color3(0.45, 0.68, 1);\n frustum.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'camera',\n helper: 'frustum',\n projection: settings.projection,\n orthoSize: settings.orthoSize,\n fov: settings.fov,\n });\n return frustum;\n}\n\nfunction createLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n direction: BabylonEditorProjectionVec3,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const normalized = normalizeProjectionVec3(direction, { x: -0.3, y: -1, z: -0.2 });\n const shaftEnd = new Vector3(normalized.x, normalized.y, normalized.z);\n const arrowLeft = new Vector3(\n shaftEnd.x - normalized.x * 0.22 + normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 - normalized.x * 0.12,\n );\n const arrowRight = new Vector3(\n shaftEnd.x - normalized.x * 0.22 - normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 + normalized.x * 0.12,\n );\n const arrow = MeshBuilder.CreateLineSystem(`${node.id}.lightDirection`, {\n lines: [\n [new Vector3(0, 0, 0), shaftEnd],\n [shaftEnd, arrowLeft],\n [shaftEnd, arrowRight],\n ],\n }, scene);\n arrow.color = new Color3(1, 0.92, 0.42);\n arrow.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n helper: 'direction',\n });\n return arrow;\n}\n\nfunction attachHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const HemisphericLight = (babylon as any).HemisphericLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n\n if (HemisphericLight) {\n const light = new HemisphericLight(`${node.id}.hemisphericLight`, new Vector3(0, 1, 0), scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.groundColor = new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'hemispheric' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateSphere?.(`${node.id}.hemisphericLightHelper`, {\n diameter: 0.32,\n segments: 18,\n }, scene) ?? MeshBuilder.CreateBox?.(`${node.id}.hemisphericLightHelper`, {\n size: 0.28,\n }, scene);\n if (!helper) return;\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n lightType: 'hemispheric',\n helper: 'body',\n });\n const material = new StandardMaterial(`${node.id}.hemisphericLightHelper.material`, scene);\n material.diffuseColor = new Color3(0.72, 0.82, 1);\n material.emissiveColor = new Color3(0.16, 0.28, 0.48);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n}\n\nfunction syncRuntimeLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.light?.type === 'hemispheric') {\n return syncRuntimeHemisphericLightProjection(babylon, scene, node, projection);\n }\n return syncRuntimeDirectionalLightProjection(babylon, scene, node, projection);\n}\n\nfunction syncRuntimeDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'directional');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.lightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n copyOrAssignBabylonVec3(light, 'direction', new Vector3(\n settings.direction.x,\n settings.direction.y,\n settings.direction.z,\n ));\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n if (settings.helperVisible) refreshLightDirectionLines(babylon, scene, node, projection, settings.direction);\n return true;\n}\n\nfunction syncRuntimeHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'hemispheric');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.hemisphericLightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n copyOrAssignBabylonColor(light, 'groundColor', new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n return true;\n}\n\nfunction findProjectionRuntimeLight(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n lightType: 'directional' | 'hemispheric',\n): any | null {\n return projection.runtimeObjects.find(runtimeObject => {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.nodeId === nodeId\n && metadata?.runtimeKind === 'light'\n && metadata?.lightType === lightType;\n }) ?? null;\n}\n\nfunction isProjectionRuntimeLightObject(runtimeObject: any): boolean {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.runtimeKind === 'light'\n && (metadata?.lightType === 'directional' || metadata?.lightType === 'hemispheric');\n}\n\nfunction resyncProjectionSceneLightSources(scene: RuntimeScene): void {\n const meshes = Array.isArray((scene as any).meshes) ? (scene as any).meshes : [];\n const sourceMeshes = new Set<any>();\n const instancedMeshes = new Set<any>();\n for (const mesh of meshes) {\n if (!mesh || typeof mesh !== 'object') continue;\n mesh._resyncLightSources?.();\n const sourceMesh = mesh.sourceMesh;\n if (sourceMesh && sourceMesh !== mesh) {\n sourceMeshes.add(sourceMesh);\n instancedMeshes.add(mesh);\n }\n }\n for (const sourceMesh of sourceMeshes) {\n if (sourceMesh?.isDisposed?.()) continue;\n sourceMesh?._resyncLightSources?.();\n }\n for (const instancedMesh of instancedMeshes) {\n if (instancedMesh?.isDisposed?.()) continue;\n instancedMesh?._markSubMeshesAsLightDirty?.();\n }\n (scene as any).resetCachedMaterial?.();\n}\n\nfunction refreshLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n direction: BabylonEditorProjectionVec3,\n): void {\n const existing = (scene as any).getMeshByName?.(`${node.id}.lightDirection`);\n existing?.dispose?.();\n const arrow = createLightDirectionLines(babylon, scene, node, direction);\n if (!arrow) return;\n arrow.parent = projection.root;\n arrow.isPickable = false;\n}\n\nfunction copyOrAssignBabylonVec3(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nfunction copyOrAssignBabylonColor(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nexport function normalizeBabylonEditorProjectionCameraSettings(\n settings: BabylonEditorProjectionCameraSettings | undefined,\n): BabylonEditorProjectionCameraSettings {\n const targetOffset = readOptionalProjectionVec3(settings?.targetOffset);\n const targetScreenOffset = readOptionalProjectionVec2(settings?.targetScreenOffset);\n return {\n projection: readProjectionCameraMode(settings?.projection),\n alpha: readFiniteNumber(settings?.alpha, 3.9269908169872414),\n beta: readFiniteNumber(settings?.beta, 0.8),\n radius: Math.max(0.001, readFiniteNumber(settings?.radius, 14)),\n orthoSize: Math.max(0.001, readFiniteNumber(settings?.orthoSize, 6)),\n fov: Math.max(0.001, readFiniteNumber(settings?.fov, 0.85)),\n ...(targetOffset ? { targetOffset } : {}),\n minZ: Math.max(0.001, readFiniteNumber(settings?.minZ, 1)),\n maxZ: Math.max(0.001, readFiniteNumber(settings?.maxZ, 10000)),\n lowerBetaLimit: readFiniteNumber(settings?.lowerBetaLimit, settings?.beta ?? 0.8),\n upperBetaLimit: readFiniteNumber(settings?.upperBetaLimit, settings?.beta ?? 0.8),\n lowerRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.lowerRadiusLimit, settings?.radius ?? 14)),\n upperRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.upperRadiusLimit, settings?.radius ?? 14)),\n inertia: clampUnit(readFiniteNumber(settings?.inertia, 0.9)),\n ...(targetScreenOffset ? { targetScreenOffset } : {}),\n };\n}\n\nexport function applyBabylonEditorProjectionCameraRig(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n camera: RuntimeCamera,\n settings: BabylonEditorProjectionCameraSettings | undefined,\n options: BabylonEditorProjectionCameraRigApplyOptions = {},\n): BabylonEditorProjectionCameraSettings {\n const normalized = normalizeBabylonEditorProjectionCameraSettings(settings);\n const Vector3 = babylon.Vector3;\n const Vector2 = (babylon as any).Vector2;\n const targetInput = options.target ?? normalized.targetOffset ?? null;\n const target = targetInput && Vector3\n ? new Vector3(targetInput.x, targetInput.y, targetInput.z)\n : null;\n\n camera.minZ = normalized.minZ ?? 1;\n camera.maxZ = Math.max(camera.minZ + 0.001, normalized.maxZ ?? 10000);\n camera.inertia = normalized.inertia ?? camera.inertia;\n if (normalized.targetScreenOffset) {\n camera.targetScreenOffset = Vector2\n ? new Vector2(normalized.targetScreenOffset.x, normalized.targetScreenOffset.y)\n : { ...normalized.targetScreenOffset };\n }\n\n if (typeof camera.alpha === 'number') {\n clearBabylonArcRotateCameraOrbitLimits(camera);\n if (target) camera.target = target;\n camera.alpha = normalized.alpha;\n camera.beta = normalized.beta;\n camera.radius = normalized.radius;\n if (options.lockOrbit !== false) {\n camera.lowerAlphaLimit = normalized.alpha;\n camera.upperAlphaLimit = normalized.alpha;\n camera.lowerBetaLimit = normalized.lowerBetaLimit ?? normalized.beta;\n camera.upperBetaLimit = normalized.upperBetaLimit ?? normalized.beta;\n camera.lowerRadiusLimit = normalized.lowerRadiusLimit ?? normalized.radius;\n camera.upperRadiusLimit = normalized.upperRadiusLimit ?? normalized.radius;\n }\n } else if (target) {\n camera.setTarget?.(target);\n }\n\n if (normalized.projection === 'perspective') {\n camera.mode = babylon.Camera?.PERSPECTIVE_CAMERA ?? camera.mode ?? 0;\n camera.fov = normalized.fov ?? 0.85;\n return normalized;\n }\n\n camera.mode = babylon.Camera?.ORTHOGRAPHIC_CAMERA ?? camera.mode ?? 1;\n const aspect = readProjectionSceneAspect(scene);\n const halfHeight = normalized.orthoSize;\n const halfWidth = halfHeight * aspect;\n camera.orthoLeft = -halfWidth;\n camera.orthoRight = halfWidth;\n camera.orthoTop = halfHeight;\n camera.orthoBottom = -halfHeight;\n return normalized;\n}\n\nfunction clearBabylonArcRotateCameraOrbitLimits(camera: RuntimeCamera): void {\n camera.lowerAlphaLimit = null;\n camera.upperAlphaLimit = null;\n camera.lowerBetaLimit = null;\n camera.upperBetaLimit = null;\n camera.lowerRadiusLimit = null;\n camera.upperRadiusLimit = null;\n}\n\nfunction readProjectionCameraMode(value: unknown): BabylonEditorProjectionCameraMode {\n return value === 'perspective' ? 'perspective' : 'orthographic';\n}\n\nfunction readProjectionSceneAspect(scene: RuntimeScene): number {\n const engine = scene.getEngine?.();\n const width = Number(engine?.getRenderWidth?.() ?? engine?.getRenderingCanvas?.()?.width ?? 1);\n const height = Number(engine?.getRenderHeight?.() ?? engine?.getRenderingCanvas?.()?.height ?? 1);\n if (!Number.isFinite(width) || !Number.isFinite(height) || height <= 0) return 16 / 9;\n return Math.max(0.01, width / height);\n}\n\nfunction readOptionalProjectionVec2(value: unknown): BabylonEditorProjectionVec2 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec2>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n };\n}\n\nfunction readOptionalProjectionVec3(value: unknown): BabylonEditorProjectionVec3 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec3>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y) || !Number.isFinite(candidate.z)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n z: Number(candidate.z),\n };\n}\n\nfunction clampUnit(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readProjectionDirectionalLightSettings(\n settings: BabylonEditorProjectionDirectionalLightSettings | undefined,\n): BabylonEditorProjectionDirectionalLightSettings {\n return {\n type: 'directional',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 2)),\n direction: readVector3(settings?.direction, { x: -0.3, y: -1, z: -0.2 }),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionHemisphericLightSettings(\n settings: BabylonEditorProjectionHemisphericLightSettings | undefined,\n): BabylonEditorProjectionHemisphericLightSettings {\n return {\n type: 'hemispheric',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 0.8)),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n groundColor: readProjectionColor(settings?.groundColor, { r: 0.48, g: 0.52, b: 0.62 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionColor(\n value: BabylonEditorProjectionColorRGB | undefined,\n fallback: BabylonEditorProjectionColorRGB,\n): BabylonEditorProjectionColorRGB {\n return {\n r: readFiniteNumber(value?.r, fallback.r),\n g: readFiniteNumber(value?.g, fallback.g),\n b: readFiniteNumber(value?.b, fallback.b),\n };\n}\n\nfunction readFiniteNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction normalizeProjectionVec3(\n value: BabylonEditorProjectionVec3,\n fallback: BabylonEditorProjectionVec3,\n): BabylonEditorProjectionVec3 {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.000001) return normalizeProjectionVec3(fallback, { x: 0, y: -1, z: 0 });\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction createProjectionMetadata(\n nodeId: string,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const disableGeneratedShadow = extra.runtimeKind === 'camera'\n || extra.runtimeKind === 'light'\n || extra.helper != null;\n return {\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId,\n ...extra,\n },\n };\n}\n\nfunction createProjectionShadowMetadata(node: BabylonEditorProjectionNode): Record<string, unknown> {\n return {\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nfunction syncProjectionNodeMetadata(\n projection: ProjectedBabylonEditorNode,\n node: BabylonEditorProjectionNode,\n): void {\n walkProjectionRuntimeNodes(projection.root, (runtimeNode) => {\n syncProjectionRuntimeNodeMetadata(runtimeNode, node);\n });\n}\n\nfunction walkProjectionRuntimeNodes(node: any, visit: (node: any) => void): void {\n if (!node) return;\n visit(node);\n const children = typeof node.getChildren === 'function' ? node.getChildren() : [];\n if (!Array.isArray(children)) return;\n for (const child of children) {\n walkProjectionRuntimeNodes(child, visit);\n }\n}\n\nfunction syncProjectionRuntimeNodeMetadata(\n runtimeNode: any,\n node: BabylonEditorProjectionNode,\n): void {\n const metadata = readProjectionObject(runtimeNode.metadata);\n const editorProjection = readProjectionObject(metadata?.editorProjection);\n if (!editorProjection) return;\n if (editorProjection.nodeId !== node.id && editorProjection.rootNodeId !== node.id) return;\n const nextEditorProjection = { ...editorProjection };\n if (node.shadow) nextEditorProjection.shadow = structuredClone(node.shadow);\n else delete nextEditorProjection.shadow;\n if (node.shadowPlan) nextEditorProjection.shadowPlan = structuredClone(node.shadowPlan);\n else delete nextEditorProjection.shadowPlan;\n runtimeNode.metadata = {\n ...(metadata ?? {}),\n editorProjection: nextEditorProjection,\n };\n}\n\nfunction readProjectionObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nexport function applyProjectionTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionTransform,\n): void {\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n if (isEditorTransformMatrixSnapshot(transform)) {\n const Matrix = requireBabylonCtor(babylon.Matrix, 'Matrix');\n if (typeof Matrix.FromArray !== 'function' || typeof node?.setPreTransformMatrix !== 'function') {\n throw new Error('Babylon runtime missing matrix transform support.');\n }\n node.position = new Vector3(0, 0, 0);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(0, 0, 0);\n node.scaling = new Vector3(1, 1, 1);\n node.setPreTransformMatrix(Matrix.FromArray(transform.matrix));\n writeProjectionLocalMatrixTransform(node, transform.matrix);\n return;\n }\n clearProjectionLocalMatrixTransform(babylon, node);\n node.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n const scale = transform.scale ?? { x: 1, y: 1, z: 1 };\n node.scaling = new Vector3(scale.x, scale.y, scale.z);\n}\n\nfunction applyProjectionWorldTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: EditorTransformSnapshot,\n): boolean {\n const parent = node?.parent ?? null;\n const local = parent\n ? toEditorLocalTransformFromWorld(readProjectionWorldTransform(parent), transform, { allowMatrixFallback: true })\n : transform;\n if (!local) return false;\n applyProjectionTransform(babylon, node, local);\n return true;\n}\n\nfunction writeProjectionLocalMatrixTransform(node: any, matrix: EditorTransformMatrix): void {\n node.metadata = {\n ...(readProjectionObject(node?.metadata) ?? {}),\n [PROJECTION_LOCAL_MATRIX_METADATA_KEY]: cloneEditorTransformMatrix(matrix),\n };\n}\n\nfunction clearProjectionLocalMatrixTransform(babylon: BabylonRuntimeGlobal, node: any): void {\n if (typeof node?.setPreTransformMatrix === 'function') {\n const Matrix = babylon.Matrix;\n if (typeof Matrix?.FromArray === 'function') {\n node.setPreTransformMatrix(Matrix.FromArray(createIdentityEditorTransformMatrix()));\n }\n }\n const metadata = readProjectionObject(node?.metadata);\n if (!metadata || !(PROJECTION_LOCAL_MATRIX_METADATA_KEY in metadata)) return;\n const nextMetadata = { ...metadata };\n delete nextMetadata[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n node.metadata = nextMetadata;\n}\n\nfunction applyAssetDefaultsTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionAssetTransform | undefined,\n): void {\n if (!transform) return;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n node.position = new Vector3(\n transform.position?.x ?? 0,\n transform.position?.y ?? 0,\n transform.position?.z ?? 0,\n );\n if (transform.rotationDeg) {\n node.rotation = new Vector3(\n (transform.rotationDeg.x * Math.PI) / 180,\n (transform.rotationDeg.y * Math.PI) / 180,\n (transform.rotationDeg.z * Math.PI) / 180,\n );\n } else {\n node.rotation = new Vector3(\n transform.rotation?.x ?? 0,\n transform.rotation?.y ?? 0,\n transform.rotation?.z ?? 0,\n );\n }\n if (typeof transform.scale === 'number') {\n node.scaling = new Vector3(transform.scale, transform.scale, transform.scale);\n } else {\n node.scaling = new Vector3(\n transform.scale?.x ?? 1,\n transform.scale?.y ?? 1,\n transform.scale?.z ?? 1,\n );\n }\n}\n\nfunction getProjectionNodeIdsInScreenRect(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n projections: Map<string, ProjectedBabylonEditorNode>,\n rect: BabylonEditorProjectionScreenRect,\n): string[] {\n const canvas = scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n const camera = scene.activeCamera ?? (scene as any).cameraToUseForPointers ?? null;\n const Vector3 = babylon.Vector3 as any;\n const Matrix = (babylon as any).Matrix;\n if (!canvas || !camera || !Vector3?.Project || !Matrix?.Identity) return [];\n const canvasRect = canvas.getBoundingClientRect();\n const viewport = camera.viewport?.toGlobal?.(\n scene.getEngine?.().getRenderWidth?.() ?? canvas.width,\n scene.getEngine?.().getRenderHeight?.() ?? canvas.height,\n );\n const transformMatrix = scene.getTransformMatrix?.();\n const worldMatrix = Matrix.Identity();\n if (!viewport || !transformMatrix || !worldMatrix) return [];\n const selectedIds: string[] = [];\n for (const [nodeId, projection] of projections) {\n const bounds = projection.root?.getHierarchyBoundingVectors?.();\n if (!bounds?.min || !bounds?.max) continue;\n const corners = createBoundsCorners(Vector3, bounds.min, bounds.max);\n const projected = corners\n .map((corner: any) => Vector3.Project(corner, worldMatrix, transformMatrix, viewport))\n .map((point: any) => ({\n x: canvasRect.left + point.x,\n y: canvasRect.top + point.y,\n }));\n if (projected.length === 0) continue;\n const minX = Math.min(...projected.map(point => point.x));\n const maxX = Math.max(...projected.map(point => point.x));\n const minY = Math.min(...projected.map(point => point.y));\n const maxY = Math.max(...projected.map(point => point.y));\n if (rectsIntersect(rect, { left: minX, top: minY, right: maxX, bottom: maxY })) {\n selectedIds.push(nodeId);\n }\n }\n return selectedIds;\n}\n\nfunction createBoundsCorners(Vector3: any, min: any, max: any): any[] {\n return [\n new Vector3(min.x, min.y, min.z),\n new Vector3(min.x, min.y, max.z),\n new Vector3(min.x, max.y, min.z),\n new Vector3(min.x, max.y, max.z),\n new Vector3(max.x, min.y, min.z),\n new Vector3(max.x, min.y, max.z),\n new Vector3(max.x, max.y, min.z),\n new Vector3(max.x, max.y, max.z),\n ];\n}\n\nfunction rectsIntersect(\n left: BabylonEditorProjectionScreenRect,\n right: BabylonEditorProjectionScreenRect,\n): boolean {\n return left.left <= right.right\n && left.right >= right.left\n && left.top <= right.bottom\n && left.bottom >= right.top;\n}\n\nfunction syncProjectionSelection(\n babylon: BabylonRuntimeGlobal,\n projections: Map<string, ProjectedBabylonEditorNode>,\n selection: EditorSelectionState,\n): void {\n const Color4 = babylon.Color4;\n const selectedIds = new Set(\n selection.selectedIds.length > LARGE_SELECTION_EDGE_LIMIT\n ? [selection.activeId].filter((id): id is string => !!id)\n : selection.selectedIds,\n );\n for (const [nodeId, projection] of projections) {\n const rootSelected = selectedIds.has(nodeId);\n const rootActive = selection.activeId === nodeId;\n const proxyNodeIds = new Set(\n (projection.selectionMeshes ?? [])\n .map(readProjectionMeshSelectionNodeId)\n .filter((id): id is string => !!id),\n );\n let projectionSelected = false;\n for (const mesh of projection.outlineMeshes) {\n const meshNodeId = readProjectionMeshSelectionNodeId(mesh) ?? nodeId;\n const selected = rootSelected || (!proxyNodeIds.has(meshNodeId) && selectedIds.has(meshNodeId));\n const active = rootActive || selection.activeId === meshNodeId;\n if (selected) projectionSelected = true;\n syncProjectionMeshSelection(mesh, selected, active, Color4);\n }\n for (const mesh of projection.selectionMeshes ?? []) {\n const meshNodeId = readProjectionMeshSelectionNodeId(mesh) ?? nodeId;\n const selected = selectedIds.has(meshNodeId);\n const active = selection.activeId === meshNodeId;\n if (selected) projectionSelected = true;\n syncProjectionMeshSelection(mesh, selected, active, Color4);\n }\n if (projectionSelected) {\n projection.selectionEdgesPrewarmCancel?.();\n projection.selectionEdgesPrewarmCancel = null;\n }\n }\n}\n\nfunction syncProjectionMeshSelection(\n mesh: any,\n selected: boolean,\n active: boolean,\n Color4?: new (r: number, g: number, b: number, a: number) => any,\n): void {\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjectionSelectionEdgesSelected: selected,\n };\n if (!selected) {\n mesh.disableEdgesRendering?.();\n return;\n }\n mesh.enableEdgesRendering?.(0.997);\n mesh.edgesWidth = active ? 5 : 3.5;\n if (Color4) {\n mesh.edgesColor = active\n ? new Color4(1, 0.9, 0.22, 1)\n : new Color4(0.35, 0.65, 1, 1);\n }\n}\n\nfunction prewarmProjectionSelectionEdges(projection: ProjectedBabylonEditorNode): void {\n for (const mesh of [...projection.outlineMeshes, ...(projection.selectionMeshes ?? [])]) {\n if (mesh?.metadata?.editorProjectionSelectionEdgesPrewarmed) continue;\n if (mesh?.metadata?.editorProjectionSelectionEdgesSelected) continue;\n try {\n mesh.enableEdgesRendering?.(0.997);\n mesh.disableEdgesRendering?.();\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjectionSelectionEdgesPrewarmed: true,\n };\n } catch {}\n }\n}\n\nfunction scheduleIdleProjectionSelectionEdgesPrewarm(projection: ProjectedBabylonEditorNode): () => void {\n let canceled = false;\n const run = (): void => {\n if (canceled || projection.root?.isDisposed?.()) return;\n projection.selectionEdgesPrewarmCancel = null;\n prewarmProjectionSelectionEdges(projection);\n };\n const scheduleTarget = globalThis as typeof globalThis & {\n requestIdleCallback?: (callback: () => void) => number;\n cancelIdleCallback?: (handle: number) => void;\n };\n if (typeof scheduleTarget.requestIdleCallback === 'function') {\n const handle = scheduleTarget.requestIdleCallback(run);\n return () => {\n canceled = true;\n scheduleTarget.cancelIdleCallback?.(handle);\n };\n }\n const handle = setTimeout(run, 0);\n return () => {\n canceled = true;\n clearTimeout(handle);\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"projection.js","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n EditorSelectionState,\n EditorTransformMatrix,\n EditorTransformPivot,\n EditorTransformSnapshot,\n EditorTransformVec3,\n} from '@fps-games/editor-core';\nimport {\n cloneEditorTransformMatrix,\n combineEditorTransforms,\n createIdentityEditorTransformMatrix,\n createEditorTransformMatrixSnapshot,\n isEditorTransformMatrixSnapshot,\n readEditorTransformPosition,\n toEditorLocalTransformFromWorld,\n} from '@fps-games/editor-core';\nimport type {\n ArtistMaterialProfile,\n ArtistMaterialSlotBinding,\n ArtistMaterialTextureRef,\n MaterialSlotSourceDescriptor,\n SceneMaterialAssetKind,\n} from '@fps-games/editor-protocol';\nimport {\n applyBabylonDefaultOutline,\n collectBabylonMaterialOwnerCandidates,\n resolveBabylonEffectiveMaterialOwner,\n type BabylonDefaultOutlineOptions,\n type BabylonMaterialOwnerTarget,\n} from '@fps-games/babylon-renderer';\nimport {\n isMaterialOwnerResolutionPointerVerified,\n resolveMaterialOwner,\n type MaterialOwnerMatchKind,\n type MaterialOwnerResolvedIdentity,\n type MaterialOwnerResolution,\n type MaterialOwnerResolutionDiagnostic,\n} from '@fps-games/playable-contracts';\nimport type {\n BabylonRuntimeGlobal,\n RuntimeCamera,\n RuntimeScene,\n} from './types';\nimport { applyArtistMaterialProfileToRuntimeMaterial } from './material-property-adapter';\nimport {\n pickBabylonProjectionNodeIdAt,\n resolveBabylonPickSelectionNodeId,\n resolveBabylonProjectionNodeId,\n} from './projection-pick-resolver';\nimport {\n normalizeProjectionOwnerNodePath,\n readProjectionSourceNodeSegment,\n} from './projection-source-owner-path';\nimport {\n createMaterialSlotOwnerPathMatchKey,\n isMaterialSlotOwnerPathMatch,\n} from './material-slot-source-resolver';\nimport {\n isBabylonPrimitiveProjectionSharedMaterial,\n} from './primitive-projection-instancing';\nimport {\n createBabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationController,\n type BabylonEditorSelectionPresentationDiagnostics,\n type BabylonEditorSelectionPresentationTarget,\n} from './selection-presentation-controller';\n\nexport type BabylonEditorProjectionVec3 = EditorTransformVec3;\nexport interface BabylonEditorProjectionVec2 {\n x: number;\n y: number;\n}\n\nconst PROJECTION_LOCAL_MATRIX_METADATA_KEY = 'editorLocalTransformMatrix';\nconst MIN_SELECTION_BOUNDS_PROXY_SIZE = 0.002;\n\nexport type BabylonEditorProjectionTransform = EditorTransformSnapshot;\n\nexport interface BabylonEditorProjectionAssetTransform {\n position?: BabylonEditorProjectionVec3;\n rotation?: BabylonEditorProjectionVec3;\n rotationDeg?: BabylonEditorProjectionVec3;\n scale?: number | BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionAsset {\n id?: string;\n sourceId?: string;\n transform?: BabylonEditorProjectionAssetTransform;\n metadata?: Record<string, unknown>;\n}\n\nexport type BabylonEditorProjectionPrimitiveShape = 'cube' | 'sphere' | 'plane' | 'capsule';\n\nexport interface BabylonEditorProjectionPrimitive {\n shape: BabylonEditorProjectionPrimitiveShape;\n}\n\nexport interface BabylonEditorProjectionOutline {\n strategy?: 'babylon-default';\n renderOutline?: boolean;\n outlineWidth?: number;\n outlineColor?: BabylonEditorProjectionColorRGB;\n}\n\nexport type BabylonEditorProjectionCameraMode = 'orthographic' | 'perspective';\n\nexport interface BabylonEditorProjectionCameraSettings {\n projection?: BabylonEditorProjectionCameraMode;\n alpha: number;\n beta: number;\n radius: number;\n orthoSize: number;\n fov?: number;\n targetOffset?: BabylonEditorProjectionVec3;\n minZ?: number;\n maxZ?: number;\n lowerBetaLimit?: number;\n upperBetaLimit?: number;\n lowerRadiusLimit?: number;\n upperRadiusLimit?: number;\n inertia?: number;\n targetScreenOffset?: BabylonEditorProjectionVec2;\n}\n\nexport interface BabylonEditorProjectionCameraRigApplyOptions {\n target?: BabylonEditorProjectionVec3 | null;\n lockOrbit?: boolean;\n}\n\nexport interface BabylonEditorProjectionColorRGB {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface BabylonEditorProjectionDirectionalLightSettings {\n type: 'directional';\n intensity: number;\n direction: BabylonEditorProjectionVec3;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport interface BabylonEditorProjectionHemisphericLightSettings {\n type: 'hemispheric';\n intensity: number;\n diffuseColor?: BabylonEditorProjectionColorRGB;\n groundColor?: BabylonEditorProjectionColorRGB;\n helperVisible?: boolean;\n}\n\nexport type BabylonEditorProjectionLightSettings =\n | BabylonEditorProjectionDirectionalLightSettings\n | BabylonEditorProjectionHemisphericLightSettings;\n\nexport type BabylonEditorProjectionShadowMode = 'default' | 'none' | 'blob' | 'static' | 'planar' | 'dynamic';\n\nexport interface BabylonEditorProjectionRendering {\n renderingGroupId?: number;\n alphaIndex?: number;\n}\n\nexport interface BabylonEditorProjectionNode {\n id: string;\n name?: string;\n parentId?: string | null;\n active?: boolean;\n transform?: BabylonEditorProjectionTransform;\n asset?: BabylonEditorProjectionAsset | null;\n primitive?: BabylonEditorProjectionPrimitive | null;\n helperKind?: 'root';\n runtimeKind?: 'camera' | 'light';\n shadow?: unknown;\n shadowPlan?: unknown;\n rendering?: BabylonEditorProjectionRendering;\n camera?: BabylonEditorProjectionCameraSettings;\n light?: BabylonEditorProjectionLightSettings;\n outline?: BabylonEditorProjectionOutline | null;\n artistMaterialKind?: SceneMaterialAssetKind;\n artistMaterialProfile?: ArtistMaterialProfile;\n artistMaterialSlotBindings?: ArtistMaterialSlotBinding[];\n}\n\nexport interface BabylonEditorProjectionImportResult {\n meshes?: any[];\n transformNodes?: any[];\n animationGroups?: any[];\n}\n\nexport type BabylonEditorProjectionImportNodeKind = 'root' | 'transform' | 'mesh';\n\nexport interface BabylonEditorProjectionImportNodeSnapshot {\n id: string;\n parentId: string | null;\n name: string;\n kind: BabylonEditorProjectionImportNodeKind;\n sourceName?: string;\n ownerNodePath?: string;\n materialIds?: string[];\n}\n\nexport interface BabylonEditorProjectionImportMaterialSnapshot {\n id: string;\n name: string;\n kind?: string;\n nodeIds: string[];\n textureIds: string[];\n}\n\nexport interface BabylonEditorProjectionImportTextureSnapshot {\n id: string;\n name: string;\n kind?: string;\n url?: string;\n}\n\nexport interface BabylonEditorProjectionImportAnimationSnapshot {\n id: string;\n name: string;\n}\n\nexport interface BabylonEditorProjectionImportStructureSnapshot {\n projectionNodeId: string;\n assetId?: string;\n sourceId?: string;\n nodes: BabylonEditorProjectionImportNodeSnapshot[];\n materials: BabylonEditorProjectionImportMaterialSnapshot[];\n textures: BabylonEditorProjectionImportTextureSnapshot[];\n animations: BabylonEditorProjectionImportAnimationSnapshot[];\n}\n\nexport interface BabylonEditorProjectionImportContext {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n root: any;\n node: BabylonEditorProjectionNode;\n asset: BabylonEditorProjectionAsset;\n}\n\nexport type BabylonEditorProjectionImporter = (\n context: BabylonEditorProjectionImportContext,\n) => Promise<BabylonEditorProjectionImportResult | null | undefined>;\n\nexport type BabylonEditorProjectionMaterialProfileSource = 'rootProfile' | 'slotBinding';\nexport type BabylonEditorProjectionMaterialProfileMatchKind =\n | 'root'\n | MaterialOwnerMatchKind\n | 'none';\nexport type BabylonEditorProjectionMaterialProfileTargetStatus =\n | 'material'\n | 'subMaterial'\n | 'primitiveFallbackMaterial'\n | 'missingMeshOwner'\n | 'missingMaterial'\n | 'missingTargetMaterial'\n | 'missingSubMaterial';\n\nexport interface BabylonEditorProjectionMaterialProfileDiagnostic {\n projectionNodeId: string;\n source: BabylonEditorProjectionMaterialProfileSource;\n applied: boolean;\n matchKind: BabylonEditorProjectionMaterialProfileMatchKind;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n slotId?: string;\n ownerNodePath?: string;\n meshOwnerNodePath?: string | null;\n primitiveIndex?: number;\n targetMaterialName?: string;\n targetMaterialType?: string | null;\n ownerResolutionStatus?: ProjectionMaterialOwnerResolution['status'];\n ownerDiagnosticCode?: MaterialOwnerResolutionDiagnostic['code'];\n ownerDiagnosticSeverity?: MaterialOwnerResolutionDiagnostic['severity'];\n ownerCandidateIds?: string[];\n ownerIdentity?: MaterialOwnerResolvedIdentity;\n warningMessage?: string;\n}\n\nexport interface BabylonEditorProjectionOptions {\n babylon: BabylonRuntimeGlobal;\n scene: RuntimeScene;\n importModel?: BabylonEditorProjectionImporter;\n resolveTextureUrl?: (texture: ArtistMaterialTextureRef) => string | null | undefined;\n /** @deprecated Selection presentation no longer uses EdgesRenderer prewarming. */\n selectionEdgesPrewarm?: BabylonEditorProjectionSelectionEdgesPrewarm;\n selectionPresentationController?: BabylonEditorSelectionPresentationController;\n logger?: Pick<Console, 'warn'> & Partial<Pick<Console, 'info'>>;\n onProjectionReady?: (event: BabylonEditorProjectionReadyEvent) => void;\n onProjectionBatchSettled?: (event: BabylonEditorProjectionBatchSettledEvent) => void;\n onMaterialProfileDiagnostic?: (diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic) => void;\n}\n\nexport type BabylonEditorProjectionSelectionEdgesPrewarm = 'eager' | 'lazy' | 'idle';\n\ntype ProjectionMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\ntype ProjectionMaterialSlotDescriptor = MaterialSlotSourceDescriptor & {\n key: string;\n normalizedOwnerNodePath: string;\n matchKey: string;\n triangleCount?: number;\n boundingBox?: ProjectionMaterialSlotBoundingBox;\n};\n\ntype ProjectionMaterialSlotBinding = {\n slot: ProjectionMaterialSlotDescriptor;\n profile: ArtistMaterialProfile;\n source: Exclude<BabylonEditorProjectionMaterialProfileSource, 'rootProfile'>;\n};\n\ntype ProjectionMaterialSlotDescriptorInput = Partial<Record<keyof MaterialSlotSourceDescriptor, unknown>> & {\n triangleCount?: unknown;\n boundingBox?: unknown;\n};\n\ntype ProjectionMaterialSlotTarget = {\n material: unknown;\n clonedMaterials: unknown[];\n};\n\ntype ProjectionMaterialDetachResult = {\n material: unknown;\n clonedMaterials: unknown[];\n projectionOwnsMaterialLifecycle: boolean;\n};\n\ntype ProjectionMaterialSlotTargetResolution = {\n target: ProjectionMaterialSlotTarget | null;\n targetMaterialStatus: BabylonEditorProjectionMaterialProfileTargetStatus;\n warningMessage?: string;\n};\n\ntype ProjectionMaterialOwnerResolution = MaterialOwnerResolution<BabylonMaterialOwnerTarget>;\n\ntype ProjectionMaterialOwnerResolutionContext = {\n resolve: (\n slot: ProjectionMaterialSlotDescriptor,\n options?: { explicitSlotBinding?: boolean },\n ) => ProjectionMaterialOwnerResolution;\n};\n\nexport interface BabylonEditorProjectionReadyEvent {\n nodeId: string;\n async: boolean;\n}\n\nexport interface BabylonEditorProjectionBatchSettledEvent {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n settledNodeIds: string[];\n}\n\nexport type BabylonEditorProjectionBatchState = 'pending' | 'settled' | 'stale';\n\nexport interface BabylonEditorProjectionBatchStatus {\n batchId: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: string[];\n settledNodeIds: string[];\n state: BabylonEditorProjectionBatchState;\n}\n\nexport interface BabylonEditorProjectionBatchHandle {\n batchId: number;\n nodeIds: string[];\n getStatus(): BabylonEditorProjectionBatchStatus;\n settled: Promise<BabylonEditorProjectionBatchStatus>;\n}\n\nexport interface BabylonEditorProjectionIdleState {\n idle: boolean;\n activeBatchIds: number[];\n lastBatch: BabylonEditorProjectionBatchStatus | null;\n}\n\nexport interface BabylonEditorProjectionPreviewVisibilityEntry {\n nodeId: string;\n visible: boolean;\n authoredActive: boolean;\n effectiveVisible: boolean;\n}\n\nexport interface BabylonEditorProjectionDebugBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n}\n\nexport interface BabylonEditorProjectionShadowDebugOverlayItem {\n id: string;\n kind: 'caster-bounds' | 'receiver-bounds' | 'receiver-surface' | 'light-direction' | 'footprint' | 'artifact-bounds';\n bounds?: BabylonEditorProjectionDebugBounds;\n center?: BabylonEditorProjectionVec3;\n size?: BabylonEditorProjectionVec3;\n direction?: BabylonEditorProjectionVec3;\n}\n\nexport interface ProjectedBabylonEditorNode {\n nodeId: string;\n root: any;\n outlineMeshes: any[];\n selectionMeshes?: any[];\n selectionPresentationTargets?: BabylonEditorSelectionPresentationTarget[];\n animationGroups: any[];\n runtimeObjects: any[];\n importStructure?: BabylonEditorProjectionImportStructureSnapshot | null;\n loadPromise?: Promise<void>;\n}\n\nexport interface BabylonEditorProjection {\n projectNodes(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n projectNode(node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null;\n removeNode(nodeId: string): void;\n rebuild(nodes: BabylonEditorProjectionNode[]): BabylonEditorProjectionBatchHandle;\n getLastProjectionBatch(): BabylonEditorProjectionBatchHandle | null;\n getIdleState(): BabylonEditorProjectionIdleState;\n waitForIdle(): Promise<BabylonEditorProjectionIdleState>;\n readNodeTransform(nodeId: string): EditorTransformSnapshot | null;\n readNodeTransforms(nodeIds: string[]): Record<string, EditorTransformSnapshot>;\n toNodeLocalTransform?(nodeId: string, worldTransform: EditorTransformSnapshot): EditorTransformSnapshot | null;\n readNodeImportStructure(nodeId: string): BabylonEditorProjectionImportStructureSnapshot | null;\n setNodeTransformPreview(nodeId: string, transform: EditorTransformSnapshot): void;\n setNodeTransformsPreview(transforms: Record<string, EditorTransformSnapshot>): void;\n getAttachableRoot(nodeId: string): any | null;\n getSelectionBounds(nodeIds: string[]): BabylonEditorProjectionBounds | null;\n getSelectionPivot(nodeIds: string[]): EditorTransformPivot | null;\n syncNodeTransform(node: BabylonEditorProjectionNode): void;\n syncRuntimeNode(node: BabylonEditorProjectionNode): boolean;\n syncNodeMetadata(node: BabylonEditorProjectionNode): void;\n syncSelection(selection: EditorSelectionState): void;\n getSelectionPresentationDiagnostics(): BabylonEditorSelectionPresentationDiagnostics;\n resolveProjectionNodeId(target: unknown): string | null;\n resolvePickSelectionNodeId(target: unknown): string | null;\n pickNodeIdAt(clientX: number, clientY: number): string | null;\n getNodeIdsInScreenRect(rect: BabylonEditorProjectionScreenRect): string[];\n getProjectedNode(nodeId: string): ProjectedBabylonEditorNode | null;\n getProjectedNodeIds(): string[];\n getProjectionParentIds(nodeId: string): string[];\n getPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setPreviewVisibilityOverrides(overrides: Record<string, boolean>): BabylonEditorProjectionPreviewVisibilityEntry[];\n clearPreviewVisibilityOverrides(): BabylonEditorProjectionPreviewVisibilityEntry[];\n setShadowDebugOverlay(items: BabylonEditorProjectionShadowDebugOverlayItem[]): string[];\n clearShadowDebugOverlay(): boolean;\n dispose(): void;\n}\n\nexport interface BabylonEditorProjectionScreenRect {\n left: number;\n top: number;\n right: number;\n bottom: number;\n}\n\nexport interface BabylonEditorProjectionBounds {\n min: BabylonEditorProjectionVec3;\n max: BabylonEditorProjectionVec3;\n center: BabylonEditorProjectionVec3;\n size: BabylonEditorProjectionVec3;\n}\n\ninterface BabylonEditorProjectionBatch {\n id: number;\n generation: number;\n nodeIds: string[];\n asyncNodeIds: string[];\n pendingNodeIds: Set<string>;\n settledNodeIds: Set<string>;\n notifyScheduled: boolean;\n state: BabylonEditorProjectionBatchState;\n handle: BabylonEditorProjectionBatchHandle;\n resolveSettled(status: BabylonEditorProjectionBatchStatus): void;\n}\n\nconst ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nfunction requireBabylonCtor<T>(value: T | undefined, name: string): T {\n if (!value) throw new Error(`Babylon runtime missing ${name}`);\n return value;\n}\n\nexport function createBabylonEditorProjection(\n options: BabylonEditorProjectionOptions,\n): BabylonEditorProjection {\n const projections = new Map<string, ProjectedBabylonEditorNode>();\n const projectionNodes = new Map<string, BabylonEditorProjectionNode>();\n const projectionParentIds = new Map<string, string | null>();\n const projectionAuthoredActive = new Map<string, boolean>();\n const previewVisibilityOverrides = new Map<string, boolean>();\n const shadowDebugOverlayObjects: any[] = [];\n const selectionPresentation = options.selectionPresentationController\n ?? createBabylonEditorSelectionPresentationController({\n babylon: options.babylon as BabylonRuntimeGlobal & Record<string, any>,\n scene: options.scene,\n logger: options.logger,\n });\n const activeBatches = new Set<BabylonEditorProjectionBatch>();\n const idleWaiters = new Set<(state: BabylonEditorProjectionIdleState) => void>();\n let nextBatchId = 1;\n let projectionGeneration = 0;\n let lastBatch: BabylonEditorProjectionBatch | null = null;\n let idleNotificationSuspendCount = 0;\n\n const createBatch = (nodeIds: string[]): BabylonEditorProjectionBatch => {\n let resolveSettled!: (status: BabylonEditorProjectionBatchStatus) => void;\n const settled = new Promise<BabylonEditorProjectionBatchStatus>(resolve => {\n resolveSettled = resolve;\n });\n const batch: BabylonEditorProjectionBatch = {\n id: nextBatchId,\n generation: projectionGeneration,\n nodeIds,\n asyncNodeIds: [],\n pendingNodeIds: new Set(),\n settledNodeIds: new Set(),\n notifyScheduled: false,\n state: 'pending',\n handle: null as unknown as BabylonEditorProjectionBatchHandle,\n resolveSettled,\n };\n batch.handle = {\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n getStatus: () => createBatchStatus(batch),\n settled,\n };\n nextBatchId += 1;\n lastBatch = batch;\n activeBatches.add(batch);\n return batch;\n };\n\n const createBatchStatus = (\n batch: BabylonEditorProjectionBatch,\n ): BabylonEditorProjectionBatchStatus => ({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n pendingNodeIds: [...batch.pendingNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n state: batch.state,\n });\n\n const getIdleState = (): BabylonEditorProjectionIdleState => ({\n idle: activeBatches.size === 0,\n activeBatchIds: [...activeBatches].map(batch => batch.id),\n lastBatch: lastBatch ? createBatchStatus(lastBatch) : null,\n });\n\n const notifyIdleWaitersIfNeeded = (): void => {\n if (idleNotificationSuspendCount > 0 || activeBatches.size > 0 || idleWaiters.size === 0) return;\n const state = getIdleState();\n for (const resolve of idleWaiters) resolve(state);\n idleWaiters.clear();\n };\n\n const completeBatch = (\n batch: BabylonEditorProjectionBatch,\n state: Exclude<BabylonEditorProjectionBatchState, 'pending'>,\n ): BabylonEditorProjectionBatchStatus => {\n if (batch.state !== 'pending') return createBatchStatus(batch);\n batch.state = state;\n const status = createBatchStatus(batch);\n activeBatches.delete(batch);\n batch.resolveSettled(status);\n notifyIdleWaitersIfNeeded();\n return status;\n };\n\n const markActiveBatchesStale = (): void => {\n for (const batch of [...activeBatches]) {\n completeBatch(batch, 'stale');\n }\n };\n\n const scheduleBatchSettled = (batch: BabylonEditorProjectionBatch): void => {\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0 || batch.notifyScheduled) return;\n batch.notifyScheduled = true;\n void Promise.resolve().then(() => {\n batch.notifyScheduled = false;\n if (batch.state !== 'pending' || batch.pendingNodeIds.size > 0) return;\n if (batch.generation !== projectionGeneration) {\n completeBatch(batch, 'stale');\n return;\n }\n options.onProjectionBatchSettled?.({\n batchId: batch.id,\n nodeIds: [...batch.nodeIds],\n asyncNodeIds: [...batch.asyncNodeIds],\n settledNodeIds: [...batch.settledNodeIds],\n });\n completeBatch(batch, 'settled');\n });\n };\n\n const trackAsyncProjection = (\n batch: BabylonEditorProjectionBatch,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n ): Promise<void> => {\n batch.asyncNodeIds.push(node.id);\n batch.pendingNodeIds.add(node.id);\n return loadModelProjection(\n options,\n node,\n projection,\n () => projectionNodes.get(node.id) ?? node,\n ).finally(() => {\n batch.pendingNodeIds.delete(node.id);\n batch.settledNodeIds.add(node.id);\n if (projections.get(node.id) === projection && !projection.root.isDisposed?.()) {\n delete projection.loadPromise;\n applyProjectionPreviewVisibility(node.id);\n applyProjectionOutline(projectionNodes.get(node.id) ?? node, projection);\n selectionPresentation.updateProjectedNode(projection);\n options.onProjectionReady?.({ nodeId: node.id, async: true });\n }\n scheduleBatchSettled(batch);\n });\n };\n\n const disposeProjectedNode = (projection: ProjectedBabylonEditorNode): void => {\n selectionPresentation.detachProjectedNode(projection.nodeId);\n projection.importStructure = null;\n for (const animationGroup of projection.animationGroups) {\n animationGroup.dispose?.();\n }\n let disposedRuntimeLight = false;\n for (const runtimeObject of projection.runtimeObjects) {\n disposedRuntimeLight = disposedRuntimeLight || isProjectionRuntimeLightObject(runtimeObject);\n runtimeObject.dispose?.();\n }\n if (disposedRuntimeLight) resyncProjectionSceneLightSources(options.scene);\n projection.root?.dispose?.();\n };\n\n const disposeAll = (): void => {\n markActiveBatchesStale();\n projectionGeneration += 1;\n clearShadowDebugOverlayObjects();\n for (const projection of projections.values()) {\n disposeProjectedNode(projection);\n }\n projections.clear();\n projectionNodes.clear();\n projectionParentIds.clear();\n projectionAuthoredActive.clear();\n previewVisibilityOverrides.clear();\n };\n\n const createPreviewVisibilityEntry = (\n nodeId: string,\n visible: boolean,\n ): BabylonEditorProjectionPreviewVisibilityEntry => {\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n return {\n nodeId,\n visible,\n authoredActive,\n effectiveVisible: authoredActive && visible !== false,\n };\n };\n\n const applyProjectionPreviewVisibility = (nodeId: string): void => {\n const projection = projections.get(nodeId);\n if (!projection) return;\n const authoredActive = projectionAuthoredActive.get(nodeId) !== false;\n const override = previewVisibilityOverrides.get(nodeId);\n const effectiveVisible = authoredActive && override !== false;\n projection.root?.setEnabled?.(effectiveVisible);\n for (const runtimeObject of projection.runtimeObjects) {\n runtimeObject.setEnabled?.(effectiveVisible);\n }\n };\n\n const clearShadowDebugOverlayObjects = (): boolean => {\n const hadObjects = shadowDebugOverlayObjects.length > 0;\n for (const object of shadowDebugOverlayObjects.splice(0)) {\n object.dispose?.();\n }\n return hadObjects;\n };\n\n const syncProjectionHierarchy = (): void => {\n for (const [nodeId, projection] of projections) {\n const parentId = projectionParentIds.get(nodeId) ?? null;\n const parent = parentId && parentId !== nodeId\n ? projections.get(parentId)?.root ?? null\n : null;\n if (projection.root.parent !== parent) {\n projection.root.parent = parent;\n }\n }\n };\n\n const projectNodeInBatch = (\n node: BabylonEditorProjectionNode,\n batch: BabylonEditorProjectionBatch,\n ): ProjectedBabylonEditorNode | null => {\n removeNode(node.id);\n const root = createProjectionRoot(options.babylon, options.scene, node);\n if (!root) return null;\n const projection: ProjectedBabylonEditorNode = {\n nodeId: node.id,\n root,\n outlineMeshes: [],\n selectionMeshes: [],\n selectionPresentationTargets: [],\n animationGroups: [],\n runtimeObjects: [],\n };\n projections.set(node.id, projection);\n projectionNodes.set(node.id, node);\n projectionParentIds.set(node.id, node.parentId ?? null);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n if (node.transform) applyProjectionTransform(options.babylon, root, node.transform);\n\n if (node.helperKind !== 'root' && !attachRuntimeProjection(options.babylon, options.scene, node, projection)) {\n if (node.asset && options.importModel) {\n projection.loadPromise = trackAsyncProjection(batch, node, projection);\n } else if (node.primitive) {\n attachPrimitiveProjection(options, node, projection);\n } else if (node.asset) {\n attachFallbackProjection(options.babylon, options.scene, node, projection, true);\n }\n }\n if (!projection.loadPromise) applyProjectionOutline(node, projection);\n selectionPresentation.attachProjectedNode(projection);\n if (!projection.loadPromise) batch.settledNodeIds.add(node.id);\n return projection;\n };\n\n const projectNode = (node: BabylonEditorProjectionNode): ProjectedBabylonEditorNode | null => {\n const batch = createBatch([node.id]);\n const projection = projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return projection;\n };\n\n const removeNode = (nodeId: string): void => {\n const existing = projections.get(nodeId);\n if (!existing) return;\n projections.delete(nodeId);\n projectionNodes.delete(nodeId);\n projectionParentIds.delete(nodeId);\n projectionAuthoredActive.delete(nodeId);\n previewVisibilityOverrides.delete(nodeId);\n syncProjectionHierarchy();\n disposeProjectedNode(existing);\n };\n\n return {\n projectNodes(nodes) {\n const nodeList = [...nodes];\n idleNotificationSuspendCount += 1;\n try {\n disposeAll();\n const batch = createBatch(nodeList.map(node => node.id));\n for (const node of nodeList) projectNodeInBatch(node, batch);\n syncProjectionHierarchy();\n scheduleBatchSettled(batch);\n return batch.handle;\n } finally {\n idleNotificationSuspendCount = Math.max(0, idleNotificationSuspendCount - 1);\n notifyIdleWaitersIfNeeded();\n }\n },\n projectNode,\n removeNode,\n rebuild(nodes) {\n return this.projectNodes(nodes);\n },\n getLastProjectionBatch() {\n return lastBatch?.handle ?? null;\n },\n getIdleState,\n waitForIdle() {\n if (activeBatches.size === 0) return Promise.resolve(getIdleState());\n return new Promise(resolve => {\n idleWaiters.add(resolve);\n });\n },\n readNodeTransform(nodeId) {\n const projection = projections.get(nodeId);\n return projection?.root ? readProjectionTransform(projection.root) : null;\n },\n readNodeTransforms(nodeIds) {\n const transforms: Record<string, EditorTransformSnapshot> = {};\n for (const nodeId of nodeIds) {\n const transform = this.readNodeTransform(nodeId);\n if (transform) transforms[nodeId] = transform;\n }\n return transforms;\n },\n toNodeLocalTransform(nodeId, worldTransform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return null;\n const parent = projection.root.parent ?? null;\n return parent\n ? toEditorLocalTransformFromWorld(\n readProjectionWorldTransform(parent),\n worldTransform,\n { allowMatrixFallback: true },\n )\n : cloneProjectionTransformSnapshot(worldTransform);\n },\n readNodeImportStructure(nodeId) {\n return cloneProjectionImportStructureSnapshot(projections.get(nodeId)?.importStructure ?? null);\n },\n setNodeTransformPreview(nodeId, transform) {\n const projection = projections.get(nodeId);\n if (!projection?.root) return;\n if (!applyProjectionWorldTransform(options.babylon, projection.root, transform)) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to preview non-representable world transform for \"${nodeId}\"`);\n }\n },\n setNodeTransformsPreview(transforms) {\n for (const [nodeId, transform] of Object.entries(transforms)) {\n this.setNodeTransformPreview(nodeId, transform);\n }\n },\n getAttachableRoot(nodeId) {\n return projections.get(nodeId)?.root ?? null;\n },\n getSelectionBounds(nodeIds) {\n return getProjectionSelectionBounds(projections, nodeIds);\n },\n getSelectionPivot(nodeIds) {\n const bounds = getProjectionSelectionBounds(projections, nodeIds);\n if (bounds) {\n return {\n mode: 'selection-center',\n position: bounds.center,\n };\n }\n const transforms = nodeIds\n .map(nodeId => this.readNodeTransform(nodeId))\n .filter((transform): transform is EditorTransformSnapshot => !!transform);\n if (transforms.length === 0) return null;\n return {\n mode: 'selection-center',\n position: averagePositions(transforms),\n };\n },\n syncNodeTransform(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n selectionPresentation.updateProjectedNode(projection);\n },\n syncRuntimeNode(node) {\n const projection = projections.get(node.id);\n if (!projection || node.runtimeKind !== 'light') return false;\n projectionNodes.set(node.id, node);\n projectionAuthoredActive.set(node.id, node.active !== false);\n applyProjectionPreviewVisibility(node.id);\n projectionParentIds.set(node.id, node.parentId ?? null);\n syncProjectionHierarchy();\n if (node.transform) applyProjectionTransform(options.babylon, projection.root, node.transform);\n if (!syncRuntimeLightProjection(options.babylon, options.scene, node, projection)) return false;\n selectionPresentation.updateProjectedNode(projection);\n return true;\n },\n syncNodeMetadata(node) {\n const projection = projections.get(node.id);\n if (!projection) return;\n projectionNodes.set(node.id, node);\n syncProjectionNodeMetadata(projection, node);\n },\n syncSelection(selection) {\n selectionPresentation.syncSelection(selection);\n },\n getSelectionPresentationDiagnostics() {\n return selectionPresentation.getDiagnostics();\n },\n resolveProjectionNodeId(target) {\n return resolveBabylonProjectionNodeId(target);\n },\n resolvePickSelectionNodeId(target) {\n return resolveBabylonPickSelectionNodeId(target);\n },\n pickNodeIdAt(clientX, clientY) {\n return pickBabylonProjectionNodeIdAt(options.scene, clientX, clientY);\n },\n getNodeIdsInScreenRect(rect) {\n return getProjectionNodeIdsInScreenRect(options.babylon, options.scene, projections, rect);\n },\n getProjectedNode(nodeId) {\n return projections.get(nodeId) ?? null;\n },\n getProjectedNodeIds() {\n return [...projections.keys()];\n },\n getProjectionParentIds(nodeId) {\n const parentIds: string[] = [];\n const seen = new Set<string>([nodeId]);\n let currentId: string | null = nodeId;\n while (currentId) {\n const parentId: string | null = projectionParentIds.get(currentId) ?? null;\n if (!parentId || parentId === currentId || seen.has(parentId)) break;\n seen.add(parentId);\n parentIds.push(parentId);\n currentId = parentId;\n }\n return parentIds;\n },\n getPreviewVisibilityOverrides() {\n return [...previewVisibilityOverrides.entries()]\n .map(([nodeId, visible]) => createPreviewVisibilityEntry(nodeId, visible));\n },\n setPreviewVisibilityOverrides(overrides) {\n for (const [nodeId, visible] of Object.entries(overrides)) {\n if (!projections.has(nodeId)) continue;\n previewVisibilityOverrides.set(nodeId, visible !== false);\n applyProjectionPreviewVisibility(nodeId);\n }\n return this.getPreviewVisibilityOverrides();\n },\n clearPreviewVisibilityOverrides() {\n const changedNodeIds = [...previewVisibilityOverrides.keys()];\n previewVisibilityOverrides.clear();\n for (const nodeId of changedNodeIds) applyProjectionPreviewVisibility(nodeId);\n return [];\n },\n setShadowDebugOverlay(items) {\n clearShadowDebugOverlayObjects();\n for (const item of items) {\n const object = createShadowDebugOverlayObject(options.babylon, options.scene, item);\n if (object) shadowDebugOverlayObjects.push(object);\n }\n return items.map(item => item.id);\n },\n clearShadowDebugOverlay() {\n return clearShadowDebugOverlayObjects();\n },\n dispose() {\n disposeAll();\n selectionPresentation.dispose();\n },\n };\n}\n\nfunction readVector3(value: any, fallback: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: Number.isFinite(value?.x) ? Number(value.x) : fallback.x,\n y: Number.isFinite(value?.y) ? Number(value.y) : fallback.y,\n z: Number.isFinite(value?.z) ? Number(value.z) : fallback.z,\n };\n}\n\nfunction createShadowDebugOverlayObject(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n if (item.kind === 'light-direction') return createShadowDebugDirectionOverlay(babylon, scene, item);\n const bounds = item.bounds ?? createBoundsFromCenterSize(item.center, item.size);\n if (!bounds) return null;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const size = {\n x: Math.max(Math.abs(bounds.size.x), 0.01),\n y: Math.max(Math.abs(bounds.size.y), item.kind === 'footprint' ? 0.015 : 0.01),\n z: Math.max(Math.abs(bounds.size.z), 0.01),\n };\n const mesh = MeshBuilder.CreateBox(`${item.id}.shadowDebugOverlay`, {\n width: size.x,\n height: size.y,\n depth: size.z,\n }, scene);\n if (!mesh) return null;\n mesh.id = item.id;\n mesh.name = item.id;\n mesh.isPickable = false;\n mesh.renderingGroupId = 3;\n mesh.metadata = createShadowDebugOverlayMetadata();\n mesh.position = createBabylonVector3(babylon, bounds.center);\n const material = new StandardMaterial(`${item.id}.shadowDebugOverlay.material`, scene);\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) {\n material.diffuseColor = color;\n material.emissiveColor = color;\n }\n material.alpha = item.kind === 'receiver-surface' ? 0.14 : item.kind === 'footprint' ? 0.32 : 0.5;\n material.wireframe = item.kind !== 'footprint' && item.kind !== 'receiver-surface';\n material.disableLighting = true;\n mesh.material = material;\n const disposeMaterial = material.dispose?.bind(material);\n const disposeMesh = mesh.dispose?.bind(mesh);\n mesh.dispose = (...args: unknown[]) => {\n disposeMaterial?.();\n return disposeMesh?.(...args);\n };\n return mesh;\n}\n\nfunction createShadowDebugDirectionOverlay(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n item: BabylonEditorProjectionShadowDebugOverlayItem,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n if (!MeshBuilder?.CreateLineSystem) return null;\n const center = item.center ?? item.bounds?.center;\n const direction = normalizeDebugVec3(item.direction ?? { x: -0.3, y: -1, z: -0.2 });\n if (!center || !direction) return null;\n const length = Math.max(item.size?.x ?? item.bounds?.size.x ?? 2, item.size?.y ?? item.bounds?.size.y ?? 2, item.size?.z ?? item.bounds?.size.z ?? 2, 2);\n const start = createBabylonVector3(babylon, {\n x: center.x - direction.x * length * 0.5,\n y: center.y - direction.y * length * 0.5,\n z: center.z - direction.z * length * 0.5,\n });\n const end = createBabylonVector3(babylon, {\n x: center.x + direction.x * length * 0.5,\n y: center.y + direction.y * length * 0.5,\n z: center.z + direction.z * length * 0.5,\n });\n const arrowLeft = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 + direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 - direction.x * length * 0.08,\n });\n const arrowRight = createBabylonVector3(babylon, {\n x: end.x - direction.x * length * 0.18 - direction.z * length * 0.08,\n y: end.y - direction.y * length * 0.18,\n z: end.z - direction.z * length * 0.18 + direction.x * length * 0.08,\n });\n const line = MeshBuilder.CreateLineSystem(`${item.id}.shadowDebugOverlay`, {\n lines: [\n [start, end],\n [end, arrowLeft],\n [end, arrowRight],\n ],\n }, scene);\n if (!line) return null;\n line.id = item.id;\n line.name = item.id;\n line.isPickable = false;\n line.renderingGroupId = 3;\n line.metadata = createShadowDebugOverlayMetadata();\n const color = readShadowDebugOverlayColor(babylon, item.kind);\n if (color) line.color = color;\n return line;\n}\n\nfunction createShadowDebugOverlayMetadata(): Record<string, unknown> {\n return {\n shadowDebugOverlayInternal: true,\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n };\n}\n\nfunction createBoundsFromCenterSize(\n center: BabylonEditorProjectionVec3 | undefined,\n size: BabylonEditorProjectionVec3 | undefined,\n): BabylonEditorProjectionDebugBounds | null {\n if (!center || !size) return null;\n return {\n center,\n size,\n min: {\n x: center.x - size.x / 2,\n y: center.y - size.y / 2,\n z: center.z - size.z / 2,\n },\n max: {\n x: center.x + size.x / 2,\n y: center.y + size.y / 2,\n z: center.z + size.z / 2,\n },\n };\n}\n\nfunction createBabylonVector3(babylon: BabylonRuntimeGlobal, value: BabylonEditorProjectionVec3): any {\n const Vector3 = (babylon as any).Vector3;\n return Vector3 ? new Vector3(value.x, value.y, value.z) : { x: value.x, y: value.y, z: value.z };\n}\n\nfunction normalizeDebugVec3(value: BabylonEditorProjectionVec3): BabylonEditorProjectionVec3 | null {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.0001) return null;\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction readShadowDebugOverlayColor(babylon: BabylonRuntimeGlobal, kind: BabylonEditorProjectionShadowDebugOverlayItem['kind']): any | null {\n const Color3 = (babylon as any).Color3;\n if (!Color3) return null;\n if (kind === 'caster-bounds') return new Color3(1, 0.78, 0.1);\n if (kind === 'receiver-bounds') return new Color3(0.1, 0.75, 1);\n if (kind === 'receiver-surface') return new Color3(0.05, 0.55, 1);\n if (kind === 'light-direction') return new Color3(1, 0.95, 0.2);\n if (kind === 'footprint') return new Color3(0.1, 1, 0.42);\n return new Color3(1, 0.25, 0.25);\n}\n\nfunction addVec3(left: EditorTransformVec3, right: EditorTransformVec3): EditorTransformVec3 {\n return {\n x: left.x + right.x,\n y: left.y + right.y,\n z: left.z + right.z,\n };\n}\n\nfunction scaleVec3(value: EditorTransformVec3, factor: number): EditorTransformVec3 {\n return {\n x: value.x * factor,\n y: value.y * factor,\n z: value.z * factor,\n };\n}\n\nfunction averagePositions(transforms: EditorTransformSnapshot[]): EditorTransformVec3 {\n const sum = transforms.reduce(\n (current, transform) => addVec3(current, readEditorTransformPosition(transform)),\n { x: 0, y: 0, z: 0 },\n );\n return scaleVec3(sum, 1 / transforms.length);\n}\n\nfunction getProjectionSelectionBounds(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeIds: string[],\n): BabylonEditorProjectionBounds | null {\n let min: EditorTransformVec3 | null = null;\n let max: EditorTransformVec3 | null = null;\n for (const nodeId of nodeIds) {\n const bounds = readProjectionBounds(resolveProjectionSelectionBoundsTarget(projections, nodeId));\n if (!bounds) continue;\n min = min\n ? {\n x: Math.min(min.x, bounds.min.x),\n y: Math.min(min.y, bounds.min.y),\n z: Math.min(min.z, bounds.min.z),\n }\n : bounds.min;\n max = max\n ? {\n x: Math.max(max.x, bounds.max.x),\n y: Math.max(max.y, bounds.max.y),\n z: Math.max(max.z, bounds.max.z),\n }\n : bounds.max;\n }\n if (!min || !max) return null;\n const center = {\n x: (min.x + max.x) / 2,\n y: (min.y + max.y) / 2,\n z: (min.z + max.z) / 2,\n };\n return {\n min,\n max,\n center,\n size: {\n x: max.x - min.x,\n y: max.y - min.y,\n z: max.z - min.z,\n },\n };\n}\n\nfunction resolveProjectionSelectionBoundsTarget(\n projections: Map<string, ProjectedBabylonEditorNode>,\n nodeId: string,\n): any | null {\n const projection = projections.get(nodeId);\n if (projection?.root) return projection.root;\n for (const candidateProjection of projections.values()) {\n const selectionTarget = findProjectionSelectionMeshByNodeId(candidateProjection, nodeId);\n if (selectionTarget) return selectionTarget;\n }\n return null;\n}\n\nfunction findProjectionSelectionMeshByNodeId(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n): any | null {\n for (const mesh of projection.selectionMeshes ?? []) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n for (const mesh of projection.outlineMeshes) {\n if (readProjectionMeshSelectionNodeId(mesh) === nodeId) return mesh;\n }\n return null;\n}\n\nfunction readProjectionMeshSelectionNodeId(mesh: any): string | null {\n const nodeId = mesh?.metadata?.editorProjection?.nodeId;\n return typeof nodeId === 'string' && nodeId.length > 0 ? nodeId : null;\n}\n\nfunction readProjectionBounds(root: any): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n if (!root) return null;\n const bounds = root.getHierarchyBoundingVectors?.();\n if (bounds?.min && bounds?.max) {\n return {\n min: readVector3(bounds.min, { x: 0, y: 0, z: 0 }),\n max: readVector3(bounds.max, { x: 0, y: 0, z: 0 }),\n };\n }\n const transform = readProjectionTransform(root);\n const position = readEditorTransformPosition(transform);\n return {\n min: position,\n max: position,\n };\n}\n\nexport function readProjectionTransform(node: any): EditorTransformSnapshot {\n return readProjectionWorldTransform(node);\n}\n\nfunction readProjectionWorldTransform(node: any, seen = new Set<any>()): EditorTransformSnapshot {\n const local = readProjectionLocalTransform(node);\n const parent = node?.parent ?? null;\n if (!parent || seen.has(node)) return local;\n seen.add(node);\n const parentWorld = readProjectionWorldTransform(parent, seen);\n return combineEditorTransforms(parentWorld, local) ?? local;\n}\n\nfunction readProjectionLocalTransform(node: any): EditorTransformSnapshot {\n const matrix = readProjectionLocalMatrixTransform(node);\n if (matrix) return matrix;\n const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;\n return {\n position: readVector3(node?.position, { x: 0, y: 0, z: 0 }),\n rotation: readVector3(rotation, { x: 0, y: 0, z: 0 }),\n scale: readVector3(node?.scaling, { x: 1, y: 1, z: 1 }),\n };\n}\n\nfunction readProjectionLocalMatrixTransform(node: any): EditorTransformSnapshot | null {\n const metadata = readProjectionObject(node?.metadata);\n const metadataMatrix = metadata?.[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n if (Array.isArray(metadataMatrix)) {\n const transform = createEditorTransformMatrixSnapshot(metadataMatrix);\n if (transform) return transform;\n }\n const pivotMatrix = node?._usePivotMatrix ? node?._pivotMatrix?.asArray?.() : null;\n return Array.isArray(pivotMatrix) || ArrayBuffer.isView(pivotMatrix)\n ? createEditorTransformMatrixSnapshot(Array.from(pivotMatrix as ArrayLike<number>))\n : null;\n}\n\nfunction createProjectionRoot(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n): any | null {\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return null;\n const root = new TransformNode(`${node.id}.projection`, scene);\n root.id = node.id;\n root.name = node.name ?? node.id;\n const disableGeneratedShadow = node.runtimeKind === 'camera' || node.runtimeKind === 'light' || node.helperKind === 'root';\n root.metadata = {\n ...(root.metadata ?? {}),\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId: node.id,\n ...(node.runtimeKind ? { runtimeKind: node.runtimeKind } : {}),\n ...createProjectionShadowMetadata(node),\n },\n };\n return root;\n}\n\nasync function loadModelProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n getLatestNode: () => BabylonEditorProjectionNode,\n): Promise<void> {\n const asset = node.asset;\n if (!asset || !options.importModel) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, !!asset);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n\n try {\n const result = await options.importModel({\n babylon: options.babylon,\n scene: options.scene,\n root: projection.root,\n node,\n asset,\n });\n if (!result) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n return;\n }\n if (projection.root.isDisposed?.()) {\n disposeImportedProjectionResult(result);\n return;\n }\n const latestNode = getLatestNode();\n attachImportedProjectionResult(options, latestNode, asset, projection, result);\n applyProjectionOutline(latestNode, projection);\n } catch (error) {\n options.logger?.warn?.(`[BabylonEditorProjection] Failed to project model \"${asset.sourceId ?? asset.id ?? node.id}\"`, error);\n if (!projection.root.isDisposed?.()) {\n const latestNode = getLatestNode();\n attachFallbackProjection(options.babylon, options.scene, latestNode, projection, true);\n applyProjectionOutline(latestNode, projection);\n }\n }\n}\n\nfunction attachImportedProjectionResult(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n projection: ProjectedBabylonEditorNode,\n result: BabylonEditorProjectionImportResult,\n): void {\n const { babylon, scene } = options;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n try {\n const modelRoot = new TransformNode(`${node.id}.modelRoot`, scene);\n modelRoot.parent = projection.root;\n modelRoot.metadata = {\n ...(modelRoot.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n applyAssetDefaultsTransform(babylon, modelRoot, asset.transform);\n collapseZeroVertexProjectionWrapperMeshes(babylon, scene, result);\n\n const importedNodes = [\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ];\n const importedNodeSet = new Set<any>(importedNodes);\n for (const importedNode of importedNodes) {\n if (importedNode === modelRoot) continue;\n if (!importedNode.parent || !importedNodeSet.has(importedNode.parent)) {\n importedNode.parent = modelRoot;\n }\n importedNode.metadata = {\n ...(importedNode.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n sourceId: asset.sourceId,\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n const materialSlots = readProjectionAssetMaterialSlots(asset, node.id);\n const materialOwnerResolutionContext = createProjectionMaterialOwnerResolutionContext(\n modelRoot,\n node.id,\n );\n const explicitlyBoundSlotIds = new Set(\n createProjectionMaterialSlotBindings(node).map(binding => binding.slot.slotId),\n );\n const ownerNodePathByMesh = new Map<any, string>();\n const ownerMeshCountByKey = new Map<string, number>();\n for (const mesh of result.meshes ?? []) {\n const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!ownerNodePath) continue;\n ownerNodePathByMesh.set(mesh, ownerNodePath);\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n ownerMeshCountByKey.set(ownerKey, (ownerMeshCountByKey.get(ownerKey) ?? 0) + 1);\n }\n const splitPrimitiveOrdinalByOwnerKey = new Map<string, number>();\n const primitiveBoundsProxyOwnerKeys = new Set<string>();\n for (const mesh of result.meshes ?? []) {\n mesh.isPickable = true;\n applyProjectionRenderingToMesh(node, mesh);\n const ownerNodePath = ownerNodePathByMesh.get(mesh) ?? null;\n if (ownerNodePath) {\n const ownerKey = createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId: node.id });\n const ownerMeshCount = ownerMeshCountByKey.get(ownerKey) ?? 0;\n const splitPrimitiveSlot = resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n splitPrimitiveOrdinalByOwnerKey,\n );\n const primitiveSelectionMeshes = createProjectionAssetMeshSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n const primitiveBoundsSelectionMeshes = !splitPrimitiveSlot\n && primitiveSelectionMeshes.length === 0\n && !primitiveBoundsProxyOwnerKeys.has(ownerKey)\n ? createProjectionPrimitiveBoundsSelectionProxies(\n options,\n node,\n projection,\n mesh,\n ownerNodePath,\n materialSlots,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n ownerMeshCount,\n )\n : [];\n if (primitiveBoundsSelectionMeshes.length > 0) primitiveBoundsProxyOwnerKeys.add(ownerKey);\n const usesSelectionMeshes = primitiveSelectionMeshes.length > 0\n || primitiveBoundsSelectionMeshes.length > 0\n || primitiveBoundsProxyOwnerKeys.has(ownerKey);\n const selectionKey = resolveProjectionAssetMeshSelectionKey(\n asset,\n mesh,\n ownerNodePath,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n node.id,\n );\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: splitPrimitiveSlot\n ? createAssetMeshProjectionNodeId(node.id, splitPrimitiveSlot.key)\n : usesSelectionMeshes\n ? node.id\n : createAssetMeshProjectionNodeId(node.id, selectionKey),\n rootNodeId: node.id,\n sourceId: asset.sourceId,\n ownerNodePath,\n ...(splitPrimitiveSlot\n ? {\n slotSelectionKey: splitPrimitiveSlot.key,\n primitiveIndex: splitPrimitiveSlot.primitiveIndex,\n }\n : {}),\n ...(!splitPrimitiveSlot && !usesSelectionMeshes && selectionKey !== ownerNodePath\n ? { slotSelectionKey: selectionKey }\n : {}),\n runtimeKind: 'assetMesh',\n ...createProjectionShadowMetadata(node),\n },\n };\n }\n }\n projection.runtimeObjects.push(\n ...applyProjectionArtistMaterialProfilesToMeshes(\n options,\n node,\n modelRoot,\n result.meshes ?? [],\n materialOwnerResolutionContext,\n ),\n );\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.stop?.();\n }\n projection.animationGroups = result.animationGroups ?? [];\n projection.outlineMeshes = (result.meshes ?? []).filter((mesh: any) => mesh.getTotalVertices?.() > 0);\n projection.importStructure = createProjectionImportStructureSnapshot(node, asset, modelRoot, result);\n const lightSync = resyncProjectionMeshLightSources(scene, result.meshes ?? []);\n options.logger?.info?.('[BabylonEditorProjection] Model light sources synchronized', {\n projectionNodeId: node.id,\n sourceAssetId: asset.sourceId ?? asset.id ?? null,\n importedMeshCount: lightSync.importedMeshCount,\n instancedMeshCount: lightSync.instancedMeshCount,\n lightSourceOwnerCount: lightSync.lightSourceOwnerCount,\n activeSceneLightCount: lightSync.activeSceneLightCount,\n resolvedLightSourceOwnerCount: lightSync.resolvedLightSourceOwnerCount,\n });\n } catch (error) {\n disposeImportedProjectionResult(result);\n throw error;\n }\n}\n\nfunction collapseZeroVertexProjectionWrapperMeshes(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n result: BabylonEditorProjectionImportResult,\n): void {\n const meshes = result.meshes ?? [];\n if (meshes.length === 0) return;\n const TransformNode = (babylon as any).TransformNode;\n if (!TransformNode) return;\n const sourceMeshes = collectProjectionSourceMeshReferences(meshes);\n const keptMeshes: any[] = [];\n const replacementTransformNodes: any[] = [];\n for (const mesh of meshes) {\n if (!canCollapseProjectionWrapperMesh(mesh, sourceMeshes)) {\n keptMeshes.push(mesh);\n continue;\n }\n const replacement = createProjectionWrapperTransformNode(TransformNode, scene, mesh);\n if (!replacement) {\n keptMeshes.push(mesh);\n continue;\n }\n for (const child of readProjectionDirectChildren(mesh)) {\n child.parent = replacement;\n }\n mesh.dispose?.(true, false);\n replacementTransformNodes.push(replacement);\n }\n if (replacementTransformNodes.length === 0) return;\n result.meshes = keptMeshes;\n result.transformNodes = [\n ...(result.transformNodes ?? []),\n ...replacementTransformNodes,\n ];\n}\n\nfunction collectProjectionSourceMeshReferences(meshes: readonly any[]): Set<any> {\n const sourceMeshes = new Set<any>();\n for (const mesh of meshes) {\n const sourceMesh = mesh?.sourceMesh;\n if (sourceMesh) sourceMeshes.add(sourceMesh);\n }\n return sourceMeshes;\n}\n\nfunction canCollapseProjectionWrapperMesh(mesh: any, sourceMeshes: ReadonlySet<any>): boolean {\n if (!mesh || mesh.getClassName?.() !== 'Mesh') return false;\n if (sourceMeshes.has(mesh)) return false;\n if (mesh.sourceMesh) return false;\n const vertices = mesh.getTotalVertices?.();\n if (vertices !== 0) return false;\n if (Array.isArray(mesh.instances) && mesh.instances.length > 0) return false;\n if (mesh.skeleton || mesh.morphTargetManager) return false;\n if (Array.isArray(mesh.subMeshes) && mesh.subMeshes.length > 0) return false;\n if (mesh.material) return false;\n const projection = readProjectionObject(mesh.metadata?.editorProjection);\n const runtimeKind = projection?.runtimeKind;\n if (\n runtimeKind === 'assetMeshSelectionProxy'\n || runtimeKind === 'primitive'\n || runtimeKind === 'camera'\n || runtimeKind === 'light'\n || projection?.primitiveShape != null\n || projection?.helper != null\n || projection?.disableStaticProjectedShadow === false\n ) {\n return false;\n }\n return true;\n}\n\nfunction createProjectionWrapperTransformNode(\n TransformNode: new (name: string, scene: RuntimeScene) => any,\n scene: RuntimeScene,\n mesh: any,\n): any | null {\n const name = typeof mesh.name === 'string' ? mesh.name : typeof mesh.id === 'string' ? mesh.id : 'projectionWrapper';\n const replacement = new TransformNode(name, scene);\n if (typeof mesh.id === 'string') replacement.id = mesh.id;\n if (typeof mesh.name === 'string') replacement.name = mesh.name;\n replacement.parent = mesh.parent ?? null;\n if (mesh.metadata && typeof mesh.metadata === 'object') {\n replacement.metadata = { ...mesh.metadata };\n }\n if (mesh.reservedDataStore && typeof mesh.reservedDataStore === 'object') {\n replacement.reservedDataStore = { ...mesh.reservedDataStore };\n }\n if (Array.isArray(mesh.animations)) replacement.animations = [...mesh.animations];\n copyProjectionWrapperTransform(mesh, replacement);\n if (typeof mesh.isEnabled === 'function' && typeof replacement.setEnabled === 'function') {\n replacement.setEnabled(mesh.isEnabled());\n }\n if (typeof mesh.state === 'string') replacement.state = mesh.state;\n if (typeof mesh.layerMask === 'number') replacement.layerMask = mesh.layerMask;\n return replacement;\n}\n\nfunction copyProjectionWrapperTransform(source: any, target: any): void {\n copyBabylonVector3(source.position, target.position);\n copyBabylonVector3(source.rotation, target.rotation);\n copyBabylonVector3(source.scaling, target.scaling);\n if (source.rotationQuaternion?.clone) {\n target.rotationQuaternion = source.rotationQuaternion.clone();\n } else {\n target.rotationQuaternion = null;\n }\n const pivotMatrix = source._pivotMatrix?.clone?.() ?? source.getPivotMatrix?.()?.clone?.();\n if (pivotMatrix) {\n if (source._usePivotMatrix && typeof target.setPreTransformMatrix === 'function') {\n target.setPreTransformMatrix(pivotMatrix.clone?.() ?? pivotMatrix);\n } else if (typeof target.setPivotMatrix === 'function') {\n target.setPivotMatrix(pivotMatrix.clone?.() ?? pivotMatrix, false);\n }\n }\n}\n\nfunction copyBabylonVector3(source: any, target: any): void {\n if (!source || !target) return;\n if (typeof target.copyFrom === 'function') {\n target.copyFrom(source);\n return;\n }\n target.x = source.x;\n target.y = source.y;\n target.z = source.z;\n}\n\nfunction readProjectionDirectChildren(node: any): any[] {\n const children = node?.getChildren?.((candidate: any) => candidate?.parent === node, true);\n return Array.isArray(children) ? children.filter(child => child?.parent === node) : [];\n}\n\nfunction createProjectionImportStructureSnapshot(\n node: BabylonEditorProjectionNode,\n asset: BabylonEditorProjectionAsset,\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): BabylonEditorProjectionImportStructureSnapshot {\n const runtimeNodes = collectProjectionImportRuntimeNodes(modelRoot, result);\n const nodeIdByRuntimeNode = new Map<any, string>();\n const materialIdByRuntimeMaterial = new Map<any, string>();\n const textureIdByRuntimeTexture = new Map<any, string>();\n const materialNodeIds = new Map<string, Set<string>>();\n const materialTextureIds = new Map<string, Set<string>>();\n const rootSnapshotId = 'root';\n const snapshots: BabylonEditorProjectionImportNodeSnapshot[] = [{\n id: rootSnapshotId,\n parentId: null,\n name: readProjectionRuntimeName(modelRoot, node.name ?? node.id),\n kind: 'root',\n }];\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = createProjectionImportRuntimeNodeId(runtimeNode, nodeIdByRuntimeNode.size);\n nodeIdByRuntimeNode.set(runtimeNode, snapshotId);\n }\n\n for (const runtimeNode of runtimeNodes) {\n const snapshotId = nodeIdByRuntimeNode.get(runtimeNode);\n if (!snapshotId) continue;\n const materialIds = readProjectionRuntimeNodeMaterials(runtimeNode)\n .map(runtimeMaterial => getProjectionImportMaterialSnapshotId(runtimeMaterial, materialIdByRuntimeMaterial))\n .filter((materialId): materialId is string => !!materialId);\n for (const materialId of materialIds) {\n const nodeIds = materialNodeIds.get(materialId) ?? new Set<string>();\n nodeIds.add(snapshotId);\n materialNodeIds.set(materialId, nodeIds);\n const textureIds = readProjectionRuntimeMaterialTextures(readProjectionRuntimeNodeMaterialById(runtimeNode, runtimeNode, materialId, materialIdByRuntimeMaterial))\n .map(runtimeTexture => getProjectionImportTextureSnapshotId(runtimeTexture, textureIdByRuntimeTexture))\n .filter((textureId): textureId is string => !!textureId);\n const materialTextures = materialTextureIds.get(materialId) ?? new Set<string>();\n for (const textureId of textureIds) materialTextures.add(textureId);\n materialTextureIds.set(materialId, materialTextures);\n }\n snapshots.push({\n id: snapshotId,\n parentId: resolveProjectionImportRuntimeParentId(runtimeNode, modelRoot, nodeIdByRuntimeNode, rootSnapshotId),\n name: readProjectionRuntimeName(runtimeNode, snapshotId),\n kind: isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'transform',\n ...readProjectionRuntimeSourceName(runtimeNode),\n ...readProjectionRuntimeOwnerNodePath(runtimeNode),\n ...(materialIds.length > 0 ? { materialIds } : {}),\n });\n }\n\n const materials = [...materialIdByRuntimeMaterial.entries()].map(([runtimeMaterial, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeMaterial, id),\n ...readProjectionRuntimeKind(runtimeMaterial),\n nodeIds: [...(materialNodeIds.get(id) ?? [])],\n textureIds: [...(materialTextureIds.get(id) ?? [])],\n }));\n const textures = [...textureIdByRuntimeTexture.entries()].map(([runtimeTexture, id]) => ({\n id,\n name: readProjectionRuntimeName(runtimeTexture, id),\n ...readProjectionRuntimeKind(runtimeTexture),\n ...readProjectionRuntimeTextureUrl(runtimeTexture),\n }));\n const animations = createProjectionImportAnimationSnapshots(result.animationGroups ?? []);\n\n return {\n projectionNodeId: node.id,\n ...(asset.id ? { assetId: asset.id } : {}),\n ...(asset.sourceId ? { sourceId: asset.sourceId } : {}),\n nodes: snapshots,\n materials,\n textures,\n animations,\n };\n}\n\nfunction collectProjectionImportRuntimeNodes(\n modelRoot: any,\n result: BabylonEditorProjectionImportResult,\n): any[] {\n const known = new Set<any>([\n ...(result.transformNodes ?? []),\n ...(result.meshes ?? []),\n ].filter(Boolean));\n const ordered: any[] = [];\n const visit = (runtimeNode: any): void => {\n for (const child of readProjectionRuntimeChildren(runtimeNode)) {\n if (!known.has(child) || ordered.includes(child)) continue;\n ordered.push(child);\n visit(child);\n }\n };\n visit(modelRoot);\n for (const runtimeNode of known) {\n if (!ordered.includes(runtimeNode)) ordered.push(runtimeNode);\n }\n return ordered;\n}\n\nfunction readProjectionRuntimeChildren(runtimeNode: any): any[] {\n const children = runtimeNode?.getChildren?.();\n return Array.isArray(children) ? children : [];\n}\n\nfunction createProjectionImportRuntimeNodeId(runtimeNode: any, index: number): string {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n const rawName = sourceName || runtimeNode?.name || runtimeNode?.id || `node-${index + 1}`;\n return `${isProjectionRuntimeMeshLike(runtimeNode) ? 'mesh' : 'node'}:${sanitizeProjectionImportSnapshotId(rawName)}:${index + 1}`;\n}\n\nfunction resolveProjectionImportRuntimeParentId(\n runtimeNode: any,\n modelRoot: any,\n nodeIdByRuntimeNode: ReadonlyMap<any, string>,\n rootSnapshotId: string,\n): string | null {\n const parent = runtimeNode?.parent ?? null;\n if (!parent || parent === modelRoot) return rootSnapshotId;\n return nodeIdByRuntimeNode.get(parent) ?? rootSnapshotId;\n}\n\nfunction isProjectionRuntimeMeshLike(runtimeNode: any): boolean {\n return typeof runtimeNode?.getTotalVertices === 'function';\n}\n\nfunction readProjectionRuntimeNodeMaterials(runtimeNode: any): any[] {\n const material = runtimeNode?.material;\n if (!material) return [];\n const subMaterials = material.subMaterials;\n if (Array.isArray(subMaterials) && subMaterials.length > 0) {\n return subMaterials.filter(Boolean);\n }\n return [material];\n}\n\nfunction readProjectionRuntimeNodeMaterialById(\n runtimeNode: any,\n _fallbackNode: any,\n materialId: string,\n materialIdByRuntimeMaterial: ReadonlyMap<any, string>,\n): any | null {\n for (const material of readProjectionRuntimeNodeMaterials(runtimeNode)) {\n if (materialIdByRuntimeMaterial.get(material) === materialId) return material;\n }\n return null;\n}\n\nfunction getProjectionImportMaterialSnapshotId(\n runtimeMaterial: any,\n materialIdByRuntimeMaterial: Map<any, string>,\n): string | null {\n if (!runtimeMaterial) return null;\n const existing = materialIdByRuntimeMaterial.get(runtimeMaterial);\n if (existing) return existing;\n const id = `material:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(runtimeMaterial, 'material'))}:${materialIdByRuntimeMaterial.size + 1}`;\n materialIdByRuntimeMaterial.set(runtimeMaterial, id);\n return id;\n}\n\nfunction readProjectionRuntimeMaterialTextures(runtimeMaterial: any | null): any[] {\n if (!runtimeMaterial) return [];\n const textures = runtimeMaterial.getActiveTextures?.();\n return Array.isArray(textures) ? textures.filter(Boolean) : [];\n}\n\nfunction getProjectionImportTextureSnapshotId(\n runtimeTexture: any,\n textureIdByRuntimeTexture: Map<any, string>,\n): string | null {\n if (!runtimeTexture) return null;\n const existing = textureIdByRuntimeTexture.get(runtimeTexture);\n if (existing) return existing;\n const name = readProjectionRuntimeTextureUrl(runtimeTexture).url\n ?? readProjectionRuntimeName(runtimeTexture, 'texture');\n const id = `texture:${sanitizeProjectionImportSnapshotId(name)}:${textureIdByRuntimeTexture.size + 1}`;\n textureIdByRuntimeTexture.set(runtimeTexture, id);\n return id;\n}\n\nfunction createProjectionImportAnimationSnapshots(animationGroups: any[]): BabylonEditorProjectionImportAnimationSnapshot[] {\n return animationGroups.filter(Boolean).map((animationGroup, index) => ({\n id: `animation:${sanitizeProjectionImportSnapshotId(readProjectionRuntimeName(animationGroup, 'animation'))}:${index + 1}`,\n name: readProjectionRuntimeName(animationGroup, `Animation ${index + 1}`),\n }));\n}\n\nfunction readProjectionRuntimeName(runtimeObject: any, fallback: string): string {\n const name = runtimeObject?.name ?? runtimeObject?.id;\n return typeof name === 'string' && name.trim() ? name.trim() : fallback;\n}\n\nfunction readProjectionRuntimeKind(runtimeObject: any): { kind?: string } {\n const kind = runtimeObject?.getClassName?.();\n return typeof kind === 'string' && kind.trim() ? { kind: kind.trim() } : {};\n}\n\nfunction readProjectionRuntimeTextureUrl(runtimeTexture: any): { url?: string } {\n const url = runtimeTexture?.url ?? runtimeTexture?.name;\n return typeof url === 'string' && url.trim() ? { url: url.trim() } : {};\n}\n\nfunction readProjectionRuntimeSourceName(runtimeNode: any): { sourceName?: string } {\n const sourceName = readProjectionSourceNodeSegment(runtimeNode);\n return sourceName ? { sourceName } : {};\n}\n\nfunction readProjectionRuntimeOwnerNodePath(runtimeNode: any): { ownerNodePath?: string } {\n const ownerNodePath = runtimeNode?.metadata?.editorProjection?.ownerNodePath;\n return typeof ownerNodePath === 'string' && ownerNodePath.trim() ? { ownerNodePath: ownerNodePath.trim() } : {};\n}\n\nfunction sanitizeProjectionImportSnapshotId(value: string): string {\n return value.trim().toLowerCase().replace(/[^a-z0-9_.:-]+/gi, '-').replace(/^-+|-+$/g, '') || 'item';\n}\n\nfunction cloneProjectionImportStructureSnapshot(\n snapshot: BabylonEditorProjectionImportStructureSnapshot | null,\n): BabylonEditorProjectionImportStructureSnapshot | null {\n if (!snapshot) return null;\n return {\n ...snapshot,\n nodes: snapshot.nodes.map(item => ({\n ...item,\n ...(item.materialIds ? { materialIds: [...item.materialIds] } : {}),\n })),\n materials: snapshot.materials.map(item => ({\n ...item,\n nodeIds: [...item.nodeIds],\n textureIds: [...item.textureIds],\n })),\n textures: snapshot.textures.map(item => ({ ...item })),\n animations: snapshot.animations.map(item => ({ ...item })),\n };\n}\n\nfunction disposeImportedProjectionResult(result: BabylonEditorProjectionImportResult): void {\n for (const animationGroup of result.animationGroups ?? []) {\n animationGroup.dispose?.();\n }\n for (const node of [...(result.meshes ?? []), ...(result.transformNodes ?? [])]) {\n node.dispose?.();\n }\n}\n\nfunction attachRuntimeProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.runtimeKind === 'camera') {\n attachCameraProjection(babylon, scene, node, projection);\n return true;\n }\n if (node.runtimeKind === 'light') {\n if (node.light?.type === 'hemispheric') {\n attachHemisphericLightProjection(babylon, scene, node, projection);\n } else {\n attachDirectionalLightProjection(babylon, scene, node, projection);\n }\n return true;\n }\n return false;\n}\n\nfunction attachCameraProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n\n const settings = normalizeBabylonEditorProjectionCameraSettings(node.camera);\n const body = MeshBuilder.CreateBox(`${node.id}.cameraHelper`, {\n width: 0.38,\n height: 0.28,\n depth: 0.24,\n }, scene);\n body.parent = projection.root;\n body.metadata = createProjectionMetadata(node.id, { runtimeKind: 'camera', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.cameraHelper.material`, scene);\n material.diffuseColor = new Color3(0.45, 0.68, 1);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n body.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [body];\n\n const frustum = createCameraFrustumLines(babylon, scene, node, settings);\n if (frustum) {\n frustum.parent = projection.root;\n frustum.isPickable = false;\n }\n}\n\nfunction attachDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const DirectionalLight = (babylon as any).DirectionalLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const direction = new Vector3(settings.direction.x, settings.direction.y, settings.direction.z);\n\n if (DirectionalLight) {\n const light = new DirectionalLight(`${node.id}.directionalLight`, direction, scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'directional' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateBox(`${node.id}.lightHelper`, {\n size: 0.28,\n }, scene);\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', helper: 'body' });\n const material = new StandardMaterial(`${node.id}.lightHelper.material`, scene);\n material.diffuseColor = new Color3(1, 0.92, 0.42);\n material.emissiveColor = new Color3(0.5, 0.42, 0.12);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n\n const arrow = createLightDirectionLines(babylon, scene, node, settings.direction);\n if (arrow) {\n arrow.parent = projection.root;\n arrow.isPickable = false;\n }\n}\n\nfunction attachFallbackProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n rendererFallback: boolean,\n): void {\n const mesh = createFallbackProjectionMesh(babylon, scene, node, rendererFallback);\n if (!mesh) return;\n mesh.parent = projection.root;\n projection.outlineMeshes = [mesh];\n}\n\nfunction attachPrimitiveProjection(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const { babylon, scene } = options;\n const mesh = createPrimitiveProjectionMesh(babylon, scene, node, options);\n if (!mesh) {\n attachFallbackProjection(babylon, scene, node, projection, true);\n return;\n }\n mesh.parent = projection.root;\n mesh.isPickable = true;\n if (mesh.material && !isBabylonPrimitiveProjectionSharedMaterial(mesh.material)) {\n projection.runtimeObjects.push(mesh.material);\n }\n projection.outlineMeshes = [mesh];\n}\n\nfunction applyProjectionOutline(\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const options = createBabylonDefaultOutlineOptions(node.outline);\n if (!options) return;\n for (const mesh of projection.outlineMeshes) {\n applyBabylonDefaultOutline(mesh, options);\n }\n}\n\nfunction createBabylonDefaultOutlineOptions(\n outline: BabylonEditorProjectionOutline | null | undefined,\n): BabylonDefaultOutlineOptions | null {\n if (!outline) return null;\n const options: BabylonDefaultOutlineOptions = {};\n if (typeof outline.renderOutline === 'boolean') options.enabled = outline.renderOutline;\n if (typeof outline.outlineWidth === 'number' && Number.isFinite(outline.outlineWidth)) {\n options.width = outline.outlineWidth;\n }\n if (outline.outlineColor) {\n const color = outline.outlineColor;\n options.color = { r: color.r, g: color.g, b: color.b };\n }\n return Object.keys(options).length > 0 ? options : null;\n}\n\nfunction createPrimitiveProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n options?: Pick<BabylonEditorProjectionOptions, 'resolveTextureUrl'>,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const PBRMaterial = (babylon as any).PBRMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const shape = node.primitive?.shape;\n const name = `${node.id}.${shape ?? 'primitive'}Projection`;\n const mesh = shape === 'sphere'\n ? MeshBuilder.CreateSphere?.(name, { diameter: 1, segments: 32 }, scene)\n : shape === 'plane'\n ? MeshBuilder.CreateGround?.(name, { width: 1, height: 1, subdivisions: 1 }, scene)\n : shape === 'capsule'\n ? MeshBuilder.CreateCapsule?.(name, { height: 2, radius: 0.5, tessellation: 24, subdivisions: 8 }, scene)\n : MeshBuilder.CreateBox?.(name, { size: 1 }, scene);\n if (!mesh) return null;\n const material = node.artistMaterialKind === 'standard' || !PBRMaterial\n ? new StandardMaterial(`${node.id}.primitive.material`, scene)\n : new PBRMaterial(`${node.id}.primitive.material`, scene);\n if ('albedoColor' in material) material.albedoColor = new Color3(0.72, 0.74, 0.76);\n else material.diffuseColor = new Color3(0.72, 0.74, 0.76);\n if ('specularColor' in material) material.specularColor = new Color3(0.12, 0.14, 0.16);\n if ('metallic' in material) material.metallic = 0;\n if ('roughness' in material) material.roughness = 1;\n if (shape === 'plane') material.backFaceCulling = false;\n applyProjectionArtistMaterialProfile({ babylon, scene, resolveTextureUrl: options?.resolveTextureUrl }, material, node.artistMaterialProfile);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'primitive',\n primitiveShape: shape,\n ...createProjectionShadowMetadata(node),\n });\n return mesh;\n}\n\nfunction applyProjectionArtistMaterialProfilesToMeshes(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n modelRoot: any,\n meshes: any[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n): unknown[] {\n const slotBindings = createProjectionMaterialSlotBindings(node);\n const hasRootProfile = !!node.artistMaterialProfile;\n const hasSlotProfiles = slotBindings.length > 0;\n if (!hasRootProfile && !hasSlotProfiles) return [];\n const clonedMaterials: unknown[] = [];\n const materials = new Set<unknown>();\n if (hasRootProfile) {\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n const meshOwnerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);\n if (!material) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath,\n warningMessage: 'Root material profile was not applied because an imported mesh has no target material.',\n });\n continue;\n }\n if (materials.has(material)) continue;\n materials.add(material);\n applyProjectionArtistMaterialProfile(options, material, node.artistMaterialProfile);\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: true,\n matchKind: 'root',\n targetMaterialStatus: 'material',\n meshOwnerNodePath,\n targetMaterialName: readProjectionMaterialName(material),\n targetMaterialType: readProjectionMaterialType(material),\n });\n }\n if (materials.size === 0 && meshes.length === 0) {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId: node.id,\n source: 'rootProfile',\n applied: false,\n matchKind: 'root',\n targetMaterialStatus: 'missingMaterial',\n meshOwnerNodePath: null,\n warningMessage: 'Root material profile was not applied because the imported model produced no meshes.',\n });\n }\n }\n if (!hasSlotProfiles) return clonedMaterials;\n const materialCounts = countProjectionMeshMaterials(meshes);\n const assetMaterialSlots = node.asset ? readProjectionAssetMaterialSlots(node.asset, node.id) : [];\n for (const slotBinding of slotBindings) {\n const ownerResolution = materialOwnerResolutionContext.resolve(slotBinding.slot, {\n explicitSlotBinding: true,\n });\n const ownerDiagnostic = createProjectionOwnerDiagnosticFields(ownerResolution);\n if (ownerResolution.status !== 'resolved') {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind ?? 'none',\n meshOwnerNodePath: null,\n targetMaterialStatus: 'missingMeshOwner',\n ...ownerDiagnostic,\n warningMessage: ownerResolution.diagnostic.message,\n });\n continue;\n }\n const mesh = ownerResolution.target.runtimeNode;\n const ownerNodePath = ownerResolution.candidate.canonicalPath;\n if (!readProjectionWritableMeshMaterial(mesh)) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: 'missingMaterial',\n ...ownerDiagnostic,\n warningMessage: 'Slot material profile was not applied because the resolved owner has no target material.',\n });\n continue;\n }\n const materialResolution = resolveProjectionSlotMaterialTarget(\n mesh,\n materialCounts,\n slotBinding.slot,\n ownerNodePath,\n {\n projectionNodeId: node.id,\n primitiveOwnerResolvedByPointer: isMaterialOwnerResolutionPointerVerified(\n slotBinding.slot,\n ownerResolution,\n ),\n primitiveSingleMaterialFallbackAllowed: isProjectionSinglePrimitiveMaterialSlot(slotBinding.slot, assetMaterialSlots),\n },\n );\n const targetMaterial = materialResolution.target?.material ?? readProjectionWritableMeshMaterial(mesh);\n if (!materialResolution.target) {\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: false,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(targetMaterial),\n targetMaterialType: readProjectionMaterialType(targetMaterial),\n ...ownerDiagnostic,\n warningMessage: materialResolution.warningMessage,\n });\n continue;\n }\n const target = materialResolution.target;\n clonedMaterials.push(...target.clonedMaterials);\n applyProjectionArtistMaterialProfile(options, target.material, slotBinding.profile);\n emitProjectionSlotMaterialProfileDiagnostic(options, node.id, slotBinding, {\n applied: true,\n matchKind: ownerResolution.matchKind,\n meshOwnerNodePath: ownerNodePath,\n targetMaterialStatus: materialResolution.targetMaterialStatus,\n targetMaterialName: readProjectionMaterialName(target.material),\n targetMaterialType: readProjectionMaterialType(target.material),\n ...ownerDiagnostic,\n ...(ownerResolution.diagnostic?.severity === 'warning'\n ? { warningMessage: ownerResolution.diagnostic.message }\n : {}),\n });\n }\n return clonedMaterials;\n}\n\nfunction createProjectionOwnerDiagnosticFields(\n resolution: ProjectionMaterialOwnerResolution,\n): Pick<\n BabylonEditorProjectionMaterialProfileDiagnostic,\n | 'ownerResolutionStatus'\n | 'ownerDiagnosticCode'\n | 'ownerDiagnosticSeverity'\n | 'ownerCandidateIds'\n | 'ownerIdentity'\n> {\n return {\n ownerResolutionStatus: resolution.status,\n ...(resolution.diagnostic ? {\n ownerDiagnosticCode: resolution.diagnostic.code,\n ownerDiagnosticSeverity: resolution.diagnostic.severity,\n } : {}),\n ownerCandidateIds: resolution.candidates.map(candidate => candidate.candidateId),\n ...(resolution.status === 'resolved' ? { ownerIdentity: resolution.identity } : {}),\n };\n}\n\nfunction applyProjectionArtistMaterialProfile(\n options: Pick<BabylonEditorProjectionOptions, 'babylon' | 'scene' | 'resolveTextureUrl'>,\n material: unknown,\n profile: ArtistMaterialProfile | null | undefined,\n): void {\n if (!profile) return;\n applyArtistMaterialProfileToRuntimeMaterial(material, options.scene, profile, {\n babylon: options.babylon,\n resolveTextureUrl: options.resolveTextureUrl,\n });\n}\n\nfunction emitProjectionSlotMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n projectionNodeId: string,\n slotBinding: ProjectionMaterialSlotBinding,\n diagnostic: Omit<BabylonEditorProjectionMaterialProfileDiagnostic, 'projectionNodeId' | 'source' | 'slotId' | 'ownerNodePath' | 'primitiveIndex'>,\n): void {\n emitProjectionMaterialProfileDiagnostic(options, {\n projectionNodeId,\n source: slotBinding.source,\n slotId: slotBinding.slot.slotId,\n ownerNodePath: slotBinding.slot.ownerNodePath,\n primitiveIndex: slotBinding.slot.primitiveIndex,\n ...diagnostic,\n });\n}\n\nfunction emitProjectionMaterialProfileDiagnostic(\n options: BabylonEditorProjectionOptions,\n diagnostic: BabylonEditorProjectionMaterialProfileDiagnostic,\n): void {\n options.onMaterialProfileDiagnostic?.(diagnostic);\n if (!diagnostic.warningMessage) return;\n options.logger?.warn?.('[BabylonEditorProjection] Material profile diagnostic warning', {\n projectionNodeId: diagnostic.projectionNodeId,\n source: diagnostic.source,\n slotId: diagnostic.slotId,\n ownerNodePath: diagnostic.ownerNodePath,\n meshOwnerNodePath: diagnostic.meshOwnerNodePath,\n matchKind: diagnostic.matchKind,\n targetMaterialStatus: diagnostic.targetMaterialStatus,\n warningMessage: diagnostic.warningMessage,\n });\n}\n\nfunction readProjectionMaterialName(material: unknown): string | undefined {\n const name = (material as any)?.name;\n return typeof name === 'string' && name.trim() ? name.trim() : undefined;\n}\n\nfunction readProjectionMaterialType(material: unknown): string | null | undefined {\n const getClassName = (material as any)?.getClassName;\n const className = typeof getClassName === 'function' ? getClassName.call(material) : null;\n return typeof className === 'string' && className.trim() ? className.trim() : className;\n}\n\nfunction createProjectionMaterialSlotBindings(\n node: Pick<BabylonEditorProjectionNode, 'artistMaterialSlotBindings' | 'id'>,\n): ProjectionMaterialSlotBinding[] {\n const bindings: ProjectionMaterialSlotBinding[] = [];\n for (const binding of node.artistMaterialSlotBindings ?? []) {\n const profile = binding?.profile;\n const slot = createProjectionMaterialSlotDescriptor(binding?.slot, node.id);\n if (!profile || !slot) continue;\n bindings.push({ slot, profile, source: 'slotBinding' });\n }\n return bindings;\n}\n\nfunction createProjectionMaterialSlotDescriptor(\n value: ProjectionMaterialSlotDescriptorInput | null | undefined,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object') return null;\n const ownerNodePath = typeof value.ownerNodePath === 'string'\n ? normalizeProjectionOwnerNodePath(value.ownerNodePath, { projectionNodeId })\n : '';\n const slotId = typeof value.slotId === 'string' && value.slotId.trim() ? value.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof value.label === 'string' && value.label.trim() ? value.label.trim() : '';\n const nodeIndex = Number.isInteger(value.nodeIndex) ? value.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(value.nodeIndexPath)\n ? value.nodeIndexPath.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const meshIndex = Number.isInteger(value.meshIndex) ? value.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(value.primitiveIndex) ? value.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(value.sourceMaterialIndex) ? value.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(value.sourceMaterialIndices)\n ? value.sourceMaterialIndices.filter((item): item is number => Number.isInteger(item))\n : undefined;\n const materialName = typeof value.materialName === 'string' && value.materialName.trim() ? value.materialName.trim() : '';\n const materialNames = Array.isArray(value.materialNames)\n ? value.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = Number.isFinite(value.triangleCount) ? value.triangleCount as number : undefined;\n const boundingBox = readProjectionMaterialSlotBoundingBox(value.boundingBox);\n return {\n slotId,\n ownerNodePath,\n ...(label ? { label } : {}),\n ...(nodeIndex != null ? { nodeIndex } : {}),\n ...(nodeIndexPath && nodeIndexPath.length > 0 ? { nodeIndexPath } : {}),\n ...(meshIndex != null ? { meshIndex } : {}),\n ...(primitiveIndex != null ? { primitiveIndex } : {}),\n ...(sourceMaterialIndex != null ? { sourceMaterialIndex } : {}),\n ...(sourceMaterialIndices && sourceMaterialIndices.length > 0\n ? { sourceMaterialIndices }\n : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n key: slotId || ownerNodePath,\n normalizedOwnerNodePath: ownerNodePath,\n matchKey: createMaterialSlotOwnerPathMatchKey(ownerNodePath, { projectionNodeId }),\n };\n}\n\nfunction readProjectionMaterialSlotBoundingBox(value: unknown): ProjectionMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readProjectionMaterialSlotBoundsTuple(record.min);\n const max = readProjectionMaterialSlotBoundsTuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readProjectionMaterialSlotBoundsTuple(value: unknown): [number, number, number] | undefined {\n if (!Array.isArray(value) || value.length < 3) return undefined;\n const tuple = value.slice(0, 3).map(item => Number(item));\n if (!tuple.every(item => Number.isFinite(item))) return undefined;\n return tuple as [number, number, number];\n}\n\nfunction createProjectionMaterialOwnerResolutionContext(\n rootNode: any,\n projectionNodeId: string,\n): ProjectionMaterialOwnerResolutionContext {\n const candidates = collectBabylonMaterialOwnerCandidates(rootNode, {\n readPathSegment: node => {\n const segment = stableProjectionNodeSegment(node);\n return segment == null\n ? null\n : normalizeProjectionOwnerNodePath(segment, { projectionNodeId });\n },\n }).map(candidate => ({\n ...candidate,\n canonicalPath: normalizeProjectionOwnerNodePath(candidate.canonicalPath, { projectionNodeId }),\n ...(candidate.sourceOwnerAliases ? {\n sourceOwnerAliases: candidate.sourceOwnerAliases.map(alias => (\n normalizeProjectionOwnerNodePath(alias, { projectionNodeId })\n )),\n } : {}),\n }));\n const cache = new Map<string, ProjectionMaterialOwnerResolution>();\n return {\n resolve(slot, options = {}) {\n const explicitSlotBinding = options.explicitSlotBinding === true;\n const cacheKey = createProjectionMaterialOwnerResolutionCacheKey(slot, explicitSlotBinding);\n const cached = cache.get(cacheKey);\n if (cached) return cached;\n const resolution = resolveMaterialOwner(slot, candidates, { explicitSlotBinding });\n cache.set(cacheKey, resolution);\n return resolution;\n },\n };\n}\n\nfunction createProjectionMaterialOwnerResolutionCacheKey(\n slot: ProjectionMaterialSlotDescriptor,\n explicitSlotBinding: boolean,\n): string {\n return JSON.stringify([\n explicitSlotBinding,\n slot.ownerNodePath,\n slot.nodeIndex ?? null,\n slot.nodeIndexPath ?? null,\n slot.meshIndex ?? null,\n slot.primitiveIndex ?? null,\n slot.sourceMaterialIndex ?? null,\n slot.sourceMaterialIndices ?? null,\n ]);\n}\n\nfunction buildProjectionOwnerNodePath(node: any, rootNode: any, projectionNodeId?: string): string | null {\n if (!node || !rootNode || node === rootNode) return '';\n const segments: string[] = [];\n let current = node;\n while (current && current !== rootNode) {\n const segment = stableProjectionNodeSegment(current);\n if (!segment) return null;\n segments.push(segment);\n current = current.parent ?? null;\n }\n if (current !== rootNode) return null;\n return normalizeProjectionOwnerNodePath(segments.reverse().join('/'), { projectionNodeId });\n}\n\nfunction stableProjectionNodeSegment(node: any): string | null {\n const sourceSegment = readProjectionSourceNodeSegment(node);\n if (sourceSegment) return sourceSegment;\n const candidates = [node?.name, node?.id];\n for (const candidate of candidates) {\n if (typeof candidate !== 'string') continue;\n const trimmed = candidate.trim();\n if (trimmed) return trimmed;\n }\n return null;\n}\n\nfunction createAssetMeshProjectionNodeId(rootNodeId: string, ownerNodePath: string): string {\n return `${rootNodeId}${ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(ownerNodePath)}`;\n}\n\nfunction resolveProjectionAssetMeshSelectionKey(\n asset: BabylonEditorProjectionAsset,\n mesh: any,\n ownerNodePath: string,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n projectionNodeId?: string,\n): string {\n const slots = resolveProjectionAssetMeshSelectionSlots(\n readProjectionAssetMaterialSlots(asset, projectionNodeId),\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n );\n return slots[0]?.key ?? ownerNodePath;\n}\n\nfunction resolveProjectionAssetMeshSelectionSlots(\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n mesh: any,\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): ProjectionMaterialSlotDescriptor[] {\n return materialSlots.filter(slot => {\n const resolution = materialOwnerResolutionContext.resolve(slot, {\n explicitSlotBinding: explicitlyBoundSlotIds.has(slot.slotId),\n });\n return resolution.status === 'resolved' && resolution.target.runtimeNode === mesh;\n });\n}\n\nfunction createProjectionAssetMeshSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n): any[] {\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex));\n if (primitiveSlots.length <= 1) return [];\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length <= 1) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const subMesh = subMeshes[primitiveIndex];\n if (!subMesh) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionSubMeshSelectionProxy(options, node, mesh, subMesh, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction resolveProjectionSplitPrimitiveMeshSelectionSlot(\n mesh: any,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n ordinalByOwnerKey: Map<string, number>,\n): ProjectionMaterialSlotDescriptor | null {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return null;\n if ((mesh?.getTotalVertices?.() ?? 0) <= 0) return null;\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter((slot): slot is ProjectionMaterialSlotDescriptor & { primitiveIndex: number } => (\n Number.isInteger(slot.primitiveIndex)\n ))\n .sort((left, right) => left.primitiveIndex - right.primitiveIndex);\n if (primitiveSlots.length === 1 && ownerMeshCount > 1) return primitiveSlots[0]!;\n if (primitiveSlots.length <= 1) return null;\n if (ownerMeshCount < primitiveSlots.length) return null;\n\n const ownerKey = primitiveSlots[0]?.matchKey ?? '';\n const ordinal = ordinalByOwnerKey.get(ownerKey) ?? 0;\n ordinalByOwnerKey.set(ownerKey, ordinal + 1);\n\n return primitiveSlots.find(slot => slot.primitiveIndex === ordinal) ?? primitiveSlots[ordinal] ?? null;\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxies(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n mesh: any,\n ownerNodePath: string,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n materialOwnerResolutionContext: ProjectionMaterialOwnerResolutionContext,\n explicitlyBoundSlotIds: ReadonlySet<string>,\n ownerMeshCount: number,\n): any[] {\n const subMeshes = Array.isArray(mesh?.subMeshes) ? mesh.subMeshes : [];\n if (subMeshes.length > 1) return [];\n const primitiveSlots = resolveProjectionAssetMeshSelectionSlots(\n materialSlots,\n mesh,\n materialOwnerResolutionContext,\n explicitlyBoundSlotIds,\n )\n .filter(slot => Number.isInteger(slot.primitiveIndex) && !!slot.boundingBox)\n .sort((left, right) => (left.primitiveIndex ?? 0) - (right.primitiveIndex ?? 0));\n if (primitiveSlots.length <= 1) return [];\n if (ownerMeshCount >= primitiveSlots.length) return [];\n\n const proxies: any[] = [];\n const createdNodeIds = new Set<string>();\n for (const slot of primitiveSlots) {\n const primitiveIndex = slot.primitiveIndex;\n if (primitiveIndex == null || primitiveIndex < 0) continue;\n const selectionNodeId = createAssetMeshProjectionNodeId(node.id, slot.key);\n if (createdNodeIds.has(selectionNodeId)) continue;\n const proxy = createProjectionPrimitiveBoundsSelectionProxy(options, node, mesh, slot, {\n selectionNodeId,\n ownerNodePath,\n slotSelectionKey: slot.key,\n primitiveIndex,\n });\n if (!proxy) continue;\n createdNodeIds.add(selectionNodeId);\n proxies.push(proxy);\n projection.selectionMeshes = projection.selectionMeshes ?? [];\n projection.selectionMeshes.push(proxy);\n registerProjectionSelectionPresentationTarget(projection, selectionNodeId, mesh);\n if (proxy.material) projection.runtimeObjects.push(proxy.material);\n }\n return proxies;\n}\n\nfunction registerProjectionSelectionPresentationTarget(\n projection: ProjectedBabylonEditorNode,\n selectionNodeId: string,\n renderMesh: any,\n): void {\n projection.selectionPresentationTargets = projection.selectionPresentationTargets ?? [];\n const existing = projection.selectionPresentationTargets.find(\n target => target.selectionNodeId === selectionNodeId,\n );\n if (existing) {\n if (!existing.renderMeshes.includes(renderMesh)) {\n existing.renderMeshes = [...existing.renderMeshes, renderMesh];\n }\n return;\n }\n projection.selectionPresentationTargets.push({\n selectionNodeId,\n renderMeshes: [renderMesh],\n });\n}\n\nfunction createProjectionPrimitiveBoundsSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n slot: ProjectionMaterialSlotDescriptor,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!MeshBuilder?.CreateBox || !StandardMaterial) return null;\n const bounds = readProjectionPrimitiveSlotBounds(slot);\n if (!bounds) return null;\n\n const size = {\n x: Math.max(Math.abs(bounds.max.x - bounds.min.x), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n y: Math.max(Math.abs(bounds.max.y - bounds.min.y), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n z: Math.max(Math.abs(bounds.max.z - bounds.min.z), MIN_SELECTION_BOUNDS_PROXY_SIZE),\n };\n const center = {\n x: (bounds.min.x + bounds.max.x) / 2,\n y: (bounds.min.y + bounds.max.y) / 2,\n z: (bounds.min.z + bounds.max.z) / 2,\n };\n const proxy = MeshBuilder.CreateBox(\n `${sourceMesh.name ?? node.id}.selectionBoundsProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`,\n {\n width: size.x,\n height: size.y,\n depth: size.z,\n },\n scene,\n );\n if (!proxy) return null;\n proxy.parent = sourceMesh;\n proxy.position.x = center.x;\n proxy.position.y = center.y;\n proxy.position.z = center.z;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjectionSelectionBoundsProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionPrimitiveSlotBounds(\n slot: ProjectionMaterialSlotDescriptor,\n): Pick<BabylonEditorProjectionBounds, 'min' | 'max'> | null {\n const min = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.min);\n const max = readProjectionMaterialSlotBoundsVec3(slot.boundingBox?.max);\n if (!min || !max) return null;\n return { min, max };\n}\n\nfunction readProjectionMaterialSlotBoundsVec3(value: readonly number[] | undefined): EditorTransformVec3 | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value.map(item => Number(item));\n if (!Number.isFinite(x) || !Number.isFinite(y) || !Number.isFinite(z)) return null;\n return { x, y, z };\n}\n\nfunction createProjectionSubMeshSelectionProxy(\n options: BabylonEditorProjectionOptions,\n node: BabylonEditorProjectionNode,\n sourceMesh: any,\n subMesh: any,\n metadata: {\n selectionNodeId: string;\n ownerNodePath: string;\n slotSelectionKey: string;\n primitiveIndex: number;\n },\n): any | null {\n const { babylon, scene } = options;\n const Mesh = (babylon as any).Mesh;\n const VertexData = (babylon as any).VertexData;\n const VertexBuffer = (babylon as any).VertexBuffer;\n const StandardMaterial = (babylon as any).StandardMaterial;\n if (!Mesh || !VertexData || !VertexBuffer || !StandardMaterial) return null;\n\n const positions = sourceMesh.getVerticesData?.(VertexBuffer.PositionKind, true, true);\n if (!positions || positions.length < 9) return null;\n const sourceIndices = sourceMesh.getIndices?.(true, true) ?? null;\n const subIndices = readProjectionSubMeshIndices(sourceIndices, subMesh);\n if (subIndices.length < 3) return null;\n\n const indexMap = new Map<number, number>();\n const proxyPositions: number[] = [];\n const proxyIndices: number[] = [];\n for (const sourceIndex of subIndices) {\n const vertexIndex = Number(sourceIndex);\n if (!Number.isInteger(vertexIndex) || vertexIndex < 0) continue;\n let mappedIndex = indexMap.get(vertexIndex);\n if (mappedIndex == null) {\n const positionIndex = vertexIndex * 3;\n if (positionIndex + 2 >= positions.length) continue;\n mappedIndex = indexMap.size;\n indexMap.set(vertexIndex, mappedIndex);\n proxyPositions.push(\n Number(positions[positionIndex] ?? 0),\n Number(positions[positionIndex + 1] ?? 0),\n Number(positions[positionIndex + 2] ?? 0),\n );\n }\n proxyIndices.push(mappedIndex);\n }\n if (proxyPositions.length < 9 || proxyIndices.length < 3) return null;\n\n const proxy = new Mesh(`${sourceMesh.name ?? node.id}.selectionProxy.${sanitizeProjectionImportSnapshotId(metadata.slotSelectionKey)}`, scene);\n proxy.parent = sourceMesh;\n proxy.isPickable = false;\n proxy.metadata = {\n ...(proxy.metadata ?? {}),\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n editorProjectionSelectionProxy: true,\n editorProjection: {\n nodeId: metadata.selectionNodeId,\n rootNodeId: node.id,\n sourceId: node.asset?.sourceId,\n ownerNodePath: metadata.ownerNodePath,\n slotSelectionKey: metadata.slotSelectionKey,\n primitiveIndex: metadata.primitiveIndex,\n runtimeKind: 'assetMeshSelectionProxy',\n ...createProjectionShadowMetadata(node),\n },\n };\n\n const vertexData = new VertexData();\n vertexData.positions = proxyPositions;\n vertexData.indices = proxyIndices;\n vertexData.applyToMesh(proxy, false);\n\n const material = new StandardMaterial(`${proxy.name}.material`, scene);\n material.alpha = 0;\n material.disableLighting = true;\n material.backFaceCulling = false;\n if ('disableColorWrite' in material) {\n material.disableColorWrite = true;\n }\n proxy.material = material;\n return proxy;\n}\n\nfunction readProjectionSubMeshIndices(sourceIndices: ArrayLike<number> | null, subMesh: any): number[] {\n const indexStart = Number.isInteger(subMesh?.indexStart) ? subMesh.indexStart as number : 0;\n const indexCount = Number.isInteger(subMesh?.indexCount) ? subMesh.indexCount as number : 0;\n if (sourceIndices && indexCount > 0) {\n return Array.from(sourceIndices).slice(indexStart, indexStart + indexCount);\n }\n const verticesStart = Number.isInteger(subMesh?.verticesStart) ? subMesh.verticesStart as number : 0;\n const verticesCount = Number.isInteger(subMesh?.verticesCount) ? subMesh.verticesCount as number : 0;\n return Array.from({ length: Math.max(0, verticesCount) }, (_, index) => verticesStart + index);\n}\n\nfunction readProjectionAssetMaterialSlots(\n asset: BabylonEditorProjectionAsset,\n projectionNodeId?: string,\n): ProjectionMaterialSlotDescriptor[] {\n const rawSlots = asset.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: ProjectionMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readProjectionAssetMaterialSlot(rawSlot, projectionNodeId);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nfunction readProjectionAssetMaterialSlot(value: unknown, projectionNodeId?: string): ProjectionMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n return createProjectionMaterialSlotDescriptor(record, projectionNodeId);\n}\n\nfunction countProjectionMeshMaterials(meshes: any[]): Map<unknown, number> {\n const counts = new Map<unknown, number>();\n for (const mesh of meshes) {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) continue;\n counts.set(material, (counts.get(material) ?? 0) + 1);\n }\n return counts;\n}\n\nfunction isProjectionSinglePrimitiveMaterialSlot(\n slot: ProjectionMaterialSlotDescriptor,\n materialSlots: readonly ProjectionMaterialSlotDescriptor[],\n): boolean {\n if (slot.primitiveIndex !== 0 || materialSlots.length === 0) return false;\n const matchingPrimitiveSlots = materialSlots.filter(candidate => (\n candidate.primitiveIndex != null\n && candidate.matchKey === slot.matchKey\n && isProjectionMaterialSlotSameMesh(candidate, slot)\n ));\n return matchingPrimitiveSlots.length === 1 && matchingPrimitiveSlots[0]?.primitiveIndex === 0;\n}\n\nfunction isProjectionMaterialSlotSameMesh(\n left: ProjectionMaterialSlotDescriptor,\n right: ProjectionMaterialSlotDescriptor,\n): boolean {\n if (left.meshIndex != null || right.meshIndex != null) {\n return left.meshIndex === right.meshIndex;\n }\n return true;\n}\n\nfunction detachProjectionSlotMaterial(\n mesh: any,\n materialCounts: Map<unknown, number>,\n ownerNodePath: string | null,\n): ProjectionMaterialDetachResult | null {\n const materialOwner = resolveProjectionWritableMaterialOwner(mesh);\n const material = materialOwner?.material;\n if (!material) return null;\n const projectionOwnsMaterialLifecycle = materialOwner === mesh;\n if (typeof material !== 'object') {\n return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n }\n const materialUseCount = materialCounts.get(material) ?? 0;\n if (materialUseCount <= 1) return { material, clonedMaterials: [], projectionOwnsMaterialLifecycle };\n const clone = typeof (material as any).clone === 'function'\n ? safelyCloneProjectionMaterial(\n material,\n createProjectionSlotMaterialName(material, ownerNodePath),\n )\n : null;\n if (!clone) return null;\n try {\n cloneProjectionSubMaterials(clone, material, ownerNodePath);\n } catch {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n if (Array.isArray((material as any).subMaterials) && !Array.isArray((clone as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clone);\n return null;\n }\n materialOwner.material = clone;\n materialCounts.set(material, materialUseCount - 1);\n materialCounts.set(clone, 1);\n return {\n material: clone,\n clonedMaterials: projectionOwnsMaterialLifecycle ? [clone] : [],\n projectionOwnsMaterialLifecycle,\n };\n}\n\nfunction resolveProjectionSlotMaterialTarget(\n mesh: any,\n materialCounts: Map<unknown, number>,\n slot: ProjectionMaterialSlotDescriptor,\n ownerNodePath: string | null,\n options: {\n projectionNodeId?: string;\n primitiveOwnerResolvedByPointer: boolean;\n primitiveSingleMaterialFallbackAllowed: boolean;\n },\n): ProjectionMaterialSlotTargetResolution {\n const material = readProjectionWritableMeshMaterial(mesh);\n if (!material) {\n return {\n target: null,\n targetMaterialStatus: 'missingMaterial',\n warningMessage: 'Slot material profile was not applied because the matched mesh has no target material.',\n };\n }\n if (slot.primitiveIndex == null) {\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Slot material profile was not applied because the mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'material',\n };\n }\n if (!Array.isArray((material as any).subMaterials)) {\n if (!options.primitiveOwnerResolvedByPointer\n && (slot.primitiveIndex !== 0 || !options.primitiveSingleMaterialFallbackAllowed)) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target mesh does not expose a matching subMaterial.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n if (!detachResult) {\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the fallback mesh material could not be detached.',\n };\n }\n return {\n target: {\n material: detachResult.material,\n clonedMaterials: detachResult.clonedMaterials,\n },\n targetMaterialStatus: 'primitiveFallbackMaterial',\n };\n }\n const sourceSubMaterials = (material as any).subMaterials;\n const sourceSubMaterial = sourceSubMaterials[slot.primitiveIndex];\n if (!sourceSubMaterial || typeof sourceSubMaterial !== 'object' || typeof sourceSubMaterial.clone !== 'function') {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial is missing or cannot be cloned.',\n };\n }\n const clonedSubMaterial = safelyCloneProjectionMaterial(\n sourceSubMaterial,\n createProjectionSlotSubMaterialName(sourceSubMaterial, ownerNodePath, slot.primitiveIndex),\n );\n if (!clonedSubMaterial) {\n return {\n target: null,\n targetMaterialStatus: 'missingSubMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the target subMaterial clone failed.',\n };\n }\n const detachResult = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);\n const slotMaterial = detachResult?.material;\n if (!detachResult || !Array.isArray((slotMaterial as any).subMaterials)) {\n safelyDisposeProjectionMaterial(clonedSubMaterial);\n return {\n target: null,\n targetMaterialStatus: 'missingTargetMaterial',\n warningMessage: 'Primitive slot material profile was not applied because the multi-material target could not be detached.',\n };\n }\n const subMaterials = (slotMaterial as any).subMaterials;\n const detachedSubMaterial = subMaterials[slot.primitiveIndex];\n subMaterials[slot.primitiveIndex] = clonedSubMaterial;\n if (detachedSubMaterial !== sourceSubMaterial && detachedSubMaterial !== clonedSubMaterial) {\n safelyDisposeProjectionMaterial(detachedSubMaterial);\n }\n return {\n target: {\n material: clonedSubMaterial,\n clonedMaterials: [\n ...detachResult.clonedMaterials,\n ...(detachResult.projectionOwnsMaterialLifecycle ? [clonedSubMaterial] : []),\n ],\n },\n targetMaterialStatus: 'subMaterial',\n };\n}\n\nfunction safelyCloneProjectionMaterial(material: any, name: string): any | null {\n try {\n return material?.clone?.(name) ?? null;\n } catch {\n return null;\n }\n}\n\nfunction safelyDisposeProjectionMaterial(material: any): void {\n try {\n material?.dispose?.();\n } catch {\n // Best-effort cleanup for a clone that was never committed to the scene owner.\n }\n}\n\nfunction readProjectionWritableMeshMaterial(mesh: any): unknown | null {\n return resolveProjectionWritableMaterialOwner(mesh)?.material ?? null;\n}\n\nfunction resolveProjectionWritableMaterialOwner(mesh: any): any | null {\n return resolveBabylonEffectiveMaterialOwner(mesh);\n}\n\nfunction cloneProjectionSubMaterials(clone: any, source: any, ownerNodePath: string | null): void {\n if (!Array.isArray(clone?.subMaterials) || !Array.isArray(source?.subMaterials)) return;\n clone.subMaterials = source.subMaterials.map((subMaterial: any, index: number) => {\n if (!subMaterial || typeof subMaterial !== 'object') return subMaterial;\n if (typeof subMaterial.clone !== 'function') return subMaterial;\n const clonedSubMaterial = subMaterial.clone(createProjectionSlotSubMaterialName(subMaterial, ownerNodePath, index));\n return clonedSubMaterial ?? subMaterial;\n });\n}\n\nfunction createProjectionSlotMaterialName(material: any, ownerNodePath: string | null): string {\n const baseName = String(material?.name ?? material?.id ?? 'material');\n const suffix = ownerNodePath?.trim()\n ? ownerNodePath.replace(/[^a-zA-Z0-9_-]+/g, '_')\n : 'root';\n return `${baseName}.projectionSlot.${suffix}`;\n}\n\nfunction createProjectionSlotSubMaterialName(material: any, ownerNodePath: string | null, index: number): string {\n return `${createProjectionSlotMaterialName(material, ownerNodePath)}.sub${index}`;\n}\n\nfunction createFallbackProjectionMesh(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n rendererFallback: boolean,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return null;\n const mesh = MeshBuilder.CreateBox(`${node.id}.fallbackProjection`, {\n size: rendererFallback ? 1 : 0.24,\n }, scene);\n const material = new StandardMaterial(`${node.id}.projection.material`, scene);\n if (rendererFallback) {\n material.diffuseColor = new Color3(0.22, 0.55, 0.28);\n } else {\n material.diffuseColor = new Color3(0.5, 0.58, 0.68);\n material.alpha = 0.45;\n }\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n mesh.material = material;\n applyProjectionRenderingToMesh(node, mesh);\n mesh.metadata = {\n ...(mesh.metadata ?? {}),\n editorProjection: {\n nodeId: node.id,\n fallback: true,\n ...createProjectionShadowMetadata(node),\n },\n };\n return mesh;\n}\n\nfunction applyProjectionRenderingToMesh(node: BabylonEditorProjectionNode, mesh: any): void {\n const rendering = node.rendering;\n if (!mesh || !rendering) return;\n if (isProjectionRenderingGroupId(rendering.renderingGroupId)) {\n mesh.renderingGroupId = rendering.renderingGroupId;\n }\n if (typeof rendering.alphaIndex === 'number' && Number.isFinite(rendering.alphaIndex)) {\n mesh.alphaIndex = rendering.alphaIndex;\n }\n}\n\nfunction isProjectionRenderingGroupId(value: unknown): value is 0 | 1 | 2 | 3 {\n return value === 0 || value === 1 || value === 2 || value === 3;\n}\n\nfunction createCameraFrustumLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n settings: BabylonEditorProjectionCameraSettings,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const distance = Math.max(0.4, settings.radius * 0.12);\n const aspect = 16 / 9;\n const nearDistance = 0.18;\n let lines: any[];\n\n if (settings.projection === 'perspective') {\n const halfHeight = Math.max(0.12, Math.tan((settings.fov ?? 0.85) / 2) * distance);\n const halfWidth = halfHeight * aspect;\n const origin = new Vector3(0, 0, nearDistance);\n const topLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const topRight = new Vector3(halfWidth, halfHeight, -distance);\n const bottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const bottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [topLeft, topRight, bottomRight, bottomLeft, topLeft],\n [origin, topLeft],\n [origin, topRight],\n [origin, bottomRight],\n [origin, bottomLeft],\n ];\n } else {\n const halfHeight = Math.max(0.12, settings.orthoSize * 0.08);\n const halfWidth = halfHeight * aspect;\n const nearTopLeft = new Vector3(-halfWidth, halfHeight, nearDistance);\n const nearTopRight = new Vector3(halfWidth, halfHeight, nearDistance);\n const nearBottomRight = new Vector3(halfWidth, -halfHeight, nearDistance);\n const nearBottomLeft = new Vector3(-halfWidth, -halfHeight, nearDistance);\n const farTopLeft = new Vector3(-halfWidth, halfHeight, -distance);\n const farTopRight = new Vector3(halfWidth, halfHeight, -distance);\n const farBottomRight = new Vector3(halfWidth, -halfHeight, -distance);\n const farBottomLeft = new Vector3(-halfWidth, -halfHeight, -distance);\n lines = [\n [nearTopLeft, nearTopRight, nearBottomRight, nearBottomLeft, nearTopLeft],\n [farTopLeft, farTopRight, farBottomRight, farBottomLeft, farTopLeft],\n [nearTopLeft, farTopLeft],\n [nearTopRight, farTopRight],\n [nearBottomRight, farBottomRight],\n [nearBottomLeft, farBottomLeft],\n ];\n }\n\n const frustum = MeshBuilder.CreateLineSystem(`${node.id}.cameraFrustum`, {\n lines,\n }, scene);\n frustum.color = new Color3(0.45, 0.68, 1);\n frustum.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'camera',\n helper: 'frustum',\n projection: settings.projection,\n orthoSize: settings.orthoSize,\n fov: settings.fov,\n });\n return frustum;\n}\n\nfunction createLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n direction: BabylonEditorProjectionVec3,\n): any | null {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder?.CreateLineSystem) return null;\n const normalized = normalizeProjectionVec3(direction, { x: -0.3, y: -1, z: -0.2 });\n const shaftEnd = new Vector3(normalized.x, normalized.y, normalized.z);\n const arrowLeft = new Vector3(\n shaftEnd.x - normalized.x * 0.22 + normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 - normalized.x * 0.12,\n );\n const arrowRight = new Vector3(\n shaftEnd.x - normalized.x * 0.22 - normalized.z * 0.12,\n shaftEnd.y - normalized.y * 0.22,\n shaftEnd.z - normalized.z * 0.22 + normalized.x * 0.12,\n );\n const arrow = MeshBuilder.CreateLineSystem(`${node.id}.lightDirection`, {\n lines: [\n [new Vector3(0, 0, 0), shaftEnd],\n [shaftEnd, arrowLeft],\n [shaftEnd, arrowRight],\n ],\n }, scene);\n arrow.color = new Color3(1, 0.92, 0.42);\n arrow.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n helper: 'direction',\n });\n return arrow;\n}\n\nfunction attachHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): void {\n const MeshBuilder = (babylon as any).MeshBuilder;\n const StandardMaterial = (babylon as any).StandardMaterial;\n const HemisphericLight = (babylon as any).HemisphericLight;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n if (!MeshBuilder || !StandardMaterial) return;\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n\n if (HemisphericLight) {\n const light = new HemisphericLight(`${node.id}.hemisphericLight`, new Vector3(0, 1, 0), scene);\n light.intensity = settings.intensity;\n light.diffuse = new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n );\n light.groundColor = new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n );\n light.metadata = createProjectionMetadata(node.id, { runtimeKind: 'light', lightType: 'hemispheric' });\n light.setEnabled?.(node.active !== false);\n projection.runtimeObjects.push(light);\n resyncProjectionSceneLightSources(scene);\n }\n\n if (!settings.helperVisible) return;\n\n const helper = MeshBuilder.CreateSphere?.(`${node.id}.hemisphericLightHelper`, {\n diameter: 0.32,\n segments: 18,\n }, scene) ?? MeshBuilder.CreateBox?.(`${node.id}.hemisphericLightHelper`, {\n size: 0.28,\n }, scene);\n if (!helper) return;\n helper.parent = projection.root;\n helper.metadata = createProjectionMetadata(node.id, {\n runtimeKind: 'light',\n lightType: 'hemispheric',\n helper: 'body',\n });\n const material = new StandardMaterial(`${node.id}.hemisphericLightHelper.material`, scene);\n material.diffuseColor = new Color3(0.72, 0.82, 1);\n material.emissiveColor = new Color3(0.16, 0.28, 0.48);\n material.specularColor = new Color3(0.08, 0.1, 0.12);\n helper.material = material;\n projection.runtimeObjects.push(material);\n projection.outlineMeshes = [helper];\n}\n\nfunction syncRuntimeLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n if (node.light?.type === 'hemispheric') {\n return syncRuntimeHemisphericLightProjection(babylon, scene, node, projection);\n }\n return syncRuntimeDirectionalLightProjection(babylon, scene, node, projection);\n}\n\nfunction syncRuntimeDirectionalLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionDirectionalLightSettings(\n node.light?.type === 'directional' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'directional');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.lightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n copyOrAssignBabylonVec3(light, 'direction', new Vector3(\n settings.direction.x,\n settings.direction.y,\n settings.direction.z,\n ));\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n if (settings.helperVisible) refreshLightDirectionLines(babylon, scene, node, projection, settings.direction);\n return true;\n}\n\nfunction syncRuntimeHemisphericLightProjection(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n): boolean {\n const settings = readProjectionHemisphericLightSettings(\n node.light?.type === 'hemispheric' ? node.light : undefined,\n );\n const light = findProjectionRuntimeLight(projection, node.id, 'hemispheric');\n if (!light) return false;\n const hasHelper = !!(scene as any).getMeshByName?.(`${node.id}.hemisphericLightHelper`);\n if (settings.helperVisible !== hasHelper) return false;\n\n const Color3 = requireBabylonCtor(babylon.Color3, 'Color3');\n light.intensity = settings.intensity;\n copyOrAssignBabylonColor(light, 'diffuse', new Color3(\n settings.diffuseColor?.r ?? 1,\n settings.diffuseColor?.g ?? 1,\n settings.diffuseColor?.b ?? 1,\n ));\n copyOrAssignBabylonColor(light, 'groundColor', new Color3(\n settings.groundColor?.r ?? 0.48,\n settings.groundColor?.g ?? 0.52,\n settings.groundColor?.b ?? 0.62,\n ));\n light.setEnabled?.(node.active !== false);\n resyncProjectionSceneLightSources(scene);\n return true;\n}\n\nfunction findProjectionRuntimeLight(\n projection: ProjectedBabylonEditorNode,\n nodeId: string,\n lightType: 'directional' | 'hemispheric',\n): any | null {\n return projection.runtimeObjects.find(runtimeObject => {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.nodeId === nodeId\n && metadata?.runtimeKind === 'light'\n && metadata?.lightType === lightType;\n }) ?? null;\n}\n\nfunction isProjectionRuntimeLightObject(runtimeObject: any): boolean {\n const metadata = runtimeObject?.metadata?.editorProjection;\n return metadata?.runtimeKind === 'light'\n && (metadata?.lightType === 'directional' || metadata?.lightType === 'hemispheric');\n}\n\nfunction resyncProjectionSceneLightSources(scene: RuntimeScene): void {\n const meshes = Array.isArray((scene as any).meshes) ? (scene as any).meshes : [];\n resyncProjectionMeshLightSources(scene, meshes);\n}\n\ninterface ProjectionMeshLightSourceSyncSummary {\n importedMeshCount: number;\n instancedMeshCount: number;\n lightSourceOwnerCount: number;\n activeSceneLightCount: number;\n resolvedLightSourceOwnerCount: number;\n}\n\nfunction resyncProjectionMeshLightSources(\n scene: RuntimeScene,\n meshes: readonly any[],\n): ProjectionMeshLightSourceSyncSummary {\n const lightSourceOwners = new Set<any>();\n const sourceMeshes = new Set<any>();\n const instancedMeshes = new Set<any>();\n for (const mesh of meshes) {\n if (!mesh || typeof mesh !== 'object') continue;\n const sourceMesh = mesh.sourceMesh;\n if (sourceMesh && sourceMesh !== mesh) {\n sourceMeshes.add(sourceMesh);\n instancedMeshes.add(mesh);\n } else {\n lightSourceOwners.add(mesh);\n }\n }\n for (const sourceMesh of sourceMeshes) {\n if (sourceMesh?.isDisposed?.()) continue;\n lightSourceOwners.add(sourceMesh);\n }\n for (const lightSourceOwner of lightSourceOwners) {\n if (lightSourceOwner?.isDisposed?.()) continue;\n lightSourceOwner?._resyncLightSources?.();\n }\n for (const instancedMesh of instancedMeshes) {\n if (instancedMesh?.isDisposed?.()) continue;\n instancedMesh?._markSubMeshesAsLightDirty?.();\n }\n (scene as any).resetCachedMaterial?.();\n\n const activeSceneLights = (Array.isArray((scene as any).lights) ? (scene as any).lights : [])\n .filter((light: any) => light?.isEnabled?.() !== false);\n const resolvedLightSourceOwnerCount = [...lightSourceOwners].filter(owner => {\n if (owner?.isDisposed?.()) return false;\n const lightSources = owner?.lightSources ?? owner?._lightSources;\n return Array.isArray(lightSources) && lightSources.length > 0;\n }).length;\n return {\n importedMeshCount: meshes.length,\n instancedMeshCount: instancedMeshes.size,\n lightSourceOwnerCount: lightSourceOwners.size,\n activeSceneLightCount: activeSceneLights.length,\n resolvedLightSourceOwnerCount,\n };\n}\n\nfunction refreshLightDirectionLines(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n node: BabylonEditorProjectionNode,\n projection: ProjectedBabylonEditorNode,\n direction: BabylonEditorProjectionVec3,\n): void {\n const existing = (scene as any).getMeshByName?.(`${node.id}.lightDirection`);\n existing?.dispose?.();\n const arrow = createLightDirectionLines(babylon, scene, node, direction);\n if (!arrow) return;\n arrow.parent = projection.root;\n arrow.isPickable = false;\n}\n\nfunction copyOrAssignBabylonVec3(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nfunction copyOrAssignBabylonColor(target: any, key: string, value: any): void {\n if (target?.[key]?.copyFrom) {\n target[key].copyFrom(value);\n return;\n }\n target[key] = value;\n}\n\nexport function normalizeBabylonEditorProjectionCameraSettings(\n settings: BabylonEditorProjectionCameraSettings | undefined,\n): BabylonEditorProjectionCameraSettings {\n const targetOffset = readOptionalProjectionVec3(settings?.targetOffset);\n const targetScreenOffset = readOptionalProjectionVec2(settings?.targetScreenOffset);\n return {\n projection: readProjectionCameraMode(settings?.projection),\n alpha: readFiniteNumber(settings?.alpha, 3.9269908169872414),\n beta: readFiniteNumber(settings?.beta, 0.8),\n radius: Math.max(0.001, readFiniteNumber(settings?.radius, 14)),\n orthoSize: Math.max(0.001, readFiniteNumber(settings?.orthoSize, 6)),\n fov: Math.max(0.001, readFiniteNumber(settings?.fov, 0.85)),\n ...(targetOffset ? { targetOffset } : {}),\n minZ: Math.max(0.001, readFiniteNumber(settings?.minZ, 1)),\n maxZ: Math.max(0.001, readFiniteNumber(settings?.maxZ, 10000)),\n lowerBetaLimit: readFiniteNumber(settings?.lowerBetaLimit, settings?.beta ?? 0.8),\n upperBetaLimit: readFiniteNumber(settings?.upperBetaLimit, settings?.beta ?? 0.8),\n lowerRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.lowerRadiusLimit, settings?.radius ?? 14)),\n upperRadiusLimit: Math.max(0.001, readFiniteNumber(settings?.upperRadiusLimit, settings?.radius ?? 14)),\n inertia: clampUnit(readFiniteNumber(settings?.inertia, 0.9)),\n ...(targetScreenOffset ? { targetScreenOffset } : {}),\n };\n}\n\nexport function applyBabylonEditorProjectionCameraRig(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n camera: RuntimeCamera,\n settings: BabylonEditorProjectionCameraSettings | undefined,\n options: BabylonEditorProjectionCameraRigApplyOptions = {},\n): BabylonEditorProjectionCameraSettings {\n const normalized = normalizeBabylonEditorProjectionCameraSettings(settings);\n const Vector3 = babylon.Vector3;\n const Vector2 = (babylon as any).Vector2;\n const targetInput = options.target ?? normalized.targetOffset ?? null;\n const target = targetInput && Vector3\n ? new Vector3(targetInput.x, targetInput.y, targetInput.z)\n : null;\n\n camera.minZ = normalized.minZ ?? 1;\n camera.maxZ = Math.max(camera.minZ + 0.001, normalized.maxZ ?? 10000);\n camera.inertia = normalized.inertia ?? camera.inertia;\n if (normalized.targetScreenOffset) {\n camera.targetScreenOffset = Vector2\n ? new Vector2(normalized.targetScreenOffset.x, normalized.targetScreenOffset.y)\n : { ...normalized.targetScreenOffset };\n }\n\n if (typeof camera.alpha === 'number') {\n clearBabylonArcRotateCameraOrbitLimits(camera);\n if (target) camera.target = target;\n camera.alpha = normalized.alpha;\n camera.beta = normalized.beta;\n camera.radius = normalized.radius;\n if (options.lockOrbit !== false) {\n camera.lowerAlphaLimit = normalized.alpha;\n camera.upperAlphaLimit = normalized.alpha;\n camera.lowerBetaLimit = normalized.lowerBetaLimit ?? normalized.beta;\n camera.upperBetaLimit = normalized.upperBetaLimit ?? normalized.beta;\n camera.lowerRadiusLimit = normalized.lowerRadiusLimit ?? normalized.radius;\n camera.upperRadiusLimit = normalized.upperRadiusLimit ?? normalized.radius;\n }\n } else if (target) {\n camera.setTarget?.(target);\n }\n\n if (normalized.projection === 'perspective') {\n camera.mode = babylon.Camera?.PERSPECTIVE_CAMERA ?? camera.mode ?? 0;\n camera.fov = normalized.fov ?? 0.85;\n return normalized;\n }\n\n camera.mode = babylon.Camera?.ORTHOGRAPHIC_CAMERA ?? camera.mode ?? 1;\n const aspect = readProjectionSceneAspect(scene);\n const halfHeight = normalized.orthoSize;\n const halfWidth = halfHeight * aspect;\n camera.orthoLeft = -halfWidth;\n camera.orthoRight = halfWidth;\n camera.orthoTop = halfHeight;\n camera.orthoBottom = -halfHeight;\n return normalized;\n}\n\nfunction clearBabylonArcRotateCameraOrbitLimits(camera: RuntimeCamera): void {\n camera.lowerAlphaLimit = null;\n camera.upperAlphaLimit = null;\n camera.lowerBetaLimit = null;\n camera.upperBetaLimit = null;\n camera.lowerRadiusLimit = null;\n camera.upperRadiusLimit = null;\n}\n\nfunction readProjectionCameraMode(value: unknown): BabylonEditorProjectionCameraMode {\n return value === 'perspective' ? 'perspective' : 'orthographic';\n}\n\nfunction readProjectionSceneAspect(scene: RuntimeScene): number {\n const engine = scene.getEngine?.();\n const width = Number(engine?.getRenderWidth?.() ?? engine?.getRenderingCanvas?.()?.width ?? 1);\n const height = Number(engine?.getRenderHeight?.() ?? engine?.getRenderingCanvas?.()?.height ?? 1);\n if (!Number.isFinite(width) || !Number.isFinite(height) || height <= 0) return 16 / 9;\n return Math.max(0.01, width / height);\n}\n\nfunction readOptionalProjectionVec2(value: unknown): BabylonEditorProjectionVec2 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec2>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n };\n}\n\nfunction readOptionalProjectionVec3(value: unknown): BabylonEditorProjectionVec3 | null {\n if (!value || typeof value !== 'object') return null;\n const candidate = value as Partial<BabylonEditorProjectionVec3>;\n if (!Number.isFinite(candidate.x) || !Number.isFinite(candidate.y) || !Number.isFinite(candidate.z)) return null;\n return {\n x: Number(candidate.x),\n y: Number(candidate.y),\n z: Number(candidate.z),\n };\n}\n\nfunction clampUnit(value: number): number {\n if (!Number.isFinite(value)) return 0;\n return Math.min(1, Math.max(0, value));\n}\n\nfunction readProjectionDirectionalLightSettings(\n settings: BabylonEditorProjectionDirectionalLightSettings | undefined,\n): BabylonEditorProjectionDirectionalLightSettings {\n return {\n type: 'directional',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 2)),\n direction: readVector3(settings?.direction, { x: -0.3, y: -1, z: -0.2 }),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionHemisphericLightSettings(\n settings: BabylonEditorProjectionHemisphericLightSettings | undefined,\n): BabylonEditorProjectionHemisphericLightSettings {\n return {\n type: 'hemispheric',\n intensity: Math.max(0, readFiniteNumber(settings?.intensity, 0.8)),\n diffuseColor: readProjectionColor(settings?.diffuseColor, { r: 1, g: 1, b: 1 }),\n groundColor: readProjectionColor(settings?.groundColor, { r: 0.48, g: 0.52, b: 0.62 }),\n helperVisible: settings?.helperVisible !== false,\n };\n}\n\nfunction readProjectionColor(\n value: BabylonEditorProjectionColorRGB | undefined,\n fallback: BabylonEditorProjectionColorRGB,\n): BabylonEditorProjectionColorRGB {\n return {\n r: readFiniteNumber(value?.r, fallback.r),\n g: readFiniteNumber(value?.g, fallback.g),\n b: readFiniteNumber(value?.b, fallback.b),\n };\n}\n\nfunction readFiniteNumber(value: unknown, fallback: number): number {\n return typeof value === 'number' && Number.isFinite(value) ? value : fallback;\n}\n\nfunction normalizeProjectionVec3(\n value: BabylonEditorProjectionVec3,\n fallback: BabylonEditorProjectionVec3,\n): BabylonEditorProjectionVec3 {\n const length = Math.hypot(value.x, value.y, value.z);\n if (!Number.isFinite(length) || length <= 0.000001) return normalizeProjectionVec3(fallback, { x: 0, y: -1, z: 0 });\n return {\n x: value.x / length,\n y: value.y / length,\n z: value.z / length,\n };\n}\n\nfunction createProjectionMetadata(\n nodeId: string,\n extra: Record<string, unknown> = {},\n): Record<string, unknown> {\n const disableGeneratedShadow = extra.runtimeKind === 'camera'\n || extra.runtimeKind === 'light'\n || extra.helper != null;\n return {\n ...(disableGeneratedShadow ? {\n disablePlanarShadow: true,\n disableBlobShadow: true,\n disableStaticProjectedShadow: true,\n } : {}),\n editorProjection: {\n nodeId,\n ...extra,\n },\n };\n}\n\nfunction createProjectionShadowMetadata(node: BabylonEditorProjectionNode): Record<string, unknown> {\n return {\n ...(node.shadow ? { shadow: structuredClone(node.shadow) } : {}),\n ...(node.shadowPlan ? { shadowPlan: structuredClone(node.shadowPlan) } : {}),\n };\n}\n\nfunction syncProjectionNodeMetadata(\n projection: ProjectedBabylonEditorNode,\n node: BabylonEditorProjectionNode,\n): void {\n walkProjectionRuntimeNodes(projection.root, (runtimeNode) => {\n syncProjectionRuntimeNodeMetadata(runtimeNode, node);\n });\n}\n\nfunction walkProjectionRuntimeNodes(node: any, visit: (node: any) => void): void {\n if (!node) return;\n visit(node);\n const children = typeof node.getChildren === 'function' ? node.getChildren() : [];\n if (!Array.isArray(children)) return;\n for (const child of children) {\n walkProjectionRuntimeNodes(child, visit);\n }\n}\n\nfunction syncProjectionRuntimeNodeMetadata(\n runtimeNode: any,\n node: BabylonEditorProjectionNode,\n): void {\n const metadata = readProjectionObject(runtimeNode.metadata);\n const editorProjection = readProjectionObject(metadata?.editorProjection);\n if (!editorProjection) return;\n if (editorProjection.nodeId !== node.id && editorProjection.rootNodeId !== node.id) return;\n const nextEditorProjection = { ...editorProjection };\n if (node.shadow) nextEditorProjection.shadow = structuredClone(node.shadow);\n else delete nextEditorProjection.shadow;\n if (node.shadowPlan) nextEditorProjection.shadowPlan = structuredClone(node.shadowPlan);\n else delete nextEditorProjection.shadowPlan;\n runtimeNode.metadata = {\n ...(metadata ?? {}),\n editorProjection: nextEditorProjection,\n };\n}\n\nfunction readProjectionObject(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value)\n ? value as Record<string, unknown>\n : null;\n}\n\nexport function applyProjectionTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionTransform,\n): void {\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n if (isEditorTransformMatrixSnapshot(transform)) {\n const Matrix = requireBabylonCtor(babylon.Matrix, 'Matrix');\n if (typeof Matrix.FromArray !== 'function' || typeof node?.setPreTransformMatrix !== 'function') {\n throw new Error('Babylon runtime missing matrix transform support.');\n }\n node.position = new Vector3(0, 0, 0);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(0, 0, 0);\n node.scaling = new Vector3(1, 1, 1);\n node.setPreTransformMatrix(Matrix.FromArray(transform.matrix));\n writeProjectionLocalMatrixTransform(node, transform.matrix);\n return;\n }\n clearProjectionLocalMatrixTransform(babylon, node);\n node.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);\n node.rotationQuaternion = null;\n node.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);\n const scale = transform.scale ?? { x: 1, y: 1, z: 1 };\n node.scaling = new Vector3(scale.x, scale.y, scale.z);\n}\n\nfunction applyProjectionWorldTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: EditorTransformSnapshot,\n): boolean {\n const parent = node?.parent ?? null;\n const local = parent\n ? toEditorLocalTransformFromWorld(readProjectionWorldTransform(parent), transform, { allowMatrixFallback: true })\n : transform;\n if (!local) return false;\n applyProjectionTransform(babylon, node, local);\n return true;\n}\n\nfunction cloneProjectionTransformSnapshot(transform: EditorTransformSnapshot): EditorTransformSnapshot {\n return isEditorTransformMatrixSnapshot(transform)\n ? { mode: 'matrix', matrix: cloneEditorTransformMatrix(transform.matrix) }\n : {\n position: { ...transform.position },\n rotation: { ...transform.rotation },\n scale: { ...transform.scale },\n };\n}\n\nfunction writeProjectionLocalMatrixTransform(node: any, matrix: EditorTransformMatrix): void {\n node.metadata = {\n ...(readProjectionObject(node?.metadata) ?? {}),\n [PROJECTION_LOCAL_MATRIX_METADATA_KEY]: cloneEditorTransformMatrix(matrix),\n };\n}\n\nfunction clearProjectionLocalMatrixTransform(babylon: BabylonRuntimeGlobal, node: any): void {\n if (typeof node?.setPreTransformMatrix === 'function') {\n const Matrix = babylon.Matrix;\n if (typeof Matrix?.FromArray === 'function') {\n node.setPreTransformMatrix(Matrix.FromArray(createIdentityEditorTransformMatrix()));\n }\n }\n const metadata = readProjectionObject(node?.metadata);\n if (!metadata || !(PROJECTION_LOCAL_MATRIX_METADATA_KEY in metadata)) return;\n const nextMetadata = { ...metadata };\n delete nextMetadata[PROJECTION_LOCAL_MATRIX_METADATA_KEY];\n node.metadata = nextMetadata;\n}\n\nfunction applyAssetDefaultsTransform(\n babylon: BabylonRuntimeGlobal,\n node: any,\n transform: BabylonEditorProjectionAssetTransform | undefined,\n): void {\n if (!transform) return;\n const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');\n node.position = new Vector3(\n transform.position?.x ?? 0,\n transform.position?.y ?? 0,\n transform.position?.z ?? 0,\n );\n if (transform.rotationDeg) {\n node.rotation = new Vector3(\n (transform.rotationDeg.x * Math.PI) / 180,\n (transform.rotationDeg.y * Math.PI) / 180,\n (transform.rotationDeg.z * Math.PI) / 180,\n );\n } else {\n node.rotation = new Vector3(\n transform.rotation?.x ?? 0,\n transform.rotation?.y ?? 0,\n transform.rotation?.z ?? 0,\n );\n }\n if (typeof transform.scale === 'number') {\n node.scaling = new Vector3(transform.scale, transform.scale, transform.scale);\n } else {\n node.scaling = new Vector3(\n transform.scale?.x ?? 1,\n transform.scale?.y ?? 1,\n transform.scale?.z ?? 1,\n );\n }\n}\n\nfunction getProjectionNodeIdsInScreenRect(\n babylon: BabylonRuntimeGlobal,\n scene: RuntimeScene,\n projections: Map<string, ProjectedBabylonEditorNode>,\n rect: BabylonEditorProjectionScreenRect,\n): string[] {\n const canvas = scene.getEngine?.().getRenderingCanvas?.() as HTMLCanvasElement | null | undefined;\n const camera = scene.activeCamera ?? (scene as any).cameraToUseForPointers ?? null;\n const Vector3 = babylon.Vector3 as any;\n const Matrix = (babylon as any).Matrix;\n if (!canvas || !camera || !Vector3?.Project || !Matrix?.Identity) return [];\n const canvasRect = canvas.getBoundingClientRect();\n const viewport = camera.viewport?.toGlobal?.(\n scene.getEngine?.().getRenderWidth?.() ?? canvas.width,\n scene.getEngine?.().getRenderHeight?.() ?? canvas.height,\n );\n const transformMatrix = scene.getTransformMatrix?.();\n const worldMatrix = Matrix.Identity();\n if (!viewport || !transformMatrix || !worldMatrix) return [];\n const selectedIds: string[] = [];\n for (const [nodeId, projection] of projections) {\n const bounds = projection.root?.getHierarchyBoundingVectors?.();\n if (!bounds?.min || !bounds?.max) continue;\n const corners = createBoundsCorners(Vector3, bounds.min, bounds.max);\n const projected = corners\n .map((corner: any) => Vector3.Project(corner, worldMatrix, transformMatrix, viewport))\n .map((point: any) => ({\n x: canvasRect.left + point.x,\n y: canvasRect.top + point.y,\n }));\n if (projected.length === 0) continue;\n const minX = Math.min(...projected.map(point => point.x));\n const maxX = Math.max(...projected.map(point => point.x));\n const minY = Math.min(...projected.map(point => point.y));\n const maxY = Math.max(...projected.map(point => point.y));\n if (rectsIntersect(rect, { left: minX, top: minY, right: maxX, bottom: maxY })) {\n selectedIds.push(nodeId);\n }\n }\n return selectedIds;\n}\n\nfunction createBoundsCorners(Vector3: any, min: any, max: any): any[] {\n return [\n new Vector3(min.x, min.y, min.z),\n new Vector3(min.x, min.y, max.z),\n new Vector3(min.x, max.y, min.z),\n new Vector3(min.x, max.y, max.z),\n new Vector3(max.x, min.y, min.z),\n new Vector3(max.x, min.y, max.z),\n new Vector3(max.x, max.y, min.z),\n new Vector3(max.x, max.y, max.z),\n ];\n}\n\nfunction rectsIntersect(\n left: BabylonEditorProjectionScreenRect,\n right: BabylonEditorProjectionScreenRect,\n): boolean {\n return left.left <= right.right\n && left.right >= right.left\n && left.top <= right.bottom\n && left.bottom >= right.top;\n}\n"]}
|