@fps-games/editor 0.2.1-beta.3 → 0.2.1-beta.4
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/build-info.json +44 -44
- package/dist/editor-commands/capabilities/assets.d.ts +8 -0
- package/dist/editor-commands/capabilities/assets.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/assets.js +41 -41
- package/dist/editor-commands/capabilities/assets.js.map +1 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts +5 -0
- package/dist/editor-commands/capabilities/editor-state.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/editor-state.js +22 -22
- package/dist/editor-commands/capabilities/editor-state.js.map +1 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts +4 -0
- package/dist/editor-commands/capabilities/hierarchy.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/hierarchy.js +5 -5
- package/dist/editor-commands/capabilities/hierarchy.js.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts +11 -0
- package/dist/editor-commands/capabilities/host-lifecycle.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js +149 -0
- package/dist/editor-commands/capabilities/host-lifecycle.js.map +1 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts +5 -0
- package/dist/editor-commands/capabilities/prefabs.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/prefabs.js +93 -93
- package/dist/editor-commands/capabilities/prefabs.js.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts +8 -0
- package/dist/editor-commands/capabilities/scene-objects.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/scene-objects.js +480 -0
- package/dist/editor-commands/capabilities/scene-objects.js.map +1 -0
- package/dist/editor-commands/capabilities/selection.d.ts +5 -0
- package/dist/editor-commands/capabilities/selection.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/selection.js +60 -0
- package/dist/editor-commands/capabilities/selection.js.map +1 -0
- package/dist/editor-commands/capabilities/shadows.d.ts +5 -0
- package/dist/editor-commands/capabilities/shadows.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/shadows.js +74 -74
- package/dist/editor-commands/capabilities/shadows.js.map +1 -0
- package/dist/editor-commands/capabilities/transform.d.ts +5 -0
- package/dist/editor-commands/capabilities/transform.d.ts.map +1 -0
- package/dist/editor-commands/capabilities/transform.js +164 -0
- package/dist/editor-commands/capabilities/transform.js.map +1 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts +4 -0
- package/dist/editor-commands/capabilities/ui-regions.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/ui-regions.js +55 -57
- package/dist/editor-commands/capabilities/ui-regions.js.map +1 -0
- package/dist/editor-commands/capabilities/viewport.d.ts +5 -0
- package/dist/editor-commands/capabilities/viewport.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/capabilities/viewport.js +100 -100
- package/dist/editor-commands/capabilities/viewport.js.map +1 -0
- package/dist/editor-commands/command-sources.d.ts +7 -0
- package/dist/editor-commands/command-sources.d.ts.map +1 -0
- package/dist/editor-commands/command-sources.js +34 -0
- package/dist/editor-commands/command-sources.js.map +1 -0
- package/dist/editor-commands/diagnostics.d.ts +12 -0
- package/dist/editor-commands/diagnostics.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/diagnostics.js +4 -4
- package/dist/editor-commands/diagnostics.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.d.ts +1 -1
- package/dist/editor-commands/index.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/index.js +1 -1
- package/dist/editor-commands/index.js.map +1 -0
- package/dist/editor-commands/register.d.ts +4 -0
- package/dist/editor-commands/register.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/register.js +323 -286
- package/dist/editor-commands/register.js.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.d.ts +80 -80
- package/dist/editor-commands/shared.d.ts.map +1 -0
- package/dist/{agent-bridge → editor-commands}/shared.js +29 -29
- package/dist/editor-commands/shared.js.map +1 -0
- package/dist/editor-commands/source-types.d.ts +110 -0
- package/dist/editor-commands/source-types.d.ts.map +1 -0
- package/dist/editor-commands/source-types.js.map +1 -0
- package/dist/editor-plugin-commands.d.ts +4 -0
- package/dist/editor-plugin-commands.d.ts.map +1 -0
- package/dist/editor-plugin-commands.js +18 -0
- package/dist/editor-plugin-commands.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/local-editor-commands.d.ts +2 -0
- package/dist/local-editor-commands.d.ts.map +1 -0
- package/dist/local-editor-commands.js +2 -0
- package/dist/local-editor-commands.js.map +1 -0
- package/dist/local-editor-harness.d.ts +35 -21
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +1721 -367
- package/dist/local-editor-harness.js.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts +2 -1
- package/dist/local-editor-prefab-stage-transaction.d.ts.map +1 -1
- package/dist/local-editor-prefab-stage-transaction.js +6 -5
- package/dist/local-editor-prefab-stage-transaction.js.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.d.ts.map +1 -1
- package/dist/local-editor-scene-view-interaction-runtime.js +2 -5
- package/dist/local-editor-scene-view-interaction-runtime.js.map +1 -1
- package/dist/playable-local-editor-entry.d.ts +10 -0
- package/dist/playable-local-editor-entry.d.ts.map +1 -1
- package/dist/playable-local-editor-entry.js +10 -2
- package/dist/playable-local-editor-entry.js.map +1 -1
- package/dist/playable-local-editor-host.d.ts +3 -32
- package/dist/playable-local-editor-host.d.ts.map +1 -1
- package/dist/playable-local-editor-host.js +6 -70
- package/dist/playable-local-editor-host.js.map +1 -1
- package/dist/playable-product-local-editor.d.ts +1 -2
- package/dist/playable-product-local-editor.d.ts.map +1 -1
- package/dist/playable-product-local-editor.js +0 -1
- package/dist/playable-product-local-editor.js.map +1 -1
- package/dist/playable-product-projection-preview.d.ts.map +1 -1
- package/dist/playable-product-projection-preview.js +1 -1
- package/dist/playable-product-projection-preview.js.map +1 -1
- package/dist/playable-product-scene-capabilities.d.ts +0 -2
- package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
- package/dist/playable-product-scene-capabilities.js +33 -6
- package/dist/playable-product-scene-capabilities.js.map +1 -1
- package/dist/playable-runtime-babylon.d.ts +4 -0
- package/dist/playable-runtime-babylon.d.ts.map +1 -1
- package/dist/playable-runtime-babylon.js +4 -0
- package/dist/playable-runtime-babylon.js.map +1 -1
- package/dist/playable-sdk.d.ts +1 -1
- package/dist/playable-sdk.d.ts.map +1 -1
- package/dist/playable-sdk.js.map +1 -1
- package/dist/playable-standard-project.d.ts +0 -2
- package/dist/playable-standard-project.d.ts.map +1 -1
- package/dist/playable-standard-project.js +1 -2
- package/dist/playable-standard-project.js.map +1 -1
- package/dist/project-service-projection.d.ts +16 -0
- package/dist/project-service-projection.d.ts.map +1 -0
- package/dist/project-service-projection.js +67 -0
- package/dist/project-service-projection.js.map +1 -0
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.d.ts +18 -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 +54 -18
- package/node_modules/@fps-games/babylon-renderer/dist/post-process/babylon-default-pipeline.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +9 -9
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +127 -13
- package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +66 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +6 -6
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts +32 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js +254 -0
- package/node_modules/@fps-games/editor-browser/dist/editor-command-service-client.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts +3 -1
- package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/index.js +2 -0
- package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts +68 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js +650 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-command-center.js.map +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts +1 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js +22 -0
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-formal-surface-visibility.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-controller.d.ts +8 -0
- 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 +117 -6
- 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-view.d.ts +14 -1
- 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 +100 -1
- 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-panels.d.ts +8 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +75 -2
- 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-types.d.ts +37 -12
- 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.d.ts +25 -2
- 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 +332 -107
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/package.json +7 -7
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts +107 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js +1211 -0
- package/node_modules/@fps-games/editor-core/dist/editor-authoring-host.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts +34 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js +260 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-capability-adapter.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js +14 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-composed-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts +18 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js +113 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-observability.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts +82 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js +1098 -0
- package/node_modules/@fps-games/editor-core/dist/editor-command-system.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.d.ts +6 -7
- 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 +62 -103
- package/node_modules/@fps-games/editor-core/dist/editor-plugin-host.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts +30 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js +540 -0
- package/node_modules/@fps-games/editor-core/dist/editor-service-gateway.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts +9 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js +61 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session-authority.js.map +1 -0
- package/node_modules/@fps-games/editor-core/dist/editor-session.d.ts +55 -0
- 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 +247 -6
- package/node_modules/@fps-games/editor-core/dist/editor-session.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.d.ts +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/index.js +6 -2
- package/node_modules/@fps-games/editor-core/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +6 -6
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/index.js.map +1 -1
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts +2 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/bridge-command/protocol.d.ts.map +1 -1
- 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 +41 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/helpers.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/forge-play-types.d.ts +27 -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 +2 -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 +214 -7
- 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 +1 -0
- 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 +11 -3
- 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 +2 -4
- 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 +0 -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 +77 -31
- 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/types.d.ts +8 -1
- 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/material-binding/asset-fields.d.ts +21 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js +90 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/asset-fields.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts +27 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js +161 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/binding.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js +5 -92
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts +7 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js +26 -9
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts +9 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js +19 -8
- package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/slot-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts +5 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js +16 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/material-override-inspector.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/prefab-stage/stage-inspector.d.ts +9 -0
- 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 +12 -2
- 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/ground-decal.d.ts +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.js +10 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/ground-decal.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 +1 -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 +17 -82
- 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 +53 -57
- 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-session.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js +3 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-session.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts +10 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js +256 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/product/standard-authoring-commands.js.map +1 -0
- 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 +7 -5
- 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/scene-source/client.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +8 -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/types.d.ts +1 -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/upgrade-doctor/inspectors.js +134 -12
- 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.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-scene-workflow.js +47 -0
- 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/editor-service-vite.d.ts +27 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js +592 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/editor-service-vite.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +3 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +2 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/plugin.js +61 -6
- 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 +0 -2
- 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 -10
- 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-authoring-api.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +21 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts +13 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js +18 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-authoring-backend.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts +28 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js +863 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/types.d.ts +2 -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/editor-command-capabilities.d.ts +1626 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/{agent-bridge.js → editor-command-capabilities.js} +766 -620
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-capabilities.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts +69 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js +22 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command-trace.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts +136 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js +2 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-command.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts +225 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js +4 -0
- package/node_modules/@fps-games/editor-protocol/dist/editor-service.js.map +1 -0
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts +6 -3
- package/node_modules/@fps-games/editor-protocol/dist/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-protocol/dist/index.js +6 -3
- 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/package.json +3 -3
- package/node_modules/@fps-games/editor-ui/package.json +1 -1
- package/node_modules/@fps-games/playable-assets/package.json +1 -1
- package/node_modules/@fps-games/playable-contracts/package.json +1 -1
- package/node_modules/@fps-games/playable-rendering/package.json +2 -2
- package/node_modules/@fps-games/playable-runtime/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 +6 -6
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts +1 -0
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.d.ts.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js +78 -4
- package/node_modules/@fps-games/plugin-hierarchy/dist/kernel.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
- package/node_modules/@fps-games/plugin-host/package.json +2 -2
- package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-markers/package.json +5 -5
- package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-materials/package.json +5 -5
- package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
- package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-scene/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
- package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
- package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
- package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
- package/package.json +23 -23
- package/dist/agent-bridge/capabilities/assets.d.ts +0 -8
- package/dist/agent-bridge/capabilities/assets.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/assets.js.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.d.ts +0 -5
- package/dist/agent-bridge/capabilities/editor-state.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/editor-state.js.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.d.ts +0 -4
- package/dist/agent-bridge/capabilities/hierarchy.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/hierarchy.js.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts +0 -11
- package/dist/agent-bridge/capabilities/host-lifecycle.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/host-lifecycle.js +0 -149
- package/dist/agent-bridge/capabilities/host-lifecycle.js.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.d.ts +0 -5
- package/dist/agent-bridge/capabilities/prefabs.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/prefabs.js.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.d.ts +0 -8
- package/dist/agent-bridge/capabilities/scene-objects.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/scene-objects.js +0 -480
- package/dist/agent-bridge/capabilities/scene-objects.js.map +0 -1
- package/dist/agent-bridge/capabilities/selection.d.ts +0 -5
- package/dist/agent-bridge/capabilities/selection.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/selection.js +0 -60
- package/dist/agent-bridge/capabilities/selection.js.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.d.ts +0 -5
- package/dist/agent-bridge/capabilities/shadows.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/shadows.js.map +0 -1
- package/dist/agent-bridge/capabilities/transform.d.ts +0 -5
- package/dist/agent-bridge/capabilities/transform.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/transform.js +0 -164
- package/dist/agent-bridge/capabilities/transform.js.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.d.ts +0 -4
- package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/ui-regions.js.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.d.ts +0 -5
- package/dist/agent-bridge/capabilities/viewport.d.ts.map +0 -1
- package/dist/agent-bridge/capabilities/viewport.js.map +0 -1
- package/dist/agent-bridge/capability-sources.d.ts +0 -7
- package/dist/agent-bridge/capability-sources.d.ts.map +0 -1
- package/dist/agent-bridge/capability-sources.js +0 -34
- package/dist/agent-bridge/capability-sources.js.map +0 -1
- package/dist/agent-bridge/diagnostics.d.ts +0 -12
- package/dist/agent-bridge/diagnostics.d.ts.map +0 -1
- package/dist/agent-bridge/diagnostics.js.map +0 -1
- package/dist/agent-bridge/index.d.ts.map +0 -1
- package/dist/agent-bridge/index.js.map +0 -1
- package/dist/agent-bridge/register.d.ts +0 -4
- package/dist/agent-bridge/register.d.ts.map +0 -1
- package/dist/agent-bridge/register.js.map +0 -1
- package/dist/agent-bridge/shared.d.ts.map +0 -1
- package/dist/agent-bridge/shared.js.map +0 -1
- package/dist/agent-bridge/source-types.d.ts +0 -110
- package/dist/agent-bridge/source-types.d.ts.map +0 -1
- package/dist/agent-bridge/source-types.js.map +0 -1
- package/dist/editor-plugin-agent-capabilities.d.ts +0 -4
- package/dist/editor-plugin-agent-capabilities.d.ts.map +0 -1
- package/dist/editor-plugin-agent-capabilities.js +0 -64
- package/dist/editor-plugin-agent-capabilities.js.map +0 -1
- package/dist/local-editor-agent-actions.d.ts +0 -43
- package/dist/local-editor-agent-actions.d.ts.map +0 -1
- package/dist/local-editor-agent-actions.js +0 -321
- package/dist/local-editor-agent-actions.js.map +0 -1
- package/dist/local-editor-agent-bridge-transport.d.ts +0 -129
- package/dist/local-editor-agent-bridge-transport.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge-transport.js +0 -403
- package/dist/local-editor-agent-bridge-transport.js.map +0 -1
- package/dist/local-editor-agent-bridge.d.ts +0 -2
- package/dist/local-editor-agent-bridge.d.ts.map +0 -1
- package/dist/local-editor-agent-bridge.js +0 -2
- package/dist/local-editor-agent-bridge.js.map +0 -1
- package/dist/local-editor-agent-context.d.ts +0 -68
- package/dist/local-editor-agent-context.d.ts.map +0 -1
- package/dist/local-editor-agent-context.js +0 -716
- package/dist/local-editor-agent-context.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts +0 -22
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js +0 -106
- package/node_modules/@fps-games/editor-core/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts +0 -17
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js +0 -14
- package/node_modules/@fps-games/editor-core/dist/agent-interaction.js.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts +0 -23
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js +0 -47
- package/node_modules/@fps-games/editor-forge-play/dist/agent-transport.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts +0 -112
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js +0 -159
- package/node_modules/@fps-games/editor-playable-sdk/dist/local-harness/agent-descriptions.js.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts +0 -15
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js +0 -76
- package/node_modules/@fps-games/editor-playable-sdk/dist/vite/session-metadata.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts +0 -1622
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-bridge.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts +0 -68
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js +0 -23
- package/node_modules/@fps-games/editor-protocol/dist/agent-trace.js.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +0 -187
- package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +0 -1
- package/node_modules/@fps-games/editor-protocol/dist/agent.js +0 -5
- package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +0 -1
- /package/dist/{agent-bridge → editor-commands}/source-types.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findEditorSceneModelRenderer,\n} from '../document/index';\nimport {\n normalizeEditorSceneMaterialSlotOwnerPath,\n} from './paths';\nimport type {\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneArtistMaterialProfile,\n EditorSceneMaterialBinding,\n EditorSceneMaterialAssetIntegrityResult,\n EditorSceneMaterialAssetUsage,\n EditorSceneMaterialBindingSummary,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialOverrides,\n EditorSceneMaterialSlotDescriptor,\n EditorSceneSourceMaterialProfile,\n EditorSceneSourceMaterialTextureHint,\n} from './types';\n\ntype EditorSceneMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\nexport const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nexport function findEditorSceneMaterialAsset<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene'>,\n materialAssetId: string,\n): TMaterialAsset | null {\n if (!materialAssetId) return null;\n return document.scene.materialAssets?.find((materialAsset) => materialAsset.id === materialAssetId) ?? null;\n}\n\nexport function hasEditorSceneMaterialAsset(\n document: Pick<EditorSceneMaterialDocument, 'scene'>,\n materialAssetId: string,\n): boolean {\n return !!findEditorSceneMaterialAsset(document, materialAssetId);\n}\n\nexport function createEditorSceneMaterialBindingSummary<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n binding: EditorSceneMaterialBinding | null | undefined,\n materialAsset: TMaterialAsset | null | undefined,\n): EditorSceneMaterialBindingSummary<TMaterialAsset> {\n if (materialAsset) {\n return {\n state: 'asset',\n materialAssetId: materialAsset.id,\n materialAsset,\n };\n }\n if (binding?.materialAssetId) {\n return {\n state: 'missing-asset',\n materialAssetId: binding.materialAssetId,\n };\n }\n if (binding?.override) return { state: 'override' };\n return { state: 'inherit' };\n}\n\nexport function collectEditorSceneMaterialAssetBindingIds(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): string[] {\n const ids = new Set<string>();\n for (const usage of collectEditorSceneMaterialAssetUsages(document, materialAssetId)) {\n ids.add(usage.gameObjectId);\n }\n return [...ids];\n}\n\nexport function collectEditorSceneMaterialAssetUsages(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): EditorSceneMaterialAssetUsage[] {\n const targetMaterialAssetId = materialAssetId.trim();\n if (!targetMaterialAssetId) return [];\n return collectEditorSceneMaterialAssetReferences(document)\n .filter(usage => usage.materialAssetId === targetMaterialAssetId);\n}\n\nexport function createEditorSceneMaterialAssetOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView {\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = collectEditorSceneMaterialAssetUsages(document, normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nexport function collectEditorSceneMaterialAssetReferences(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetUsage[] {\n const usages: EditorSceneMaterialAssetUsage[] = [];\n for (const gameObject of document.scene.gameObjects) {\n const gameObjectLabel = getEditorSceneMaterialUsageGameObjectLabel(gameObject);\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(gameObject.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: rootMaterialAssetId,\n bindingPath: 'overrides.materialBinding.materialAssetId',\n label: gameObjectLabel,\n });\n }\n const materialSlots = collectEditorSceneChildMaterialSlots(document, gameObject);\n const materialSlotsBySlotId = new Map(\n materialSlots\n .filter(slot => !!slot.slotId)\n .map(slot => [slot.slotId!, slot]),\n );\n const materialSlotsByOwnerPath = new Map(\n materialSlots.map(slot => [normalizeEditorSceneMaterialSlotOwnerPath(slot.ownerNodePath), slot]),\n );\n const materialSlotBindings = gameObject.overrides?.materialSlotBindings ?? {};\n for (const [slotId, binding] of Object.entries(materialSlotBindings)) {\n const slotMaterialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!slotMaterialAssetId) continue;\n const slot = materialSlotsBySlotId.get(slotId);\n const slotLabel = getEditorSceneMaterialUsageSlotLabel(slot, slotId);\n usages.push({\n kind: 'slot',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: slotMaterialAssetId,\n bindingPath: `overrides.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${gameObjectLabel} / ${slotLabel}`,\n slotId,\n ownerNodePath: slot?.ownerNodePath ?? slotId,\n });\n }\n }\n for (const asset of document.assets) {\n if (asset.type !== 'prefab' || !asset.prefab) continue;\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: asset.id,\n ownerName: asset.displayName ?? asset.id,\n path: `assets.${asset.id}.prefab.overrides`,\n overrides: asset.prefab.overrides,\n });\n for (const node of asset.prefab.nodes ?? []) {\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: `${asset.id}:${node.id}`,\n ownerName: `${asset.displayName ?? asset.id} / ${node.name ?? node.id}`,\n path: `assets.${asset.id}.prefab.nodes.${node.id}.overrides`,\n overrides: node.overrides,\n });\n }\n }\n return usages;\n}\n\nfunction collectPrefabMaterialOverrideReferences(\n usages: EditorSceneMaterialAssetUsage[],\n input: {\n ownerId: string;\n ownerName: string;\n path: string;\n overrides: EditorSceneMaterialOverrides | undefined;\n },\n): void {\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(input.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId: rootMaterialAssetId,\n bindingPath: `${input.path}.materialBinding.materialAssetId`,\n label: input.ownerName,\n });\n }\n for (const [slotId, binding] of Object.entries(input.overrides?.materialSlotBindings ?? {})) {\n const materialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!materialAssetId) continue;\n usages.push({\n kind: 'slot',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId,\n bindingPath: `${input.path}.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${input.ownerName} / ${slotId}`,\n slotId,\n ownerNodePath: slotId,\n });\n }\n}\n\nexport function resolveEditorSceneMaterialAssetIntegrity(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetIntegrityResult {\n const materialAssetIds = [...new Set(\n (document.scene.materialAssets ?? [])\n .map(materialAsset => materialAsset.id?.trim())\n .filter((materialAssetId): materialAssetId is string => !!materialAssetId),\n )];\n const materialAssetIdSet = new Set(materialAssetIds);\n const references = collectEditorSceneMaterialAssetReferences(document);\n const missingReferences = references.filter(usage => !materialAssetIdSet.has(usage.materialAssetId));\n const missingReferencesByAssetId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n for (const usage of missingReferences) {\n const usages = missingReferencesByAssetId.get(usage.materialAssetId) ?? [];\n usages.push(usage);\n missingReferencesByAssetId.set(usage.materialAssetId, usages);\n }\n const issues = [...missingReferencesByAssetId.entries()].map(([materialAssetId, usages]) => ({\n kind: 'missing-material-asset' as const,\n materialAssetId,\n usages,\n }));\n return {\n ok: issues.length === 0,\n materialAssetIds,\n references,\n missingMaterialAssetIds: issues.map(issue => issue.materialAssetId),\n missingReferences,\n issues,\n };\n}\n\nexport function collectEditorSceneChildMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const slots = new Map<string, EditorSceneMaterialSlotDescriptor>();\n const ownerNodePaths = new Set<string>();\n for (const slot of readEditorSceneAssetMaterialSlots(document, gameObject)) {\n slots.set(slot.slotId ?? slot.ownerNodePath, slot);\n ownerNodePaths.add(slot.ownerNodePath);\n }\n for (const slotId of Object.keys(gameObject.overrides?.materialSlotBindings ?? {})) {\n if (!slots.has(slotId)) slots.set(slotId, { slotId, ownerNodePath: slotId, label: slotId });\n }\n return [...slots.values()].sort((left, right) => left.ownerNodePath.localeCompare(right.ownerNodePath));\n}\n\nexport function hasDetectedModelMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): boolean {\n return readEditorSceneAssetMaterialSlots(document, gameObject).length > 0;\n}\n\nexport function bindDefaultEditorSceneSlotMaterial<\n TGameObject extends EditorSceneMaterialGameObject = EditorSceneMaterialGameObject,\n>(\n gameObject: TGameObject,\n slot: EditorSceneMaterialSlotDescriptor,\n materialAssetId: string,\n): TGameObject {\n const next = structuredClone(gameObject) as TGameObject;\n next.overrides = next.overrides ?? {};\n if (!slot.slotId) return next;\n next.overrides.materialSlotBindings = next.overrides.materialSlotBindings ?? {};\n next.overrides.materialSlotBindings[slot.slotId] = {\n ...(next.overrides.materialSlotBindings[slot.slotId] ?? {}),\n materialAssetId,\n };\n return next;\n}\n\nexport function collectEditorSceneSlotSourceMaterialIndices(slot: Pick<EditorSceneMaterialSlotDescriptor, 'sourceMaterialIndices' | 'sourceMaterialIndex'>): number[] {\n if (slot.sourceMaterialIndices?.length) {\n return [...new Set(slot.sourceMaterialIndices.filter((value): value is number => Number.isInteger(value)))];\n }\n const sourceMaterialIndex = slot.sourceMaterialIndex;\n return typeof sourceMaterialIndex === 'number' && Number.isInteger(sourceMaterialIndex) ? [sourceMaterialIndex] : [];\n}\n\nexport function getEditorSceneSlotSelectionKey(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return slot.slotId;\n}\n\nexport function getEditorSceneSlotMaterialBindingPath(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return `overrides.materialSlotBindings.${slot.slotId}.materialAssetId`;\n}\n\nexport function getEditorSceneSlotMaterialBinding<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n gameObject: Pick<EditorSceneMaterialGameObject, 'overrides'>,\n slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>,\n): TBinding | undefined {\n return gameObject.overrides?.materialSlotBindings?.[slot.slotId] as TBinding | undefined;\n}\n\nexport function createEditorSceneAssetMeshSelectionId(\n rootGameObjectId: string,\n slotSelectionKey: string,\n): string {\n return `${rootGameObjectId}${EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(slotSelectionKey)}`;\n}\n\nexport function parseEditorSceneAssetMeshSelectionId(value: string): { rootGameObjectId: string; slotSelectionKey: string } | null {\n const separatorIndex = value.indexOf(EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR);\n if (separatorIndex < 0) return null;\n const rootGameObjectId = value.slice(0, separatorIndex);\n const encodedSlotSelectionKey = value.slice(separatorIndex + EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR.length);\n if (!rootGameObjectId || !encodedSlotSelectionKey) return null;\n try {\n const slotSelectionKey = decodeURIComponent(encodedSlotSelectionKey).trim().replace(/^\\/+|\\/+$/g, '');\n return slotSelectionKey ? { rootGameObjectId, slotSelectionKey } : null;\n } catch {\n return null;\n }\n}\n\nexport function readEditorSceneMaterialBindingConfig<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n value: unknown,\n): TBinding | undefined {\n const source = readEditorSceneRecord(value);\n if (!source) return undefined;\n const binding: EditorSceneMaterialBinding = {};\n const materialAssetId = readEditorSceneString(source.materialAssetId);\n if (materialAssetId) binding.materialAssetId = materialAssetId;\n if (source.override && typeof source.override === 'object' && !Array.isArray(source.override)) {\n binding.override = source.override as EditorSceneArtistMaterialProfile;\n }\n return Object.keys(binding).length > 0 ? binding as TBinding : undefined;\n}\n\nexport function splitEditorSceneFieldPath(path: string): string[] {\n const materialSlotBinding = splitMaterialSlotBindingFieldPath(path);\n return materialSlotBinding ?? path.split('.').filter(Boolean);\n}\n\nexport function splitMaterialSlotBindingFieldPath(path: string): string[] | null {\n const prefix = 'overrides.materialSlotBindings.';\n if (!path.startsWith(prefix)) return null;\n const remainder = path.slice(prefix.length);\n const overrideMarker = '.override.';\n const overrideMarkerIndex = remainder.lastIndexOf(overrideMarker);\n if (overrideMarkerIndex >= 0) {\n const slotId = remainder.slice(0, overrideMarkerIndex);\n const suffix = remainder.slice(overrideMarkerIndex + overrideMarker.length);\n if (!slotId || !suffix) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'override', ...suffix.split('.').filter(Boolean)];\n }\n const materialAssetSuffix = '.materialAssetId';\n if (remainder.endsWith(materialAssetSuffix)) {\n const slotId = remainder.slice(0, -materialAssetSuffix.length);\n if (!slotId) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'materialAssetId'];\n }\n return null;\n}\n\nexport function readEditorSceneAssetMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const renderer = findEditorSceneModelRenderer(gameObject);\n if (!renderer) return [];\n const asset = document.assets.find((entry) => entry.id === renderer.assetId);\n const rawSlots = asset?.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: EditorSceneMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readEditorSceneMaterialSlotDescriptor(rawSlot);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nexport function readEditorSceneMaterialSlotDescriptor(value: unknown): EditorSceneMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const ownerNodePath = normalizeEditorSceneMaterialSlotOwnerPath(\n typeof record.ownerNodePath === 'string' ? record.ownerNodePath : '',\n );\n const slotId = typeof record.slotId === 'string' && record.slotId.trim() ? record.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof record.label === 'string' && record.label.trim()\n ? record.label.trim()\n : ownerNodePath;\n const nodeIndex = Number.isInteger(record.nodeIndex) ? record.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(record.nodeIndexPath)\n ? record.nodeIndexPath.filter(Number.isInteger)\n : undefined;\n const meshIndex = Number.isInteger(record.meshIndex) ? record.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(record.primitiveIndex) ? record.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(record.sourceMaterialIndex) ? record.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(record.sourceMaterialIndices)\n ? record.sourceMaterialIndices.filter(Number.isInteger)\n : undefined;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const materialNames = Array.isArray(record.materialNames)\n ? record.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = typeof record.triangleCount === 'number' && Number.isFinite(record.triangleCount)\n ? record.triangleCount\n : undefined;\n const boundingBox = readEditorSceneMaterialSlotBoundingBox(record.boundingBox);\n const sourceMaterialProfiles = readEditorSceneSourceMaterialProfiles(record.sourceMaterialProfiles);\n return {\n slotId,\n ownerNodePath,\n 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 ? { sourceMaterialIndices } : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n ...(sourceMaterialProfiles && sourceMaterialProfiles.length > 0 ? { sourceMaterialProfiles } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotBoundingBox(value: unknown): EditorSceneMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readEditorSceneMaterialSlotVec3Tuple(record.min);\n const max = readEditorSceneMaterialSlotVec3Tuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotVec3Tuple(value: unknown): [number, number, number] | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value;\n return typeof x === 'number' && Number.isFinite(x)\n && typeof y === 'number' && Number.isFinite(y)\n && typeof z === 'number' && Number.isFinite(z)\n ? [x, y, z]\n : null;\n}\n\nfunction readEditorSceneSourceMaterialProfiles(value: unknown): EditorSceneSourceMaterialProfile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const profiles = value\n .map(readEditorSceneSourceMaterialProfile)\n .filter((profile): profile is EditorSceneSourceMaterialProfile => !!profile);\n return profiles.length > 0 ? profiles : undefined;\n}\n\nfunction readEditorSceneSourceMaterialProfile(value: unknown): EditorSceneSourceMaterialProfile | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n if (!Number.isInteger(record.sourceMaterialIndex)) return null;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const profile = record.profile && typeof record.profile === 'object' && !Array.isArray(record.profile)\n ? record.profile as EditorSceneSourceMaterialProfile['profile']\n : undefined;\n const textureHints = readEditorSceneSourceMaterialTextureHints(record.textureHints);\n return {\n sourceMaterialIndex: record.sourceMaterialIndex as number,\n ...(materialName ? { materialName } : {}),\n ...(profile ? { profile } : {}),\n ...(textureHints && textureHints.length > 0 ? { textureHints } : {}),\n };\n}\n\nfunction readEditorSceneSourceMaterialTextureHints(value: unknown): EditorSceneSourceMaterialTextureHint[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const hints = value\n .map(readEditorSceneSourceMaterialTextureHint)\n .filter((hint): hint is EditorSceneSourceMaterialTextureHint => !!hint);\n return hints.length > 0 ? hints : undefined;\n}\n\nfunction readEditorSceneSourceMaterialTextureHint(value: unknown): EditorSceneSourceMaterialTextureHint | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const profilePath = typeof record.profilePath === 'string' && record.profilePath.trim() ? record.profilePath.trim() : '';\n const reason = typeof record.reason === 'string' && record.reason.trim() ? record.reason.trim() : '';\n if (!profilePath || !reason) return null;\n return {\n profilePath,\n reason,\n ...(Number.isInteger(record.textureIndex) ? { textureIndex: record.textureIndex as number } : {}),\n ...(Number.isInteger(record.imageIndex) ? { imageIndex: record.imageIndex as number } : {}),\n ...(Number.isInteger(record.bufferView) ? { bufferView: record.bufferView as number } : {}),\n ...(typeof record.mimeType === 'string' && record.mimeType.trim() ? { mimeType: record.mimeType.trim() } : {}),\n ...(typeof record.uri === 'string' && record.uri.trim() ? { uri: record.uri.trim() } : {}),\n };\n}\n\nfunction readEditorSceneRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction readEditorSceneString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction getEditorSceneMaterialUsageGameObjectLabel(\n gameObject: Pick<EditorSceneMaterialGameObject, 'id' | 'name'>,\n): string {\n return gameObject.name?.trim() || gameObject.id;\n}\n\nfunction readEditorSceneMaterialBindingAssetId(binding: EditorSceneMaterialBinding | null | undefined): string {\n return typeof binding?.materialAssetId === 'string' ? binding.materialAssetId.trim() : '';\n}\n\nfunction getEditorSceneMaterialUsageSlotLabel(\n slot: EditorSceneMaterialSlotDescriptor | null | undefined,\n fallback: string,\n): string {\n return slot?.label?.trim()\n || slot?.ownerNodePath?.trim()\n || slot?.slotId?.trim()\n || fallback;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"binding.js","sourceRoot":"","sources":["../../src/material-binding/binding.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n findEditorSceneModelRenderer,\n} from '../document/index';\nimport {\n createEditorSceneDuplicateMaterialAssetValue,\n normalizeEditorSceneMaterialSlotOwnerPath,\n} from './paths';\nimport {\n createEditorSceneMaterialAssetMeta,\n createEditorSceneMaterialAssetPreview,\n} from './preview';\nimport {\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport type {\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneArtistMaterialProfile,\n EditorSceneMaterialBinding,\n EditorSceneMaterialAssetIntegrityResult,\n EditorSceneMaterialAssetUsage,\n EditorSceneMaterialBindingSummary,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialOverrides,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneMaterialSlotDescriptor,\n EditorSceneSourceMaterialProfile,\n EditorSceneSourceMaterialTextureHint,\n} from './types';\n\ntype EditorSceneMaterialSlotBoundingBox = {\n min?: [number, number, number];\n max?: [number, number, number];\n};\n\nexport const EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';\n\nexport function findEditorSceneMaterialAsset<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene'>,\n materialAssetId: string,\n): TMaterialAsset | null {\n if (!materialAssetId) return null;\n return document.scene.materialAssets?.find((materialAsset) => materialAsset.id === materialAssetId) ?? null;\n}\n\nexport function hasEditorSceneMaterialAsset(\n document: Pick<EditorSceneMaterialDocument, 'scene'>,\n materialAssetId: string,\n): boolean {\n return !!findEditorSceneMaterialAsset(document, materialAssetId);\n}\n\nexport function createEditorSceneMaterialBindingSummary<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n binding: EditorSceneMaterialBinding | null | undefined,\n materialAsset: TMaterialAsset | null | undefined,\n): EditorSceneMaterialBindingSummary<TMaterialAsset> {\n if (materialAsset) {\n return {\n state: 'asset',\n materialAssetId: materialAsset.id,\n materialAsset,\n };\n }\n if (binding?.materialAssetId) {\n return {\n state: 'missing-asset',\n materialAssetId: binding.materialAssetId,\n };\n }\n if (binding?.override) return { state: 'override' };\n return { state: 'inherit' };\n}\n\nexport function collectEditorSceneMaterialAssetBindingIds(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): string[] {\n const ids = new Set<string>();\n for (const usage of collectEditorSceneMaterialAssetUsages(document, materialAssetId)) {\n ids.add(usage.gameObjectId);\n }\n return [...ids];\n}\n\nexport function collectEditorSceneMaterialAssetUsages(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n): EditorSceneMaterialAssetUsage[] {\n const targetMaterialAssetId = materialAssetId.trim();\n if (!targetMaterialAssetId) return [];\n return collectEditorSceneMaterialAssetReferences(document)\n .filter(usage => usage.materialAssetId === targetMaterialAssetId);\n}\n\nexport function createEditorSceneMaterialAssetOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView {\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = collectEditorSceneMaterialAssetUsages(document, normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nexport function collectEditorSceneMaterialAssetReferences(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetUsage[] {\n const usages: EditorSceneMaterialAssetUsage[] = [];\n for (const gameObject of document.scene.gameObjects) {\n const gameObjectLabel = getEditorSceneMaterialUsageGameObjectLabel(gameObject);\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(gameObject.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: rootMaterialAssetId,\n bindingPath: 'overrides.materialBinding.materialAssetId',\n label: gameObjectLabel,\n });\n }\n const materialSlots = collectEditorSceneChildMaterialSlots(document, gameObject);\n const materialSlotsBySlotId = new Map(\n materialSlots\n .filter(slot => !!slot.slotId)\n .map(slot => [slot.slotId!, slot]),\n );\n const materialSlotsByOwnerPath = new Map(\n materialSlots.map(slot => [normalizeEditorSceneMaterialSlotOwnerPath(slot.ownerNodePath), slot]),\n );\n const materialSlotBindings = gameObject.overrides?.materialSlotBindings ?? {};\n for (const [slotId, binding] of Object.entries(materialSlotBindings)) {\n const slotMaterialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!slotMaterialAssetId) continue;\n const slot = materialSlotsBySlotId.get(slotId);\n const slotLabel = getEditorSceneMaterialUsageSlotLabel(slot, slotId);\n usages.push({\n kind: 'slot',\n gameObjectId: gameObject.id,\n gameObjectName: gameObject.name,\n materialAssetId: slotMaterialAssetId,\n bindingPath: `overrides.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${gameObjectLabel} / ${slotLabel}`,\n slotId,\n ownerNodePath: slot?.ownerNodePath ?? slotId,\n });\n }\n }\n for (const asset of document.assets) {\n if (asset.type !== 'prefab' || !asset.prefab) continue;\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: asset.id,\n ownerName: asset.displayName ?? asset.id,\n path: `assets.${asset.id}.prefab.overrides`,\n overrides: asset.prefab.overrides,\n });\n for (const node of asset.prefab.nodes ?? []) {\n collectPrefabMaterialOverrideReferences(usages, {\n ownerId: `${asset.id}:${node.id}`,\n ownerName: `${asset.displayName ?? asset.id} / ${node.name ?? node.id}`,\n path: `assets.${asset.id}.prefab.nodes.${node.id}.overrides`,\n overrides: node.overrides,\n });\n }\n }\n return usages;\n}\n\nfunction collectPrefabMaterialOverrideReferences(\n usages: EditorSceneMaterialAssetUsage[],\n input: {\n ownerId: string;\n ownerName: string;\n path: string;\n overrides: EditorSceneMaterialOverrides | undefined;\n },\n): void {\n const rootMaterialAssetId = readEditorSceneMaterialBindingAssetId(input.overrides?.materialBinding);\n if (rootMaterialAssetId) {\n usages.push({\n kind: 'root',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId: rootMaterialAssetId,\n bindingPath: `${input.path}.materialBinding.materialAssetId`,\n label: input.ownerName,\n });\n }\n for (const [slotId, binding] of Object.entries(input.overrides?.materialSlotBindings ?? {})) {\n const materialAssetId = readEditorSceneMaterialBindingAssetId(binding);\n if (!materialAssetId) continue;\n usages.push({\n kind: 'slot',\n gameObjectId: input.ownerId,\n gameObjectName: input.ownerName,\n materialAssetId,\n bindingPath: `${input.path}.materialSlotBindings.${slotId}.materialAssetId`,\n label: `${input.ownerName} / ${slotId}`,\n slotId,\n ownerNodePath: slotId,\n });\n }\n}\n\nexport function resolveEditorSceneMaterialAssetIntegrity(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): EditorSceneMaterialAssetIntegrityResult {\n const materialAssetIds = [...new Set(\n (document.scene.materialAssets ?? [])\n .map(materialAsset => materialAsset.id?.trim())\n .filter((materialAssetId): materialAssetId is string => !!materialAssetId),\n )];\n const materialAssetIdSet = new Set(materialAssetIds);\n const references = collectEditorSceneMaterialAssetReferences(document);\n const missingReferences = references.filter(usage => !materialAssetIdSet.has(usage.materialAssetId));\n const missingReferencesByAssetId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n for (const usage of missingReferences) {\n const usages = missingReferencesByAssetId.get(usage.materialAssetId) ?? [];\n usages.push(usage);\n missingReferencesByAssetId.set(usage.materialAssetId, usages);\n }\n const issues = [...missingReferencesByAssetId.entries()].map(([materialAssetId, usages]) => ({\n kind: 'missing-material-asset' as const,\n materialAssetId,\n usages,\n }));\n return {\n ok: issues.length === 0,\n materialAssetIds,\n references,\n missingMaterialAssetIds: issues.map(issue => issue.materialAssetId),\n missingReferences,\n issues,\n };\n}\n\nexport function collectEditorSceneChildMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const slots = new Map<string, EditorSceneMaterialSlotDescriptor>();\n const ownerNodePaths = new Set<string>();\n for (const slot of readEditorSceneAssetMaterialSlots(document, gameObject)) {\n slots.set(slot.slotId ?? slot.ownerNodePath, slot);\n ownerNodePaths.add(slot.ownerNodePath);\n }\n for (const slotId of Object.keys(gameObject.overrides?.materialSlotBindings ?? {})) {\n if (!slots.has(slotId)) slots.set(slotId, { slotId, ownerNodePath: slotId, label: slotId });\n }\n return [...slots.values()].sort((left, right) => left.ownerNodePath.localeCompare(right.ownerNodePath));\n}\n\nexport function hasDetectedModelMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): boolean {\n return readEditorSceneAssetMaterialSlots(document, gameObject).length > 0;\n}\n\nexport function bindDefaultEditorSceneSlotMaterial<\n TGameObject extends EditorSceneMaterialGameObject = EditorSceneMaterialGameObject,\n>(\n gameObject: TGameObject,\n slot: EditorSceneMaterialSlotDescriptor,\n materialAssetId: string,\n): TGameObject {\n const next = structuredClone(gameObject) as TGameObject;\n next.overrides = next.overrides ?? {};\n if (!slot.slotId) return next;\n next.overrides.materialSlotBindings = next.overrides.materialSlotBindings ?? {};\n next.overrides.materialSlotBindings[slot.slotId] = {\n ...(next.overrides.materialSlotBindings[slot.slotId] ?? {}),\n materialAssetId,\n };\n return next;\n}\n\nexport function collectEditorSceneSlotSourceMaterialIndices(slot: Pick<EditorSceneMaterialSlotDescriptor, 'sourceMaterialIndices' | 'sourceMaterialIndex'>): number[] {\n if (slot.sourceMaterialIndices?.length) {\n return [...new Set(slot.sourceMaterialIndices.filter((value): value is number => Number.isInteger(value)))];\n }\n const sourceMaterialIndex = slot.sourceMaterialIndex;\n return typeof sourceMaterialIndex === 'number' && Number.isInteger(sourceMaterialIndex) ? [sourceMaterialIndex] : [];\n}\n\nexport function getEditorSceneSlotSelectionKey(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return slot.slotId;\n}\n\nexport function getEditorSceneSlotMaterialBindingPath(slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>): string {\n return `overrides.materialSlotBindings.${slot.slotId}.materialAssetId`;\n}\n\nexport function getEditorSceneSlotMaterialBinding<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n gameObject: Pick<EditorSceneMaterialGameObject, 'overrides'>,\n slot: Pick<EditorSceneMaterialSlotDescriptor, 'slotId' | 'ownerNodePath'>,\n): TBinding | undefined {\n return gameObject.overrides?.materialSlotBindings?.[slot.slotId] as TBinding | undefined;\n}\n\nexport function createEditorSceneAssetMeshSelectionId(\n rootGameObjectId: string,\n slotSelectionKey: string,\n): string {\n return `${rootGameObjectId}${EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(slotSelectionKey)}`;\n}\n\nexport function parseEditorSceneAssetMeshSelectionId(value: string): { rootGameObjectId: string; slotSelectionKey: string } | null {\n const separatorIndex = value.indexOf(EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR);\n if (separatorIndex < 0) return null;\n const rootGameObjectId = value.slice(0, separatorIndex);\n const encodedSlotSelectionKey = value.slice(separatorIndex + EDITOR_SCENE_ASSET_MESH_SELECTION_SEPARATOR.length);\n if (!rootGameObjectId || !encodedSlotSelectionKey) return null;\n try {\n const slotSelectionKey = decodeURIComponent(encodedSlotSelectionKey).trim().replace(/^\\/+|\\/+$/g, '');\n return slotSelectionKey ? { rootGameObjectId, slotSelectionKey } : null;\n } catch {\n return null;\n }\n}\n\nexport function readEditorSceneMaterialBindingConfig<TBinding extends EditorSceneMaterialBinding = EditorSceneMaterialBinding>(\n value: unknown,\n): TBinding | undefined {\n const source = readEditorSceneRecord(value);\n if (!source) return undefined;\n const binding: EditorSceneMaterialBinding = {};\n const materialAssetId = readEditorSceneString(source.materialAssetId);\n if (materialAssetId) binding.materialAssetId = materialAssetId;\n if (source.override && typeof source.override === 'object' && !Array.isArray(source.override)) {\n binding.override = source.override as EditorSceneArtistMaterialProfile;\n }\n return Object.keys(binding).length > 0 ? binding as TBinding : undefined;\n}\n\nexport function splitEditorSceneFieldPath(path: string): string[] {\n const materialSlotBinding = splitMaterialSlotBindingFieldPath(path);\n return materialSlotBinding ?? path.split('.').filter(Boolean);\n}\n\nexport function splitMaterialSlotBindingFieldPath(path: string): string[] | null {\n const prefix = 'overrides.materialSlotBindings.';\n if (!path.startsWith(prefix)) return null;\n const remainder = path.slice(prefix.length);\n const overrideMarker = '.override.';\n const overrideMarkerIndex = remainder.lastIndexOf(overrideMarker);\n if (overrideMarkerIndex >= 0) {\n const slotId = remainder.slice(0, overrideMarkerIndex);\n const suffix = remainder.slice(overrideMarkerIndex + overrideMarker.length);\n if (!slotId || !suffix) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'override', ...suffix.split('.').filter(Boolean)];\n }\n const materialAssetSuffix = '.materialAssetId';\n if (remainder.endsWith(materialAssetSuffix)) {\n const slotId = remainder.slice(0, -materialAssetSuffix.length);\n if (!slotId) return null;\n return ['overrides', 'materialSlotBindings', slotId, 'materialAssetId'];\n }\n return null;\n}\n\nexport function readEditorSceneAssetMaterialSlots(\n document: Pick<EditorSceneMaterialDocument, 'assets'>,\n gameObject: EditorSceneMaterialGameObject,\n): EditorSceneMaterialSlotDescriptor[] {\n const renderer = findEditorSceneModelRenderer(gameObject);\n if (!renderer) return [];\n const asset = document.assets.find((entry) => entry.id === renderer.assetId);\n const rawSlots = asset?.metadata?.materialSlots;\n if (!Array.isArray(rawSlots)) return [];\n const slots: EditorSceneMaterialSlotDescriptor[] = [];\n for (const rawSlot of rawSlots) {\n const slot = readEditorSceneMaterialSlotDescriptor(rawSlot);\n if (slot) slots.push(slot);\n }\n return slots;\n}\n\nexport function readEditorSceneMaterialSlotDescriptor(value: unknown): EditorSceneMaterialSlotDescriptor | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const ownerNodePath = normalizeEditorSceneMaterialSlotOwnerPath(\n typeof record.ownerNodePath === 'string' ? record.ownerNodePath : '',\n );\n const slotId = typeof record.slotId === 'string' && record.slotId.trim() ? record.slotId.trim() : '';\n if (!slotId || !ownerNodePath) return null;\n const label = typeof record.label === 'string' && record.label.trim()\n ? record.label.trim()\n : ownerNodePath;\n const nodeIndex = Number.isInteger(record.nodeIndex) ? record.nodeIndex as number : undefined;\n const nodeIndexPath = Array.isArray(record.nodeIndexPath)\n ? record.nodeIndexPath.filter(Number.isInteger)\n : undefined;\n const meshIndex = Number.isInteger(record.meshIndex) ? record.meshIndex as number : undefined;\n const primitiveIndex = Number.isInteger(record.primitiveIndex) ? record.primitiveIndex as number : undefined;\n const sourceMaterialIndex = Number.isInteger(record.sourceMaterialIndex) ? record.sourceMaterialIndex as number : undefined;\n const sourceMaterialIndices = Array.isArray(record.sourceMaterialIndices)\n ? record.sourceMaterialIndices.filter(Number.isInteger)\n : undefined;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const materialNames = Array.isArray(record.materialNames)\n ? record.materialNames.filter((item): item is string => typeof item === 'string' && !!item.trim()).map(item => item.trim())\n : undefined;\n const triangleCount = typeof record.triangleCount === 'number' && Number.isFinite(record.triangleCount)\n ? record.triangleCount\n : undefined;\n const boundingBox = readEditorSceneMaterialSlotBoundingBox(record.boundingBox);\n const sourceMaterialProfiles = readEditorSceneSourceMaterialProfiles(record.sourceMaterialProfiles);\n return {\n slotId,\n ownerNodePath,\n 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 ? { sourceMaterialIndices } : {}),\n ...(materialName ? { materialName } : {}),\n ...(materialNames && materialNames.length > 0 ? { materialNames } : {}),\n ...(triangleCount != null ? { triangleCount } : {}),\n ...(boundingBox ? { boundingBox } : {}),\n ...(sourceMaterialProfiles && sourceMaterialProfiles.length > 0 ? { sourceMaterialProfiles } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotBoundingBox(value: unknown): EditorSceneMaterialSlotBoundingBox | undefined {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return undefined;\n const record = value as Record<string, unknown>;\n const min = readEditorSceneMaterialSlotVec3Tuple(record.min);\n const max = readEditorSceneMaterialSlotVec3Tuple(record.max);\n if (!min && !max) return undefined;\n return {\n ...(min ? { min } : {}),\n ...(max ? { max } : {}),\n };\n}\n\nfunction readEditorSceneMaterialSlotVec3Tuple(value: unknown): [number, number, number] | null {\n if (!Array.isArray(value) || value.length < 3) return null;\n const [x, y, z] = value;\n return typeof x === 'number' && Number.isFinite(x)\n && typeof y === 'number' && Number.isFinite(y)\n && typeof z === 'number' && Number.isFinite(z)\n ? [x, y, z]\n : null;\n}\n\nfunction readEditorSceneSourceMaterialProfiles(value: unknown): EditorSceneSourceMaterialProfile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const profiles = value\n .map(readEditorSceneSourceMaterialProfile)\n .filter((profile): profile is EditorSceneSourceMaterialProfile => !!profile);\n return profiles.length > 0 ? profiles : undefined;\n}\n\nfunction readEditorSceneSourceMaterialProfile(value: unknown): EditorSceneSourceMaterialProfile | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n if (!Number.isInteger(record.sourceMaterialIndex)) return null;\n const materialName = typeof record.materialName === 'string' && record.materialName.trim()\n ? record.materialName.trim()\n : '';\n const profile = record.profile && typeof record.profile === 'object' && !Array.isArray(record.profile)\n ? record.profile as EditorSceneSourceMaterialProfile['profile']\n : undefined;\n const textureHints = readEditorSceneSourceMaterialTextureHints(record.textureHints);\n return {\n sourceMaterialIndex: record.sourceMaterialIndex as number,\n ...(materialName ? { materialName } : {}),\n ...(profile ? { profile } : {}),\n ...(textureHints && textureHints.length > 0 ? { textureHints } : {}),\n };\n}\n\nfunction readEditorSceneSourceMaterialTextureHints(value: unknown): EditorSceneSourceMaterialTextureHint[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const hints = value\n .map(readEditorSceneSourceMaterialTextureHint)\n .filter((hint): hint is EditorSceneSourceMaterialTextureHint => !!hint);\n return hints.length > 0 ? hints : undefined;\n}\n\nfunction readEditorSceneSourceMaterialTextureHint(value: unknown): EditorSceneSourceMaterialTextureHint | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n const record = value as Record<string, unknown>;\n const profilePath = typeof record.profilePath === 'string' && record.profilePath.trim() ? record.profilePath.trim() : '';\n const reason = typeof record.reason === 'string' && record.reason.trim() ? record.reason.trim() : '';\n if (!profilePath || !reason) return null;\n return {\n profilePath,\n reason,\n ...(Number.isInteger(record.textureIndex) ? { textureIndex: record.textureIndex as number } : {}),\n ...(Number.isInteger(record.imageIndex) ? { imageIndex: record.imageIndex as number } : {}),\n ...(Number.isInteger(record.bufferView) ? { bufferView: record.bufferView as number } : {}),\n ...(typeof record.mimeType === 'string' && record.mimeType.trim() ? { mimeType: record.mimeType.trim() } : {}),\n ...(typeof record.uri === 'string' && record.uri.trim() ? { uri: record.uri.trim() } : {}),\n };\n}\n\nfunction readEditorSceneRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? value as Record<string, unknown> : null;\n}\n\nfunction readEditorSceneString(value: unknown): string | null {\n return typeof value === 'string' && value.trim() ? value.trim() : null;\n}\n\nfunction getEditorSceneMaterialUsageGameObjectLabel(\n gameObject: Pick<EditorSceneMaterialGameObject, 'id' | 'name'>,\n): string {\n return gameObject.name?.trim() || gameObject.id;\n}\n\nfunction readEditorSceneMaterialBindingAssetId(binding: EditorSceneMaterialBinding | null | undefined): string {\n return typeof binding?.materialAssetId === 'string' ? binding.materialAssetId.trim() : '';\n}\n\nfunction getEditorSceneMaterialUsageSlotLabel(\n slot: EditorSceneMaterialSlotDescriptor | null | undefined,\n fallback: string,\n): string {\n return slot?.label?.trim()\n || slot?.ownerNodePath?.trim()\n || slot?.slotId?.trim()\n || fallback;\n}\n\ninterface InternalMaterialPickerInput<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n> {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: EditorSceneMaterialAssetOwnershipText;\n}\n\nclass InternalMaterialUsageIndex {\n private readonly byMaterialId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n private readonly byOwnerId = new Map<string, EditorSceneMaterialAssetUsage[]>();\n\n constructor(document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>) {\n for (const usage of collectEditorSceneMaterialAssetReferences(document)) {\n const materialUsages = this.byMaterialId.get(usage.materialAssetId) ?? [];\n materialUsages.push(usage);\n this.byMaterialId.set(usage.materialAssetId, materialUsages);\n const ownerUsages = this.byOwnerId.get(usage.gameObjectId) ?? [];\n ownerUsages.push(usage);\n this.byOwnerId.set(usage.gameObjectId, ownerUsages);\n }\n }\n\n forMaterial(materialAssetId: string): readonly EditorSceneMaterialAssetUsage[] {\n return this.byMaterialId.get(materialAssetId.trim()) ?? [];\n }\n\n forOwner(ownerId: string): readonly EditorSceneMaterialAssetUsage[] {\n return this.byOwnerId.get(ownerId) ?? [];\n }\n}\n\nconst cachedMaterialUsageIndexes = new WeakMap<object, InternalMaterialUsageIndex>();\n\nfunction getCachedMaterialUsageIndex(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n): InternalMaterialUsageIndex {\n let index = cachedMaterialUsageIndexes.get(document as object);\n if (!index) {\n index = new InternalMaterialUsageIndex(document);\n cachedMaterialUsageIndexes.set(document as object, index);\n }\n return index;\n}\n\nfunction getInternalMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nfunction getInternalMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getInternalMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nfunction getInternalMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getInternalMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nfunction createInternalMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: InternalMaterialPickerInput<TMaterialAsset>,\n usageIndex: InternalMaterialUsageIndex | null,\n): EditorSceneMaterialPickerControlOptions {\n const currentAsset = input.currentAsset ?? null;\n const currentOwnership = currentAsset\n ? createInternalMaterialOwnershipView(input.document, currentAsset.id, input.ownershipText, usageIndex)\n : null;\n const currentBaseMeta = currentAsset\n ? getInternalMaterialAssetDisplayMeta(currentAsset, input.displayText)\n : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);\n const currentMeta = currentOwnership\n ? createInternalMaterialPickerMeta(currentBaseMeta, currentOwnership)\n : currentBaseMeta;\n return {\n pickerKind: 'material',\n pickerTitle: input.pickerText.materialPickerTitle,\n actionLabel: input.pickerText.replace,\n copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',\n copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',\n copyActionTooltip: currentAsset\n ? createInternalMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)\n : '',\n placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,\n currentLabel: currentAsset\n ? getInternalMaterialAssetDisplayName(currentAsset, input.displayText)\n : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta,\n ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),\n ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),\n ...(currentOwnership ? { currentOwnership } : {}),\n currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,\n candidates: [{\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n }, ...input.materialAssets.map(materialAsset => {\n const ownership = createInternalMaterialOwnershipView(\n input.document,\n materialAsset.id,\n input.ownershipText,\n usageIndex,\n );\n return {\n label: getInternalMaterialAssetDisplayName(materialAsset, input.displayText),\n value: materialAsset.id,\n meta: createInternalMaterialPickerMeta(\n getInternalMaterialAssetDisplayMeta(materialAsset, input.displayText),\n ownership,\n ),\n kind: 'material' as const,\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),\n ...(ownership ? { ownership } : {}),\n };\n })],\n };\n}\n\nfunction createInternalMaterialOwnershipView(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'> | null | undefined,\n materialAssetId: string,\n text: EditorSceneMaterialAssetOwnershipText | undefined,\n usageIndex: InternalMaterialUsageIndex | null,\n): EditorSceneMaterialAssetOwnershipView | null {\n if (!document || !usageIndex) return null;\n const normalizedMaterialAssetId = materialAssetId.trim();\n const usages = usageIndex.forMaterial(normalizedMaterialAssetId);\n const usageCount = usages.length;\n return {\n materialAssetId: normalizedMaterialAssetId,\n usage: {\n count: usageCount,\n items: usages.map(usage => structuredClone(usage)),\n },\n usageCount,\n used: usageCount > 0,\n shared: usageCount > 1,\n ...(text ? {\n usageLabel: text.formatUsageCount(usageCount),\n editImpactLabel: text.formatEditImpact(usageCount),\n duplicateImpactLabel: text.formatDuplicateImpact(usageCount),\n } : {}),\n };\n}\n\nfunction createInternalMaterialPickerMeta(\n baseMeta: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [baseMeta, ownership?.usageLabel].filter(Boolean).join(' · ');\n}\n\nfunction createInternalMaterialPickerCopyTooltip(\n baseTooltip: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [baseTooltip, ownership?.duplicateImpactLabel].filter(Boolean).join(' · ');\n}\n\nfunction createInternalMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n usageIndex: InternalMaterialUsageIndex,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return (document.scene.materialAssets ?? []).map(materialAsset => {\n const usages = usageIndex.forMaterial(materialAsset.id);\n return {\n id: `material:${materialAsset.id}`,\n assetId: materialAsset.id,\n kind: 'material',\n label: materialAsset.name || materialAsset.id,\n meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n material: {\n id: materialAsset.id,\n name: materialAsset.name || materialAsset.id,\n materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),\n readonly: materialAsset.system?.readonly === true\n || getInternalMaterialAssetDefaultPreset(materialAsset) != null,\n usage: {\n count: usages.length,\n items: usages.map(usage => structuredClone(usage)),\n },\n profile: structuredClone(materialAsset.profile ?? {}) as NonNullable<TMaterialAsset['profile']>,\n },\n placeable: false,\n };\n });\n}\n\nconst materialBindingInternals = {\n createUsageIndex(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'>,\n ): InternalMaterialUsageIndex {\n return new InternalMaterialUsageIndex(document);\n },\n getCachedUsageIndex: getCachedMaterialUsageIndex,\n createPickerControlOptions: createInternalMaterialPickerControlOptions,\n createBrowserAssetItems: createInternalMaterialBrowserAssetItems,\n};\n\nexport default materialBindingInternals;\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { InspectorProperty } from '@fps-games/editor-core';
|
|
2
|
-
import type { EditorSceneInspectorTextureAsset, EditorSceneMaterialAsset, EditorSceneMaterialAssetDisplayText, EditorSceneMaterialAssetFieldInspectorPropertyInput,
|
|
2
|
+
import type { EditorSceneInspectorTextureAsset, EditorSceneMaterialAsset, EditorSceneMaterialAssetDisplayText, EditorSceneMaterialAssetFieldInspectorPropertyInput, EditorSceneMaterialBrowserAssetItem, EditorSceneMaterialDocument, EditorSceneMaterialGameObject, EditorSceneMaterialPickerControlOptions, EditorSceneMaterialPickerText, EditorSceneTextureAssetPreview, EditorSceneTexturePickerControlOptions, EditorSceneTexturePickerText } from './types';
|
|
3
3
|
export declare function getEditorSceneMaterialAssetDefaultPreset(materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined): string | undefined;
|
|
4
4
|
export declare function getEditorSceneMaterialAssetDisplayName(materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>, text: EditorSceneMaterialAssetDisplayText): string;
|
|
5
5
|
export declare function getEditorSceneMaterialAssetDisplayMeta(materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>, text: EditorSceneMaterialAssetDisplayText): string;
|
|
@@ -10,7 +10,7 @@ export declare function createEditorSceneMaterialPickerControlOptions<TMaterialA
|
|
|
10
10
|
pickerText: EditorSceneMaterialPickerText;
|
|
11
11
|
displayText: EditorSceneMaterialAssetDisplayText;
|
|
12
12
|
document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;
|
|
13
|
-
ownershipText?: EditorSceneMaterialAssetOwnershipText;
|
|
13
|
+
ownershipText?: import('./types').EditorSceneMaterialAssetOwnershipText;
|
|
14
14
|
}): EditorSceneMaterialPickerControlOptions;
|
|
15
15
|
export declare function findEditorSceneInspectorTextureAsset(textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined, value: string): EditorSceneInspectorTextureAsset | null;
|
|
16
16
|
export declare function createEditorSceneTextureAssetPreview(texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>): EditorSceneTextureAssetPreview;
|
package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/inspector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX, EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { isReadonlyEditorSceneMaterialAsset, resolveEditorSceneMaterialAssetKind, } from './profile.js';
|
|
1
|
+
import { EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX, EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX, } from './paths.js';
|
|
2
|
+
import { isReadonlyEditorSceneMaterialAsset, } from './profile.js';
|
|
3
|
+
import { default as materialBindingInternals, } from './binding.js';
|
|
5
4
|
export function getEditorSceneMaterialAssetDefaultPreset(materialAsset) {
|
|
6
5
|
return materialAsset?.system?.preset;
|
|
7
6
|
}
|
|
@@ -22,71 +21,7 @@ export function getEditorSceneMaterialAssetDisplayMeta(materialAsset, text) {
|
|
|
22
21
|
return text.formatMaterialMeta(materialAsset.id);
|
|
23
22
|
}
|
|
24
23
|
export function createEditorSceneMaterialPickerControlOptions(input) {
|
|
25
|
-
|
|
26
|
-
const currentOwnership = currentAsset
|
|
27
|
-
? createEditorSceneMaterialPickerOwnership(input.document, currentAsset.id, input.ownershipText)
|
|
28
|
-
: null;
|
|
29
|
-
const currentBaseMeta = currentAsset
|
|
30
|
-
? getEditorSceneMaterialAssetDisplayMeta(currentAsset, input.displayText)
|
|
31
|
-
: (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);
|
|
32
|
-
const currentMeta = currentOwnership
|
|
33
|
-
? createEditorSceneMaterialPickerMeta(currentBaseMeta, currentOwnership)
|
|
34
|
-
: currentBaseMeta;
|
|
35
|
-
return {
|
|
36
|
-
pickerKind: 'material',
|
|
37
|
-
pickerTitle: input.pickerText.materialPickerTitle,
|
|
38
|
-
actionLabel: input.pickerText.replace,
|
|
39
|
-
copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',
|
|
40
|
-
copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',
|
|
41
|
-
copyActionTooltip: currentAsset
|
|
42
|
-
? createEditorSceneMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)
|
|
43
|
-
: '',
|
|
44
|
-
placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,
|
|
45
|
-
currentLabel: currentAsset
|
|
46
|
-
? getEditorSceneMaterialAssetDisplayName(currentAsset, input.displayText)
|
|
47
|
-
: (input.currentValue ? input.currentValue : input.pickerText.inheritNone),
|
|
48
|
-
currentMeta,
|
|
49
|
-
...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),
|
|
50
|
-
...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),
|
|
51
|
-
...(currentOwnership ? { currentOwnership } : {}),
|
|
52
|
-
currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,
|
|
53
|
-
candidates: [
|
|
54
|
-
{
|
|
55
|
-
label: input.pickerText.inheritNone,
|
|
56
|
-
value: '',
|
|
57
|
-
meta: input.pickerText.summaryInherit,
|
|
58
|
-
},
|
|
59
|
-
...input.materialAssets.map((materialAsset) => {
|
|
60
|
-
const ownership = createEditorSceneMaterialPickerOwnership(input.document, materialAsset.id, input.ownershipText);
|
|
61
|
-
return {
|
|
62
|
-
label: getEditorSceneMaterialAssetDisplayName(materialAsset, input.displayText),
|
|
63
|
-
value: materialAsset.id,
|
|
64
|
-
meta: createEditorSceneMaterialPickerMeta(getEditorSceneMaterialAssetDisplayMeta(materialAsset, input.displayText), ownership),
|
|
65
|
-
kind: 'material',
|
|
66
|
-
preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
|
|
67
|
-
...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),
|
|
68
|
-
...(ownership ? { ownership } : {}),
|
|
69
|
-
};
|
|
70
|
-
}),
|
|
71
|
-
],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function createEditorSceneMaterialPickerOwnership(document, materialAssetId, text) {
|
|
75
|
-
if (!document)
|
|
76
|
-
return null;
|
|
77
|
-
return createEditorSceneMaterialAssetOwnershipView(document, materialAssetId, text);
|
|
78
|
-
}
|
|
79
|
-
function createEditorSceneMaterialPickerMeta(baseMeta, ownership) {
|
|
80
|
-
return [
|
|
81
|
-
baseMeta,
|
|
82
|
-
ownership?.usageLabel,
|
|
83
|
-
].filter(Boolean).join(' · ');
|
|
84
|
-
}
|
|
85
|
-
function createEditorSceneMaterialPickerCopyTooltip(baseTooltip, ownership) {
|
|
86
|
-
return [
|
|
87
|
-
baseTooltip,
|
|
88
|
-
ownership?.duplicateImpactLabel,
|
|
89
|
-
].filter(Boolean).join(' · ');
|
|
24
|
+
return materialBindingInternals.createPickerControlOptions(input, input.document ? materialBindingInternals.createUsageIndex(input.document) : null);
|
|
90
25
|
}
|
|
91
26
|
export function findEditorSceneInspectorTextureAsset(textureAssets, value) {
|
|
92
27
|
const normalized = value.trim();
|
|
@@ -138,29 +73,7 @@ function isEditorSceneMaterialTextureAsset(texture) {
|
|
|
138
73
|
return texture.usage !== 'environment';
|
|
139
74
|
}
|
|
140
75
|
export function createEditorSceneMaterialBrowserAssetItems(document) {
|
|
141
|
-
return (document
|
|
142
|
-
const usages = collectEditorSceneMaterialAssetUsages(document, materialAsset.id);
|
|
143
|
-
return {
|
|
144
|
-
id: `material:${materialAsset.id}`,
|
|
145
|
-
assetId: materialAsset.id,
|
|
146
|
-
kind: 'material',
|
|
147
|
-
label: materialAsset.name || materialAsset.id,
|
|
148
|
-
meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),
|
|
149
|
-
preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),
|
|
150
|
-
material: {
|
|
151
|
-
id: materialAsset.id,
|
|
152
|
-
name: materialAsset.name || materialAsset.id,
|
|
153
|
-
materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),
|
|
154
|
-
readonly: materialAsset.system?.readonly === true || getEditorSceneMaterialAssetDefaultPreset(materialAsset) != null,
|
|
155
|
-
usage: {
|
|
156
|
-
count: usages.length,
|
|
157
|
-
items: usages.map(usage => structuredClone(usage)),
|
|
158
|
-
},
|
|
159
|
-
profile: structuredClone(materialAsset.profile ?? {}),
|
|
160
|
-
},
|
|
161
|
-
placeable: false,
|
|
162
|
-
};
|
|
163
|
-
});
|
|
76
|
+
return materialBindingInternals.createBrowserAssetItems(document, materialBindingInternals.createUsageIndex(document));
|
|
164
77
|
}
|
|
165
78
|
export function isEditorSceneMaterialAssetReadonlyForInspector(materialAsset, defaultMaterialAssetIds = []) {
|
|
166
79
|
return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InspectorProperty,\n} from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX,\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n createEditorSceneDuplicateMaterialAssetValue,\n} from './paths';\nimport {\n createEditorSceneMaterialAssetMeta,\n createEditorSceneMaterialAssetPreview,\n} from './preview';\nimport {\n collectEditorSceneMaterialAssetUsages,\n createEditorSceneMaterialAssetOwnershipView,\n} from './binding';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n resolveEditorSceneMaterialAssetKind,\n} from './profile';\nimport type {\n EditorSceneInspectorTextureAsset,\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetFieldInspectorPropertyInput,\n EditorSceneMaterialAssetOwnershipText,\n EditorSceneMaterialAssetOwnershipView,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneTextureAssetPreview,\n EditorSceneTexturePickerControlOptions,\n EditorSceneTexturePickerText,\n} from './types';\n\nexport function getEditorSceneMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nexport function getEditorSceneMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nexport function getEditorSceneMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nexport function createEditorSceneMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(input: {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: EditorSceneMaterialAssetOwnershipText;\n}): EditorSceneMaterialPickerControlOptions {\n const currentAsset = input.currentAsset ?? null;\n const currentOwnership = currentAsset\n ? createEditorSceneMaterialPickerOwnership(input.document, currentAsset.id, input.ownershipText)\n : null;\n const currentBaseMeta = currentAsset\n ? getEditorSceneMaterialAssetDisplayMeta(currentAsset, input.displayText)\n : (input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.summaryInherit);\n const currentMeta = currentOwnership\n ? createEditorSceneMaterialPickerMeta(currentBaseMeta, currentOwnership)\n : currentBaseMeta;\n return {\n pickerKind: 'material',\n pickerTitle: input.pickerText.materialPickerTitle,\n actionLabel: input.pickerText.replace,\n copyActionLabel: currentAsset ? input.pickerText.duplicateForObject : '',\n copyActionValue: currentAsset ? createEditorSceneDuplicateMaterialAssetValue(currentAsset.id) : '',\n copyActionTooltip: currentAsset\n ? createEditorSceneMaterialPickerCopyTooltip(input.pickerText.duplicateForObjectTooltip, currentOwnership)\n : '',\n placeholder: input.currentValue ? input.pickerText.summaryMissingAsset : input.pickerText.inheritNone,\n currentLabel: currentAsset\n ? getEditorSceneMaterialAssetDisplayName(currentAsset, input.displayText)\n : (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta,\n ...(currentOwnership?.usageLabel ? { currentUsageLabel: currentOwnership.usageLabel } : {}),\n ...(currentOwnership?.editImpactLabel ? { currentEditImpactLabel: currentOwnership.editImpactLabel } : {}),\n ...(currentOwnership ? { currentOwnership } : {}),\n currentPreview: currentAsset ? createEditorSceneMaterialAssetPreview(currentAsset.profile) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...input.materialAssets.map((materialAsset) => {\n const ownership = createEditorSceneMaterialPickerOwnership(input.document, materialAsset.id, input.ownershipText);\n return {\n label: getEditorSceneMaterialAssetDisplayName(materialAsset, input.displayText),\n value: materialAsset.id,\n meta: createEditorSceneMaterialPickerMeta(\n getEditorSceneMaterialAssetDisplayMeta(materialAsset, input.displayText),\n ownership,\n ),\n kind: 'material' as const,\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n ...(ownership?.usageLabel ? { usageLabel: ownership.usageLabel } : {}),\n ...(ownership ? { ownership } : {}),\n };\n }),\n ],\n };\n}\n\nfunction createEditorSceneMaterialPickerOwnership(\n document: Pick<EditorSceneMaterialDocument, 'scene' | 'assets'> | null | undefined,\n materialAssetId: string,\n text?: EditorSceneMaterialAssetOwnershipText,\n): EditorSceneMaterialAssetOwnershipView | null {\n if (!document) return null;\n return createEditorSceneMaterialAssetOwnershipView(document, materialAssetId, text);\n}\n\nfunction createEditorSceneMaterialPickerMeta(\n baseMeta: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [\n baseMeta,\n ownership?.usageLabel,\n ].filter(Boolean).join(' · ');\n}\n\nfunction createEditorSceneMaterialPickerCopyTooltip(\n baseTooltip: string,\n ownership: EditorSceneMaterialAssetOwnershipView | null,\n): string {\n return [\n baseTooltip,\n ownership?.duplicateImpactLabel,\n ].filter(Boolean).join(' · ');\n}\n\nexport function findEditorSceneInspectorTextureAsset(\n textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n const normalized = value.trim();\n if (!normalized) return null;\n return textureAssets?.find(texture => texture.url === normalized || texture.id === normalized) ?? null;\n}\n\nexport function createEditorSceneTextureAssetPreview(\n texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>,\n): EditorSceneTextureAssetPreview {\n return {\n kind: 'image',\n url: texture.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\nexport function createEditorSceneTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneInspectorTextureAsset[];\n currentTexture?: EditorSceneInspectorTextureAsset | null;\n currentValue: string;\n pickerText: EditorSceneTexturePickerText;\n candidateValue?: 'assetId' | 'url';\n}): EditorSceneTexturePickerControlOptions {\n const currentTexture = input.currentTexture ?? findEditorSceneInspectorTextureAsset(input.textureAssets, input.currentValue);\n const candidateValue = input.candidateValue ?? 'url';\n const candidateTextures = (input.textureAssets ?? []).filter(isEditorSceneMaterialTextureAsset);\n return {\n pickerKind: 'texture',\n pickerTitle: input.pickerText.texturePickerTitle,\n actionLabel: input.pickerText.replace,\n placeholder: input.pickerText.inheritNone,\n currentLabel: currentTexture?.label ?? (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta: currentTexture?.meta ?? (input.currentValue ? input.currentValue : input.pickerText.summaryInherit),\n currentPreview: currentTexture ? createEditorSceneTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...candidateTextures.map(texture => ({\n label: texture.label,\n value: candidateValue === 'assetId' ? texture.id : texture.url,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createEditorSceneTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction isEditorSceneMaterialTextureAsset(texture: EditorSceneInspectorTextureAsset): boolean {\n if (texture.capabilities?.materialTexture === true) return true;\n if (texture.capabilities?.materialTexture === false) return false;\n return texture.usage !== 'environment';\n}\n\nexport function createEditorSceneMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return (document.scene.materialAssets ?? []).map((materialAsset) => {\n const usages = collectEditorSceneMaterialAssetUsages(document, materialAsset.id);\n return {\n id: `material:${materialAsset.id}`,\n assetId: materialAsset.id,\n kind: 'material',\n label: materialAsset.name || materialAsset.id,\n meta: createEditorSceneMaterialAssetMeta(materialAsset.profile, materialAsset.id),\n preview: createEditorSceneMaterialAssetPreview(materialAsset.profile),\n material: {\n id: materialAsset.id,\n name: materialAsset.name || materialAsset.id,\n materialKind: resolveEditorSceneMaterialAssetKind(materialAsset),\n readonly: materialAsset.system?.readonly === true || getEditorSceneMaterialAssetDefaultPreset(materialAsset) != null,\n usage: {\n count: usages.length,\n items: usages.map(usage => structuredClone(usage)),\n },\n profile: structuredClone(materialAsset.profile ?? {}) as NonNullable<TMaterialAsset['profile']>,\n },\n placeable: false,\n };\n });\n}\n\nexport function isEditorSceneMaterialAssetReadonlyForInspector(\n materialAsset: EditorSceneMaterialAsset | null | undefined,\n defaultMaterialAssetIds: readonly string[] = [],\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);\n}\n\nexport function createEditorSceneMaterialAssetFieldInspectorPropertyInput<\n TDocument,\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: EditorSceneMaterialAssetFieldInspectorPropertyInput<TDocument, TMaterialAsset>,\n): Omit<InspectorProperty<TDocument>, 'validate' | 'coerce'> {\n const pathPrefix = input.pathPrefix ?? EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX;\n return {\n path: `${pathPrefix}${input.materialAsset.id}.${input.fieldPath}`,\n label: input.label,\n valueType: input.valueType,\n control: input.control,\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: input.commitMode,\n order: input.order,\n tooltip: input.tooltip,\n tags: input.tags ?? ['ArtistMaterial', 'MaterialAsset'],\n document: input.document,\n };\n}\n\nexport function isEditorSceneDuplicateMaterialAssetPickerValue(value: unknown): boolean {\n return typeof value === 'string' && value.startsWith(EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/material-binding/inspector.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n InspectorProperty,\n} from '@fps-games/editor-core';\nimport {\n EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX,\n EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX,\n} from './paths';\nimport {\n isReadonlyEditorSceneMaterialAsset,\n} from './profile';\nimport {\n default as materialBindingInternals,\n} from './binding';\nimport type {\n EditorSceneInspectorTextureAsset,\n EditorSceneMaterialAsset,\n EditorSceneMaterialAssetDisplayText,\n EditorSceneMaterialAssetFieldInspectorPropertyInput,\n EditorSceneMaterialBrowserAssetItem,\n EditorSceneMaterialDocument,\n EditorSceneMaterialGameObject,\n EditorSceneMaterialPickerControlOptions,\n EditorSceneMaterialPickerText,\n EditorSceneTextureAssetPreview,\n EditorSceneTexturePickerControlOptions,\n EditorSceneTexturePickerText,\n} from './types';\n\nexport function getEditorSceneMaterialAssetDefaultPreset(\n materialAsset: Pick<EditorSceneMaterialAsset, 'system'> | null | undefined,\n): string | undefined {\n return materialAsset?.system?.preset;\n}\n\nexport function getEditorSceneMaterialAssetDisplayName(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'name' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterial;\n if (preset === 'default-standard') return text.defaultStandardMaterial;\n return materialAsset.name || materialAsset.id;\n}\n\nexport function getEditorSceneMaterialAssetDisplayMeta(\n materialAsset: Pick<EditorSceneMaterialAsset, 'id' | 'profile' | 'system'>,\n text: EditorSceneMaterialAssetDisplayText,\n): string {\n const preset = getEditorSceneMaterialAssetDefaultPreset(materialAsset);\n if (preset === 'default-pbr') return text.defaultMaterialMeta;\n if (preset === 'default-standard') return text.defaultStandardMaterialMeta;\n return text.formatMaterialMeta(materialAsset.id);\n}\n\nexport function createEditorSceneMaterialPickerControlOptions<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(input: {\n materialAssets: readonly TMaterialAsset[];\n currentAsset?: TMaterialAsset | null;\n currentValue: string;\n pickerText: EditorSceneMaterialPickerText;\n displayText: EditorSceneMaterialAssetDisplayText;\n document?: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>;\n ownershipText?: import('./types').EditorSceneMaterialAssetOwnershipText;\n}): EditorSceneMaterialPickerControlOptions {\n return materialBindingInternals.createPickerControlOptions(\n input,\n input.document ? materialBindingInternals.createUsageIndex(input.document) : null,\n );\n}\n\nexport function findEditorSceneInspectorTextureAsset(\n textureAssets: readonly EditorSceneInspectorTextureAsset[] | undefined,\n value: string,\n): EditorSceneInspectorTextureAsset | null {\n const normalized = value.trim();\n if (!normalized) return null;\n return textureAssets?.find(texture => texture.url === normalized || texture.id === normalized) ?? null;\n}\n\nexport function createEditorSceneTextureAssetPreview(\n texture: Pick<EditorSceneInspectorTextureAsset, 'url' | 'label'>,\n): EditorSceneTextureAssetPreview {\n return {\n kind: 'image',\n url: texture.url,\n alt: texture.label,\n fit: 'contain',\n };\n}\n\nexport function createEditorSceneTexturePickerControlOptions(input: {\n textureAssets?: readonly EditorSceneInspectorTextureAsset[];\n currentTexture?: EditorSceneInspectorTextureAsset | null;\n currentValue: string;\n pickerText: EditorSceneTexturePickerText;\n candidateValue?: 'assetId' | 'url';\n}): EditorSceneTexturePickerControlOptions {\n const currentTexture = input.currentTexture ?? findEditorSceneInspectorTextureAsset(input.textureAssets, input.currentValue);\n const candidateValue = input.candidateValue ?? 'url';\n const candidateTextures = (input.textureAssets ?? []).filter(isEditorSceneMaterialTextureAsset);\n return {\n pickerKind: 'texture',\n pickerTitle: input.pickerText.texturePickerTitle,\n actionLabel: input.pickerText.replace,\n placeholder: input.pickerText.inheritNone,\n currentLabel: currentTexture?.label ?? (input.currentValue ? input.currentValue : input.pickerText.inheritNone),\n currentMeta: currentTexture?.meta ?? (input.currentValue ? input.currentValue : input.pickerText.summaryInherit),\n currentPreview: currentTexture ? createEditorSceneTextureAssetPreview(currentTexture) : undefined,\n candidates: [\n {\n label: input.pickerText.inheritNone,\n value: '',\n meta: input.pickerText.summaryInherit,\n },\n ...candidateTextures.map(texture => ({\n label: texture.label,\n value: candidateValue === 'assetId' ? texture.id : texture.url,\n meta: texture.meta ?? texture.id,\n kind: 'texture' as const,\n preview: createEditorSceneTextureAssetPreview(texture),\n })),\n ],\n };\n}\n\nfunction isEditorSceneMaterialTextureAsset(texture: EditorSceneInspectorTextureAsset): boolean {\n if (texture.capabilities?.materialTexture === true) return true;\n if (texture.capabilities?.materialTexture === false) return false;\n return texture.usage !== 'environment';\n}\n\nexport function createEditorSceneMaterialBrowserAssetItems<\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n document: Pick<EditorSceneMaterialDocument<EditorSceneMaterialGameObject, TMaterialAsset>, 'scene' | 'assets'>,\n): Array<EditorSceneMaterialBrowserAssetItem<NonNullable<TMaterialAsset['profile']>>> {\n return materialBindingInternals.createBrowserAssetItems(\n document,\n materialBindingInternals.createUsageIndex(document),\n );\n}\n\nexport function isEditorSceneMaterialAssetReadonlyForInspector(\n materialAsset: EditorSceneMaterialAsset | null | undefined,\n defaultMaterialAssetIds: readonly string[] = [],\n): boolean {\n return isReadonlyEditorSceneMaterialAsset(materialAsset, defaultMaterialAssetIds);\n}\n\nexport function createEditorSceneMaterialAssetFieldInspectorPropertyInput<\n TDocument,\n TMaterialAsset extends EditorSceneMaterialAsset = EditorSceneMaterialAsset,\n>(\n input: EditorSceneMaterialAssetFieldInspectorPropertyInput<TDocument, TMaterialAsset>,\n): Omit<InspectorProperty<TDocument>, 'validate' | 'coerce'> {\n const pathPrefix = input.pathPrefix ?? EDITOR_SCENE_MATERIAL_ASSET_FIELD_PATH_PREFIX;\n return {\n path: `${pathPrefix}${input.materialAsset.id}.${input.fieldPath}`,\n label: input.label,\n valueType: input.valueType,\n control: input.control,\n value: input.value,\n readOnly: false,\n persistence: 'document',\n commitMode: input.commitMode,\n order: input.order,\n tooltip: input.tooltip,\n tags: input.tags ?? ['ArtistMaterial', 'MaterialAsset'],\n document: input.document,\n };\n}\n\nexport function isEditorSceneDuplicateMaterialAssetPickerValue(value: unknown): boolean {\n return typeof value === 'string' && value.startsWith(EDITOR_SCENE_DUPLICATE_MATERIAL_ASSET_VALUE_PREFIX);\n}\n"]}
|
package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts
CHANGED
|
@@ -24,4 +24,11 @@ export type EditorSceneAssetMeshSelectionTarget = {
|
|
|
24
24
|
};
|
|
25
25
|
export declare function createArtistMaterialInspectorSections(document: EditorSceneMaterialDocument, gameObject: EditorSceneMaterialGameObject, nodeKind: EditorSceneNodeKind, context: EditorSceneMaterialInspectorContext | undefined, services: MaterialInspectorServices): InspectorSection<EditorSceneMaterialDocument>[];
|
|
26
26
|
export declare function createEditorSceneAssetMeshInspectorSections(document: EditorSceneMaterialDocument, target: EditorSceneAssetMeshSelectionTarget, context?: EditorSceneMaterialInspectorContext): InspectorSection<EditorSceneMaterialDocument>[];
|
|
27
|
+
declare function createArtistMaterialInspectorSectionsWithCachedUsage(document: EditorSceneMaterialDocument, gameObject: EditorSceneMaterialGameObject, nodeKind: EditorSceneNodeKind, context: EditorSceneMaterialInspectorContext | undefined, services: MaterialInspectorServices): InspectorSection<EditorSceneMaterialDocument>[];
|
|
28
|
+
declare function createEditorSceneAssetMeshInspectorSectionsWithCachedUsage(document: EditorSceneMaterialDocument, target: EditorSceneAssetMeshSelectionTarget, context?: EditorSceneMaterialInspectorContext): InspectorSection<EditorSceneMaterialDocument>[];
|
|
29
|
+
declare const sceneInspectorInternals: {
|
|
30
|
+
createArtistMaterialInspectorSectionsWithCachedUsage: typeof createArtistMaterialInspectorSectionsWithCachedUsage;
|
|
31
|
+
createEditorSceneAssetMeshInspectorSectionsWithCachedUsage: typeof createEditorSceneAssetMeshInspectorSectionsWithCachedUsage;
|
|
32
|
+
};
|
|
33
|
+
export default sceneInspectorInternals;
|
|
27
34
|
//# sourceMappingURL=scene-inspector.d.ts.map
|
package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/scene-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-inspector.d.ts","sourceRoot":"","sources":["../../src/material-binding/scene-inspector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,wBAAwB,CAAC;AAIhC,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,mBAAmB,CAAC;AAc3B,OAAO,EAEL,4CAA4C,EAC5C,4CAA4C,EAC5C,uCAAuC,EACvC,iCAAiC,EAEjC,oCAAoC,EACrC,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAIL,kCAAkC,EAEnC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAEL,8BAA8B,EAC9B,mCAAmC,EACnC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EACjC,MAAM,QAAQ,CAAC;AAIhB,OAAO,KAAK,EACV,2BAA2B,EAC3B,6BAA6B,EAC7B,mCAAmC,EACnC,iCAAiC,EAClC,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,4CAA4C,EAC5C,uCAAuC,EACvC,4CAA4C,EAC5C,iCAAiC,EACjC,kCAAkC,EAClC,8BAA8B,EAC9B,mCAAmC,EACnC,oCAAoC,EACpC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,GACjC,CAAC;AAEF,wBAAgB,0CAA0C,CACxD,QAAQ,EAAE,2BAA2B,EACrC,EAAE,EAAE,MAAM,GACT,mCAAmC,GAAG,IAAI,CAsB5C;AAED,wBAAgB,kCAAkC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,MAAM,WAAW,yBAAyB;IACxC,+BAA+B,EAAE,wCAAwC,CAAC;CAC3E;AAED,KAAK,wCAAwC,GAAG,CAC9C,QAAQ,EAAE,2BAA2B,GAAG,IAAI,EAC5C,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC,KACpG,iBAAiB,CAAC,2BAA2B,CAAC,CAAC;AAEpD,MAAM,MAAM,mCAAmC,GAAG;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,6BAA6B,CAAC;IAC1C,IAAI,EAAE,iCAAiC,CAAC;CACzC,CAAC;AAEF,wBAAgB,qCAAqC,CACnD,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,6BAA6B,EACzC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,mCAAmC,YAAK,EACjD,QAAQ,EAAE,yBAAyB,GAClC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CASjD;AA6ED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,mCAAmC,EAC3C,OAAO,GAAE,mCAAwC,GAChD,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAOjD;AAkDD,iBAAS,oDAAoD,CAC3D,QAAQ,EAAE,2BAA2B,EACrC,UAAU,EAAE,6BAA6B,EACzC,QAAQ,EAAE,mBAAmB,EAC7B,OAAO,EAAE,mCAAmC,YAAK,EACjD,QAAQ,EAAE,yBAAyB,GAClC,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CASjD;AAED,iBAAS,0DAA0D,CACjE,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,mCAAmC,EAC3C,OAAO,GAAE,mCAAwC,GAChD,gBAAgB,CAAC,2BAA2B,CAAC,EAAE,CAOjD;AAED,QAAA,MAAM,uBAAuB;;;CAG5B,CAAC;AAEF,eAAe,uBAAuB,CAAC"}
|
package/node_modules/@fps-games/editor-playable-sdk/dist/material-binding/scene-inspector.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createEditorSceneReadonlyInspectorProperty, } from '../inspector/index.js';
|
|
2
2
|
import { readEditorSceneNodeKind, } from '../document/index.js';
|
|
3
|
-
import { collectEditorSceneChildMaterialSlots, findEditorSceneMaterialAsset, getEditorSceneSlotMaterialBinding, getEditorSceneSlotMaterialBindingPath, getEditorSceneSlotSelectionKey, hasDetectedModelMaterialSlots, parseEditorSceneAssetMeshSelectionId, } from './binding.js';
|
|
3
|
+
import { default as materialBindingInternals, collectEditorSceneChildMaterialSlots, findEditorSceneMaterialAsset, getEditorSceneSlotMaterialBinding, getEditorSceneSlotMaterialBindingPath, getEditorSceneSlotSelectionKey, hasDetectedModelMaterialSlots, parseEditorSceneAssetMeshSelectionId, } from './binding.js';
|
|
4
4
|
import { parseEditorSceneMaterialAssetFieldPath, } from './paths.js';
|
|
5
|
-
import { createArtistMaterialAssetInspectorProperties, createMaterialAssetSelectorInspectorProperty, createMaterialAssetPickerControlOptions, createTexturePickerControlOptions, findEditorSceneInspectorTextureAssetFromContext as findEditorSceneInspectorTextureAsset, readArtistMaterialTexturePickerValue, } from './asset-fields.js';
|
|
6
|
-
import {
|
|
5
|
+
import { default as materialAssetFieldInternals, createArtistMaterialAssetInspectorProperties, createMaterialAssetSelectorInspectorProperty, createMaterialAssetPickerControlOptions, createTexturePickerControlOptions, findEditorSceneInspectorTextureAssetFromContext as findEditorSceneInspectorTextureAsset, readArtistMaterialTexturePickerValue, } from './asset-fields.js';
|
|
6
|
+
import { default as slotInspectorInternals, createArtistMaterialBindingSummary, createChildMaterialBindingSummary, formatEditorSceneMaterialSlotLabel, hasReadonlyEditorSceneMaterialSlotReimportIssues, } from './slot-inspector.js';
|
|
7
7
|
import { MATERIAL_LANGUAGE_OPTIONS, getArtistMaterialInspectorText, readArtistMaterialInspectorLanguage, } from './text.js';
|
|
8
8
|
import { resolveEditorSceneMaterialSlotReimportDiff, } from './reimport.js';
|
|
9
9
|
export { createArtistMaterialAssetInspectorProperties, createMaterialAssetPickerControlOptions, createMaterialAssetSelectorInspectorProperty, createTexturePickerControlOptions, formatEditorSceneMaterialSlotLabel, getArtistMaterialInspectorText, readArtistMaterialInspectorLanguage, readArtistMaterialTexturePickerValue, };
|
|
@@ -38,6 +38,9 @@ export function isEditorSceneAssetMeshWritablePath(path) {
|
|
|
38
38
|
|| parseEditorSceneMaterialAssetFieldPath(path) != null;
|
|
39
39
|
}
|
|
40
40
|
export function createArtistMaterialInspectorSections(document, gameObject, nodeKind, context = {}, services) {
|
|
41
|
+
return createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, materialBindingInternals.createUsageIndex(document));
|
|
42
|
+
}
|
|
43
|
+
function createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, usageIndex) {
|
|
41
44
|
const sections = [];
|
|
42
45
|
const language = readArtistMaterialInspectorLanguage(gameObject);
|
|
43
46
|
const text = getArtistMaterialInspectorText(language);
|
|
@@ -57,14 +60,14 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
|
|
|
57
60
|
collapsedByDefault: false,
|
|
58
61
|
properties: [
|
|
59
62
|
createMaterialLanguageInspectorProperty(nodeKind, text, language, 0, services),
|
|
60
|
-
|
|
63
|
+
materialAssetFieldInternals.createSelectorInspectorPropertyWithUsage(document, nodeKind, {
|
|
61
64
|
path: 'overrides.materialBinding.materialAssetId',
|
|
62
65
|
label: text.materialCard,
|
|
63
66
|
value: rootBinding?.materialAssetId ?? '',
|
|
64
67
|
order: 1,
|
|
65
68
|
text,
|
|
66
69
|
currentAsset: rootAsset,
|
|
67
|
-
}),
|
|
70
|
+
}, usageIndex),
|
|
68
71
|
...createArtistMaterialAssetInspectorProperties(document, rootAsset, text, 10, context),
|
|
69
72
|
],
|
|
70
73
|
});
|
|
@@ -72,8 +75,8 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
|
|
|
72
75
|
const slotProperties = nodeKind === 'primitive'
|
|
73
76
|
? []
|
|
74
77
|
: hasDetectedSlots || hasReadonlyReimportConflicts
|
|
75
|
-
?
|
|
76
|
-
:
|
|
78
|
+
? slotInspectorInternals.createReadonlyMaterialSlotListInspectorPropertiesWithUsage(document, gameObject, text, usageIndex)
|
|
79
|
+
: slotInspectorInternals.createChildMaterialBindingInspectorPropertiesWithUsage(document, gameObject, nodeKind, context, usageIndex);
|
|
77
80
|
if (slotProperties.length > 0) {
|
|
78
81
|
sections.push({
|
|
79
82
|
id: 'artistMaterialSlots',
|
|
@@ -89,20 +92,23 @@ export function createArtistMaterialInspectorSections(document, gameObject, node
|
|
|
89
92
|
return sections;
|
|
90
93
|
}
|
|
91
94
|
export function createEditorSceneAssetMeshInspectorSections(document, target, context = {}) {
|
|
95
|
+
return createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, materialBindingInternals.createUsageIndex(document));
|
|
96
|
+
}
|
|
97
|
+
function createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, usageIndex) {
|
|
92
98
|
const gameObject = target.gameObject;
|
|
93
99
|
const nodeKind = readEditorSceneNodeKind(gameObject);
|
|
94
100
|
const text = getArtistMaterialInspectorText(readArtistMaterialInspectorLanguage(gameObject));
|
|
95
101
|
const binding = getEditorSceneSlotMaterialBinding(gameObject, target.slot);
|
|
96
102
|
const materialAsset = findEditorSceneMaterialAsset(document, binding?.materialAssetId ?? '');
|
|
97
103
|
const properties = [
|
|
98
|
-
|
|
104
|
+
materialAssetFieldInternals.createSelectorInspectorPropertyWithUsage(document, nodeKind, {
|
|
99
105
|
path: target.materialBindingPath,
|
|
100
106
|
label: target.label,
|
|
101
107
|
value: binding?.materialAssetId ?? '',
|
|
102
108
|
order: 0,
|
|
103
109
|
text,
|
|
104
110
|
currentAsset: materialAsset,
|
|
105
|
-
}),
|
|
111
|
+
}, usageIndex),
|
|
106
112
|
...createArtistMaterialAssetInspectorProperties(document, materialAsset, text, 10, context),
|
|
107
113
|
];
|
|
108
114
|
return [
|
|
@@ -130,6 +136,17 @@ export function createEditorSceneAssetMeshInspectorSections(document, target, co
|
|
|
130
136
|
},
|
|
131
137
|
];
|
|
132
138
|
}
|
|
139
|
+
function createArtistMaterialInspectorSectionsWithCachedUsage(document, gameObject, nodeKind, context = {}, services) {
|
|
140
|
+
return createArtistMaterialInspectorSectionsWithUsage(document, gameObject, nodeKind, context, services, materialBindingInternals.getCachedUsageIndex(document));
|
|
141
|
+
}
|
|
142
|
+
function createEditorSceneAssetMeshInspectorSectionsWithCachedUsage(document, target, context = {}) {
|
|
143
|
+
return createEditorSceneAssetMeshInspectorSectionsWithUsage(document, target, context, materialBindingInternals.getCachedUsageIndex(document));
|
|
144
|
+
}
|
|
145
|
+
const sceneInspectorInternals = {
|
|
146
|
+
createArtistMaterialInspectorSectionsWithCachedUsage,
|
|
147
|
+
createEditorSceneAssetMeshInspectorSectionsWithCachedUsage,
|
|
148
|
+
};
|
|
149
|
+
export default sceneInspectorInternals;
|
|
133
150
|
function createMaterialLanguageInspectorProperty(nodeKind, text, language, order, services) {
|
|
134
151
|
return services.createDocumentInspectorProperty(null, nodeKind, {
|
|
135
152
|
path: 'metadata.artistMaterialInspectorLanguage',
|