@fps-games/editor 0.1.5-beta.3 → 0.1.5-beta.5
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 +15 -15
- package/dist/local-editor-harness.d.ts.map +1 -1
- package/dist/local-editor-harness.js +10 -13
- package/dist/local-editor-harness.js.map +1 -1
- package/node_modules/@fps-games/babylon-renderer/package.json +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.js +12 -6
- package/node_modules/@fps-games/editor-babylon/dist/main-camera-preview.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js +10 -7
- package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.d.ts +12 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.d.ts.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.js +97 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection-source-owner-path.js.map +1 -0
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +1 -5
- package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/projection.js +81 -39
- package/node_modules/@fps-games/editor-babylon/dist/projection.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 +88 -7
- package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-solver.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-solver.js +16 -1
- package/node_modules/@fps-games/editor-babylon/dist/transform-solver.js.map +1 -1
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +4 -0
- package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-babylon/package.json +5 -5
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js +6 -2
- package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-hierarchy-attach-dialog.js.map +1 -1
- package/node_modules/@fps-games/editor-browser/package.json +3 -3
- package/node_modules/@fps-games/editor-core/dist/transform-gizmo.d.ts +34 -5
- package/node_modules/@fps-games/editor-core/dist/transform-gizmo.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-math.d.ts +15 -22
- package/node_modules/@fps-games/editor-core/dist/transform-math.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-math.js +74 -4
- package/node_modules/@fps-games/editor-core/dist/transform-math.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-operation-policy.d.ts +14 -0
- package/node_modules/@fps-games/editor-core/dist/transform-operation-policy.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-operation-policy.js +16 -0
- package/node_modules/@fps-games/editor-core/dist/transform-operation-policy.js.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-operations.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-core/dist/transform-operations.js +9 -5
- package/node_modules/@fps-games/editor-core/dist/transform-operations.js.map +1 -1
- package/node_modules/@fps-games/editor-core/package.json +2 -2
- package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/payload.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/payload.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/types.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-bridge/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js +3 -11
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/document.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js +5 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/asset-placement/placement.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/commands/transform.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/commands/transform.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/commands/transform.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/commands/types.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/commands/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/core-contracts/index.d.ts +2 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/core-contracts/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/core-contracts/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/core-contracts/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts +9 -2
- package/node_modules/@fps-games/editor-playable-sdk/dist/document/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js +40 -3
- package/node_modules/@fps-games/editor-playable-sdk/dist/inspector/document-sections.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js +5 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/field-patch.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js +49 -32
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/reducer.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js +10 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/transform.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/types.d.ts +3 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/mutation/types.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js +2 -7
- package/node_modules/@fps-games/editor-playable-sdk/dist/runtime-preview/nodes.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js +12 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/serialized-property/descriptors.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.js +13 -10
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/hierarchy.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/index.d.ts +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/index.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/index.js +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/index.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.d.ts +6 -5
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.js +35 -36
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/patches.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/transform.d.ts +16 -4
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/transform.d.ts.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/transform.js +64 -9
- package/node_modules/@fps-games/editor-playable-sdk/dist/session/transform.js.map +1 -1
- package/node_modules/@fps-games/editor-playable-sdk/package.json +3 -3
- package/node_modules/@fps-games/editor-protocol/package.json +1 -1
- package/package.json +8 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-camera-preview.d.ts","sourceRoot":"","sources":["../src/main-camera-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qCAAqC,EACrC,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"main-camera-preview.d.ts","sourceRoot":"","sources":["../src/main-camera-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qCAAqC,EACrC,2BAA2B,EAC3B,gCAAgC,EACjC,MAAM,cAAc,CAAC;AAStB,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,SAAS,CAAC,EAAE,gCAAgC,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,EAAE,qCAAqC,GAAG,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,yCAAyC;IACxD,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACpD,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,aAAa,CAAC;CAC7B;AAED,MAAM,WAAW,kCAAkC;IACjD,QAAQ,IAAI,OAAO,CAAC;IACpB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC;IAC3E,IAAI,CAAC,GAAG,EAAE,2BAA2B,GAAG,IAAI,GAAG,IAAI,CAAC;IACpD,OAAO,IAAI,IAAI,CAAC;CACjB;AAgBD,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,yCAAyC,GACjD,kCAAkC,CAoIpC;AAED,wBAAgB,mDAAmD,CACjE,IAAI,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACnD,2BAA2B,GAAG,IAAI,CAUpC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { applyBabylonEditorProjectionCameraRig } from './projection.js';
|
|
2
|
+
import { cloneEditorTransformSnapshot, decomposeEditorTransformMatrix, isEditorTransformMatrixSnapshot, readEditorTransformPosition, } from '@fps-games/editor-core';
|
|
2
3
|
const DEFAULT_MAIN_CAMERA_PREVIEW_SETTINGS = {
|
|
3
4
|
projection: 'orthographic',
|
|
4
5
|
alpha: 3.9269908169872414,
|
|
@@ -74,7 +75,7 @@ export function createBabylonMainCameraPreviewController(options) {
|
|
|
74
75
|
};
|
|
75
76
|
const target = rig?.target ?? settings.targetOffset ?? { x: 0, y: 0, z: 0 };
|
|
76
77
|
if (rig?.transform) {
|
|
77
|
-
const transform = rig.transform;
|
|
78
|
+
const transform = readMainCameraPreviewTrsTransform(rig.transform);
|
|
78
79
|
camera.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
|
|
79
80
|
if (camera.rotationQuaternion)
|
|
80
81
|
camera.rotationQuaternion = null;
|
|
@@ -145,16 +146,21 @@ export function createBabylonMainCameraPreviewRigFromProjectionNode(node) {
|
|
|
145
146
|
return {
|
|
146
147
|
...(node.transform
|
|
147
148
|
? {
|
|
148
|
-
transform:
|
|
149
|
-
position: { ...node.transform.position },
|
|
150
|
-
rotation: { ...node.transform.rotation },
|
|
151
|
-
...(node.transform.scale ? { scale: { ...node.transform.scale } } : {}),
|
|
152
|
-
},
|
|
149
|
+
transform: cloneEditorTransformSnapshot(node.transform),
|
|
153
150
|
}
|
|
154
151
|
: {}),
|
|
155
152
|
...(node.camera ? { settings: { ...node.camera } } : {}),
|
|
156
153
|
};
|
|
157
154
|
}
|
|
155
|
+
function readMainCameraPreviewTrsTransform(transform) {
|
|
156
|
+
if (!isEditorTransformMatrixSnapshot(transform))
|
|
157
|
+
return transform;
|
|
158
|
+
return decomposeEditorTransformMatrix(transform.matrix) ?? {
|
|
159
|
+
position: readEditorTransformPosition(transform),
|
|
160
|
+
rotation: { x: 0, y: 0, z: 0 },
|
|
161
|
+
scale: { x: 1, y: 1, z: 1 },
|
|
162
|
+
};
|
|
163
|
+
}
|
|
158
164
|
function createOrbitPosition(Vector3, target, settings) {
|
|
159
165
|
const sinBeta = Math.sin(settings.beta);
|
|
160
166
|
return new Vector3(target.x + settings.radius * Math.cos(settings.alpha) * sinBeta, target.y + settings.radius * Math.cos(settings.beta), target.z + settings.radius * Math.sin(settings.alpha) * sinBeta);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main-camera-preview.js","sourceRoot":"","sources":["../src/main-camera-preview.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qCAAqC,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"main-camera-preview.js","sourceRoot":"","sources":["../src/main-camera-preview.ts"],"names":[],"mappings":"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"}
|
package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-asset-container-importer.d.ts","sourceRoot":"","sources":["../src/projection-asset-container-importer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oCAAoC,EACpC,+BAA+B,EAEhC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"projection-asset-container-importer.d.ts","sourceRoot":"","sources":["../src/projection-asset-container-importer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oCAAoC,EACpC,+BAA+B,EAEhC,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,wCAAwC;IACvD,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,wBAAwB,CAAC,EAAE,CACzB,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,EAC7C,cAAc,CAAC,EAAE,OAAO,EACxB,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KACrC,kDAAkD,CAAC;CACzD;AAED,MAAM,WAAW,kDAAkD;IACjE,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC;CAC7B;AAED,MAAM,MAAM,0CAA0C,GAClD;IACE,IAAI,EAAE,sBAAsB,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,wBAAwB,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;IAC9C,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;CAC/C,GACD;IACE,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,oCAAoC,CAAC;IAC9C,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEN,MAAM,WAAW,8CAA8C;IAC7D,aAAa,CAAC,OAAO,EAAE,oCAAoC,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC;IAChH,eAAe,CAAC,CAAC,OAAO,EAAE,oCAAoC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IAChI,iBAAiB,CAAC,CAAC,OAAO,EAAE,oCAAoC,GAAG,OAAO,CAAC;IAC3E,kBAAkB,CAAC,CAAC,KAAK,EAAE;QACzB,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,oCAAoC,CAAC;KAC/C,GAAG,MAAM,CAAC;IACX,OAAO,CAAC,CAAC,KAAK,EAAE,0CAA0C,GAAG,IAAI,CAAC;CACnE;AAID,wBAAgB,6CAA6C,CAC3D,OAAO,EAAE,8CAA8C,GACtD,+BAA+B,CA4BjC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { assignProjectionSourceNodeMetadata, createProjectionSourceNameMapper, } from './projection-source-owner-path.js';
|
|
1
2
|
export function createBabylonAssetContainerProjectionImporter(options) {
|
|
2
3
|
const sceneCaches = new WeakMap();
|
|
3
4
|
return async (context) => {
|
|
@@ -13,9 +14,10 @@ export function createBabylonAssetContainerProjectionImporter(options) {
|
|
|
13
14
|
const doNotInstantiate = options.shouldCloneMeshes?.(context)
|
|
14
15
|
?? hasProjectionSlotMaterialProfiles(context);
|
|
15
16
|
options.onEvent?.({ type: 'instantiate', cacheKey, context, doNotInstantiate });
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
const sourceNameByInstanceName = new Map();
|
|
18
|
+
const entries = container.instantiateModelsToScene?.(createProjectionSourceNameMapper(sourceNameByInstanceName, sourceName => options.createInstanceName?.({ sourceName, cacheKey, context })
|
|
19
|
+
?? `${context.node.id}.projectionAsset.${sourceName}`), false, { doNotInstantiate });
|
|
20
|
+
return entries ? collectProjectionImportResult(entries, sourceNameByInstanceName) : null;
|
|
19
21
|
};
|
|
20
22
|
}
|
|
21
23
|
function getProjectionContainerSceneCache(sceneCaches, scene) {
|
|
@@ -83,12 +85,12 @@ function addUniqueSceneResources(scene, existing, resources, addResource) {
|
|
|
83
85
|
addResource.call(scene, resource);
|
|
84
86
|
}
|
|
85
87
|
}
|
|
86
|
-
function collectProjectionImportResult(entries) {
|
|
88
|
+
function collectProjectionImportResult(entries, sourceNameByInstanceName) {
|
|
87
89
|
const meshes = [];
|
|
88
90
|
const transformNodes = [];
|
|
89
91
|
const seen = new Set();
|
|
90
92
|
for (const rootNode of entries.rootNodes ?? []) {
|
|
91
|
-
collectProjectionNode(rootNode, seen, meshes, transformNodes);
|
|
93
|
+
collectProjectionNode(rootNode, sourceNameByInstanceName, seen, meshes, transformNodes);
|
|
92
94
|
}
|
|
93
95
|
return {
|
|
94
96
|
meshes,
|
|
@@ -96,10 +98,11 @@ function collectProjectionImportResult(entries) {
|
|
|
96
98
|
animationGroups: entries.animationGroups ?? [],
|
|
97
99
|
};
|
|
98
100
|
}
|
|
99
|
-
function collectProjectionNode(node, seen, meshes, transformNodes) {
|
|
101
|
+
function collectProjectionNode(node, sourceNameByInstanceName, seen, meshes, transformNodes) {
|
|
100
102
|
if (!node || seen.has(node))
|
|
101
103
|
return;
|
|
102
104
|
seen.add(node);
|
|
105
|
+
assignProjectionSourceNodeMetadata(node, sourceNameByInstanceName);
|
|
103
106
|
if (isProjectionMeshLike(node)) {
|
|
104
107
|
meshes.push(node);
|
|
105
108
|
}
|
|
@@ -107,7 +110,7 @@ function collectProjectionNode(node, seen, meshes, transformNodes) {
|
|
|
107
110
|
transformNodes.push(node);
|
|
108
111
|
}
|
|
109
112
|
for (const child of readProjectionNodeChildren(node)) {
|
|
110
|
-
collectProjectionNode(child, seen, meshes, transformNodes);
|
|
113
|
+
collectProjectionNode(child, sourceNameByInstanceName, seen, meshes, transformNodes);
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
function readProjectionNodeChildren(node) {
|
package/node_modules/@fps-games/editor-babylon/dist/projection-asset-container-importer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection-asset-container-importer.js","sourceRoot":"","sources":["../src/projection-asset-container-importer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"projection-asset-container-importer.js","sourceRoot":"","sources":["../src/projection-asset-container-importer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const PROJECTION_SOURCE_NODE_METADATA_KEY = "editorProjectionSourceNode";
|
|
2
|
+
export type ProjectionSourceNodeMetadata = {
|
|
3
|
+
sourceName: string;
|
|
4
|
+
};
|
|
5
|
+
export type ProjectionOwnerPathNormalizeContext = {
|
|
6
|
+
projectionNodeId?: string | null;
|
|
7
|
+
};
|
|
8
|
+
export declare function createProjectionSourceNameMapper(sourceNameByInstanceName: Map<string, string>, createInstanceName: (sourceName: string) => string): (sourceName: string) => string;
|
|
9
|
+
export declare function assignProjectionSourceNodeMetadata(node: unknown, sourceNameByInstanceName: ReadonlyMap<string, string>): void;
|
|
10
|
+
export declare function readProjectionSourceNodeSegment(node: unknown): string | null;
|
|
11
|
+
export declare function normalizeProjectionOwnerNodePath(path: string, context?: ProjectionOwnerPathNormalizeContext): string;
|
|
12
|
+
//# sourceMappingURL=projection-source-owner-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-source-owner-path.d.ts","sourceRoot":"","sources":["../src/projection-source-owner-path.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mCAAmC,+BAA+B,CAAC;AAEhF,MAAM,MAAM,4BAA4B,GAAG;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF,wBAAgB,gCAAgC,CAC9C,wBAAwB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7C,kBAAkB,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GACjD,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAUhC;AAED,wBAAgB,kCAAkC,CAChD,IAAI,EAAE,OAAO,EACb,wBAAwB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GACpD,IAAI,CASN;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ5E;AAED,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,mCAAwC,GAChD,MAAM,CASR"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export const PROJECTION_SOURCE_NODE_METADATA_KEY = 'editorProjectionSourceNode';
|
|
2
|
+
export function createProjectionSourceNameMapper(sourceNameByInstanceName, createInstanceName) {
|
|
3
|
+
return (sourceName) => {
|
|
4
|
+
const instanceName = createInstanceName(sourceName);
|
|
5
|
+
const sourceSegment = normalizeProjectionSourceName(sourceName);
|
|
6
|
+
const instanceSegment = normalizeProjectionInstanceName(instanceName);
|
|
7
|
+
if (sourceSegment && instanceSegment) {
|
|
8
|
+
sourceNameByInstanceName.set(instanceSegment, sourceSegment);
|
|
9
|
+
}
|
|
10
|
+
return instanceName;
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function assignProjectionSourceNodeMetadata(node, sourceNameByInstanceName) {
|
|
14
|
+
if (!node || typeof node !== 'object')
|
|
15
|
+
return;
|
|
16
|
+
const sourceName = resolveProjectionSourceNameForNode(node, sourceNameByInstanceName);
|
|
17
|
+
if (!sourceName)
|
|
18
|
+
return;
|
|
19
|
+
const record = node;
|
|
20
|
+
record.metadata = {
|
|
21
|
+
...(readProjectionMetadataObject(record.metadata) ?? {}),
|
|
22
|
+
[PROJECTION_SOURCE_NODE_METADATA_KEY]: { sourceName },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function readProjectionSourceNodeSegment(node) {
|
|
26
|
+
if (!node || typeof node !== 'object')
|
|
27
|
+
return null;
|
|
28
|
+
const metadata = readProjectionMetadataObject(node.metadata);
|
|
29
|
+
const sourceMetadata = readProjectionMetadataObject(metadata?.[PROJECTION_SOURCE_NODE_METADATA_KEY]);
|
|
30
|
+
const sourceName = typeof sourceMetadata?.sourceName === 'string'
|
|
31
|
+
? normalizeProjectionSourceName(sourceMetadata.sourceName)
|
|
32
|
+
: '';
|
|
33
|
+
return sourceName || null;
|
|
34
|
+
}
|
|
35
|
+
export function normalizeProjectionOwnerNodePath(path, context = {}) {
|
|
36
|
+
const segments = path
|
|
37
|
+
.split('/')
|
|
38
|
+
.map(segment => normalizeProjectionOwnerPathSegment(segment, context))
|
|
39
|
+
.filter(Boolean);
|
|
40
|
+
while (segments.length > 0 && isSyntheticProjectionOwnerRootSegment(segments[0])) {
|
|
41
|
+
segments.shift();
|
|
42
|
+
}
|
|
43
|
+
return segments.join('/');
|
|
44
|
+
}
|
|
45
|
+
function resolveProjectionSourceNameForNode(node, sourceNameByInstanceName) {
|
|
46
|
+
for (const candidate of readProjectionNodeInstanceNameCandidates(node)) {
|
|
47
|
+
const sourceName = sourceNameByInstanceName.get(candidate);
|
|
48
|
+
if (sourceName)
|
|
49
|
+
return sourceName;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
function readProjectionNodeInstanceNameCandidates(node) {
|
|
54
|
+
const candidates = [
|
|
55
|
+
node.name,
|
|
56
|
+
node.id,
|
|
57
|
+
];
|
|
58
|
+
const names = [];
|
|
59
|
+
for (const candidate of candidates) {
|
|
60
|
+
const normalized = normalizeProjectionInstanceName(candidate);
|
|
61
|
+
if (normalized && !names.includes(normalized))
|
|
62
|
+
names.push(normalized);
|
|
63
|
+
}
|
|
64
|
+
return names;
|
|
65
|
+
}
|
|
66
|
+
function normalizeProjectionSourceName(value) {
|
|
67
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
68
|
+
}
|
|
69
|
+
function normalizeProjectionInstanceName(value) {
|
|
70
|
+
return typeof value === 'string' ? value.trim() : '';
|
|
71
|
+
}
|
|
72
|
+
function normalizeProjectionOwnerPathSegment(segment, context) {
|
|
73
|
+
const withoutLeadingNamespace = stripProjectionOwnerPathNamespace(segment.trim());
|
|
74
|
+
const withoutInstancePrefix = stripProjectionInstancePrefix(withoutLeadingNamespace, context);
|
|
75
|
+
return stripProjectionOwnerPathNamespace(withoutInstancePrefix);
|
|
76
|
+
}
|
|
77
|
+
function stripProjectionOwnerPathNamespace(segment) {
|
|
78
|
+
return segment.includes(':') ? segment.slice(segment.lastIndexOf(':') + 1) : segment;
|
|
79
|
+
}
|
|
80
|
+
function stripProjectionInstancePrefix(segment, context) {
|
|
81
|
+
const projectionNodeId = typeof context.projectionNodeId === 'string'
|
|
82
|
+
? context.projectionNodeId.trim()
|
|
83
|
+
: '';
|
|
84
|
+
if (!projectionNodeId)
|
|
85
|
+
return segment;
|
|
86
|
+
const prefix = `${projectionNodeId}.projectionAsset.`;
|
|
87
|
+
return segment.startsWith(prefix) ? segment.slice(prefix.length) : segment;
|
|
88
|
+
}
|
|
89
|
+
function isSyntheticProjectionOwnerRootSegment(segment) {
|
|
90
|
+
return segment === '__root__';
|
|
91
|
+
}
|
|
92
|
+
function readProjectionMetadataObject(value) {
|
|
93
|
+
return value && typeof value === 'object' && !Array.isArray(value)
|
|
94
|
+
? value
|
|
95
|
+
: null;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=projection-source-owner-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projection-source-owner-path.js","sourceRoot":"","sources":["../src/projection-source-owner-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,11 +6,7 @@ export interface BabylonEditorProjectionVec2 {
|
|
|
6
6
|
x: number;
|
|
7
7
|
y: number;
|
|
8
8
|
}
|
|
9
|
-
export
|
|
10
|
-
position: BabylonEditorProjectionVec3;
|
|
11
|
-
rotation: BabylonEditorProjectionVec3;
|
|
12
|
-
scale?: BabylonEditorProjectionVec3;
|
|
13
|
-
}
|
|
9
|
+
export type BabylonEditorProjectionTransform = EditorTransformSnapshot;
|
|
14
10
|
export interface BabylonEditorProjectionAssetTransform {
|
|
15
11
|
position?: BabylonEditorProjectionVec3;
|
|
16
12
|
rotation?: BabylonEditorProjectionVec3;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { combineEditorTransforms, toEditorLocalTransformFromWorld, } from '@fps-games/editor-core';
|
|
1
|
+
import { cloneEditorTransformMatrix, combineEditorTransforms, createIdentityEditorTransformMatrix, createEditorTransformMatrixSnapshot, isEditorTransformMatrixSnapshot, readEditorTransformPosition, toEditorLocalTransformFromWorld, } from '@fps-games/editor-core';
|
|
2
2
|
import { applyBabylonDefaultOutline } from '@fps-games/babylon-renderer';
|
|
3
3
|
import { applyArtistMaterialProfileToRuntimeMaterial } from './material-property-adapter.js';
|
|
4
4
|
import { pickBabylonProjectionNodeIdAt, resolveBabylonPickSelectionNodeId, resolveBabylonProjectionNodeId, } from './projection-pick-resolver.js';
|
|
5
|
+
import { normalizeProjectionOwnerNodePath, readProjectionSourceNodeSegment, } from './projection-source-owner-path.js';
|
|
5
6
|
const LARGE_SELECTION_EDGE_LIMIT = 200;
|
|
7
|
+
const PROJECTION_LOCAL_MATRIX_METADATA_KEY = 'editorLocalTransformMatrix';
|
|
6
8
|
const ASSET_MESH_SELECTION_SEPARATOR = '::assetMesh::';
|
|
7
9
|
function requireBabylonCtor(value, name) {
|
|
8
10
|
if (!value)
|
|
@@ -362,7 +364,7 @@ function scaleVec3(value, factor) {
|
|
|
362
364
|
};
|
|
363
365
|
}
|
|
364
366
|
function averagePositions(transforms) {
|
|
365
|
-
const sum = transforms.reduce((current, transform) => addVec3(current, transform
|
|
367
|
+
const sum = transforms.reduce((current, transform) => addVec3(current, readEditorTransformPosition(transform)), { x: 0, y: 0, z: 0 });
|
|
366
368
|
return scaleVec3(sum, 1 / transforms.length);
|
|
367
369
|
}
|
|
368
370
|
function getProjectionSelectionBounds(projections, nodeIds) {
|
|
@@ -416,9 +418,10 @@ function readProjectionBounds(root) {
|
|
|
416
418
|
};
|
|
417
419
|
}
|
|
418
420
|
const transform = readProjectionTransform(root);
|
|
421
|
+
const position = readEditorTransformPosition(transform);
|
|
419
422
|
return {
|
|
420
|
-
min:
|
|
421
|
-
max:
|
|
423
|
+
min: position,
|
|
424
|
+
max: position,
|
|
422
425
|
};
|
|
423
426
|
}
|
|
424
427
|
export function readProjectionTransform(node) {
|
|
@@ -434,6 +437,9 @@ function readProjectionWorldTransform(node, seen = new Set()) {
|
|
|
434
437
|
return combineEditorTransforms(parentWorld, local) ?? local;
|
|
435
438
|
}
|
|
436
439
|
function readProjectionLocalTransform(node) {
|
|
440
|
+
const matrix = readProjectionLocalMatrixTransform(node);
|
|
441
|
+
if (matrix)
|
|
442
|
+
return matrix;
|
|
437
443
|
const rotation = node?.rotationQuaternion?.toEulerAngles?.() ?? node?.rotation;
|
|
438
444
|
return {
|
|
439
445
|
position: readVector3(node?.position, { x: 0, y: 0, z: 0 }),
|
|
@@ -441,6 +447,19 @@ function readProjectionLocalTransform(node) {
|
|
|
441
447
|
scale: readVector3(node?.scaling, { x: 1, y: 1, z: 1 }),
|
|
442
448
|
};
|
|
443
449
|
}
|
|
450
|
+
function readProjectionLocalMatrixTransform(node) {
|
|
451
|
+
const metadata = readProjectionObject(node?.metadata);
|
|
452
|
+
const metadataMatrix = metadata?.[PROJECTION_LOCAL_MATRIX_METADATA_KEY];
|
|
453
|
+
if (Array.isArray(metadataMatrix)) {
|
|
454
|
+
const transform = createEditorTransformMatrixSnapshot(metadataMatrix);
|
|
455
|
+
if (transform)
|
|
456
|
+
return transform;
|
|
457
|
+
}
|
|
458
|
+
const pivotMatrix = node?._usePivotMatrix ? node?._pivotMatrix?.asArray?.() : null;
|
|
459
|
+
return Array.isArray(pivotMatrix) || ArrayBuffer.isView(pivotMatrix)
|
|
460
|
+
? createEditorTransformMatrixSnapshot(Array.from(pivotMatrix))
|
|
461
|
+
: null;
|
|
462
|
+
}
|
|
444
463
|
function createProjectionRoot(babylon, scene, node) {
|
|
445
464
|
const TransformNode = babylon.TransformNode;
|
|
446
465
|
if (!TransformNode)
|
|
@@ -539,9 +558,9 @@ function attachImportedProjectionResult(options, node, asset, projection, result
|
|
|
539
558
|
for (const mesh of result.meshes ?? []) {
|
|
540
559
|
mesh.isPickable = true;
|
|
541
560
|
applyProjectionRenderingToMesh(node, mesh);
|
|
542
|
-
const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot);
|
|
561
|
+
const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);
|
|
543
562
|
if (ownerNodePath) {
|
|
544
|
-
const selectionKey = resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath);
|
|
563
|
+
const selectionKey = resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath, node.id);
|
|
545
564
|
mesh.metadata = {
|
|
546
565
|
...(mesh.metadata ?? {}),
|
|
547
566
|
editorProjection: {
|
|
@@ -765,8 +784,8 @@ function applyProjectionArtistMaterialProfilesToMeshes(options, node, modelRoot,
|
|
|
765
784
|
const material = mesh?.material;
|
|
766
785
|
if (!material)
|
|
767
786
|
continue;
|
|
768
|
-
const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot);
|
|
769
|
-
const slotProfile = resolveProjectionSlotProfile(slotProfiles, ownerNodePath);
|
|
787
|
+
const ownerNodePath = buildProjectionOwnerNodePath(mesh, modelRoot, node.id);
|
|
788
|
+
const slotProfile = resolveProjectionSlotProfile(slotProfiles, ownerNodePath, node.id);
|
|
770
789
|
if (!slotProfile)
|
|
771
790
|
continue;
|
|
772
791
|
const slotMaterial = detachProjectionSlotMaterial(mesh, materialCounts, ownerNodePath);
|
|
@@ -786,18 +805,18 @@ function applyProjectionArtistMaterialProfile(options, material, profile) {
|
|
|
786
805
|
resolveTextureUrl: options.resolveTextureUrl,
|
|
787
806
|
});
|
|
788
807
|
}
|
|
789
|
-
function resolveProjectionSlotProfile(slotProfiles, ownerNodePath) {
|
|
808
|
+
function resolveProjectionSlotProfile(slotProfiles, ownerNodePath, projectionNodeId) {
|
|
790
809
|
if (ownerNodePath == null)
|
|
791
810
|
return null;
|
|
792
811
|
const direct = slotProfiles[ownerNodePath];
|
|
793
812
|
if (direct)
|
|
794
813
|
return direct;
|
|
795
|
-
const normalized = normalizeProjectionOwnerNodePath(ownerNodePath);
|
|
814
|
+
const normalized = normalizeProjectionOwnerNodePath(ownerNodePath, { projectionNodeId });
|
|
796
815
|
if (normalized !== ownerNodePath && slotProfiles[normalized])
|
|
797
816
|
return slotProfiles[normalized];
|
|
798
817
|
let descendantMatch = null;
|
|
799
818
|
for (const [candidatePath, profile] of Object.entries(slotProfiles)) {
|
|
800
|
-
const normalizedCandidate = normalizeProjectionOwnerNodePath(candidatePath);
|
|
819
|
+
const normalizedCandidate = normalizeProjectionOwnerNodePath(candidatePath, { projectionNodeId });
|
|
801
820
|
if (normalizedCandidate === normalized)
|
|
802
821
|
return profile;
|
|
803
822
|
if (isProjectionOwnerPathDescendant(normalized, normalizedCandidate)) {
|
|
@@ -808,7 +827,7 @@ function resolveProjectionSlotProfile(slotProfiles, ownerNodePath) {
|
|
|
808
827
|
}
|
|
809
828
|
return descendantMatch?.profile ?? null;
|
|
810
829
|
}
|
|
811
|
-
function buildProjectionOwnerNodePath(node, rootNode) {
|
|
830
|
+
function buildProjectionOwnerNodePath(node, rootNode, projectionNodeId) {
|
|
812
831
|
if (!node || !rootNode || node === rootNode)
|
|
813
832
|
return '';
|
|
814
833
|
const segments = [];
|
|
@@ -822,9 +841,12 @@ function buildProjectionOwnerNodePath(node, rootNode) {
|
|
|
822
841
|
}
|
|
823
842
|
if (current !== rootNode)
|
|
824
843
|
return null;
|
|
825
|
-
return segments.reverse().join('/');
|
|
844
|
+
return normalizeProjectionOwnerNodePath(segments.reverse().join('/'), { projectionNodeId });
|
|
826
845
|
}
|
|
827
846
|
function stableProjectionNodeSegment(node) {
|
|
847
|
+
const sourceSegment = readProjectionSourceNodeSegment(node);
|
|
848
|
+
if (sourceSegment)
|
|
849
|
+
return sourceSegment;
|
|
828
850
|
const candidates = [node?.name, node?.id];
|
|
829
851
|
for (const candidate of candidates) {
|
|
830
852
|
if (typeof candidate !== 'string')
|
|
@@ -835,23 +857,6 @@ function stableProjectionNodeSegment(node) {
|
|
|
835
857
|
}
|
|
836
858
|
return null;
|
|
837
859
|
}
|
|
838
|
-
function normalizeProjectionOwnerNodePath(path) {
|
|
839
|
-
const segments = path
|
|
840
|
-
.split('/')
|
|
841
|
-
.map(normalizeProjectionOwnerPathSegment)
|
|
842
|
-
.filter(Boolean);
|
|
843
|
-
while (segments.length > 0 && isSyntheticProjectionOwnerRootSegment(segments[0])) {
|
|
844
|
-
segments.shift();
|
|
845
|
-
}
|
|
846
|
-
return segments.join('/');
|
|
847
|
-
}
|
|
848
|
-
function normalizeProjectionOwnerPathSegment(segment) {
|
|
849
|
-
const trimmed = segment.trim();
|
|
850
|
-
return trimmed.includes(':') ? trimmed.slice(trimmed.lastIndexOf(':') + 1) : trimmed;
|
|
851
|
-
}
|
|
852
|
-
function isSyntheticProjectionOwnerRootSegment(segment) {
|
|
853
|
-
return segment === '__root__';
|
|
854
|
-
}
|
|
855
860
|
function isProjectionOwnerPathDescendant(ownerNodePath, candidateAncestorPath) {
|
|
856
861
|
if (!ownerNodePath || !candidateAncestorPath)
|
|
857
862
|
return false;
|
|
@@ -860,10 +865,10 @@ function isProjectionOwnerPathDescendant(ownerNodePath, candidateAncestorPath) {
|
|
|
860
865
|
function createAssetMeshProjectionNodeId(rootNodeId, ownerNodePath) {
|
|
861
866
|
return `${rootNodeId}${ASSET_MESH_SELECTION_SEPARATOR}${encodeURIComponent(ownerNodePath)}`;
|
|
862
867
|
}
|
|
863
|
-
function resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath) {
|
|
864
|
-
const normalizedOwnerPath = normalizeProjectionOwnerNodePath(ownerNodePath);
|
|
868
|
+
function resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath, projectionNodeId) {
|
|
869
|
+
const normalizedOwnerPath = normalizeProjectionOwnerNodePath(ownerNodePath, { projectionNodeId });
|
|
865
870
|
let bestSlot = null;
|
|
866
|
-
for (const slot of readProjectionAssetMaterialSlots(asset)) {
|
|
871
|
+
for (const slot of readProjectionAssetMaterialSlots(asset, projectionNodeId)) {
|
|
867
872
|
if (!isProjectionOwnerPathSlotMatch(normalizedOwnerPath, slot.path))
|
|
868
873
|
continue;
|
|
869
874
|
if (!bestSlot || slot.path.length > bestSlot.path.length) {
|
|
@@ -872,21 +877,21 @@ function resolveProjectionAssetMeshSelectionKey(asset, ownerNodePath) {
|
|
|
872
877
|
}
|
|
873
878
|
return bestSlot?.key ?? ownerNodePath;
|
|
874
879
|
}
|
|
875
|
-
function readProjectionAssetMaterialSlots(asset) {
|
|
880
|
+
function readProjectionAssetMaterialSlots(asset, projectionNodeId) {
|
|
876
881
|
const rawSlots = asset.metadata?.materialSlots;
|
|
877
882
|
if (!Array.isArray(rawSlots))
|
|
878
883
|
return [];
|
|
879
884
|
const slots = [];
|
|
880
885
|
for (const rawSlot of rawSlots) {
|
|
881
|
-
const slot = readProjectionAssetMaterialSlot(rawSlot);
|
|
886
|
+
const slot = readProjectionAssetMaterialSlot(rawSlot, projectionNodeId);
|
|
882
887
|
if (slot)
|
|
883
888
|
slots.push(slot);
|
|
884
889
|
}
|
|
885
890
|
return slots;
|
|
886
891
|
}
|
|
887
|
-
function readProjectionAssetMaterialSlot(value) {
|
|
892
|
+
function readProjectionAssetMaterialSlot(value, projectionNodeId) {
|
|
888
893
|
if (typeof value === 'string') {
|
|
889
|
-
const path = normalizeProjectionOwnerNodePath(value);
|
|
894
|
+
const path = normalizeProjectionOwnerNodePath(value, { projectionNodeId });
|
|
890
895
|
return path ? { key: path, path } : null;
|
|
891
896
|
}
|
|
892
897
|
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
@@ -895,7 +900,7 @@ function readProjectionAssetMaterialSlot(value) {
|
|
|
895
900
|
const rawOwnerPath = readProjectionAssetMaterialSlotString(record.ownerNodePath)
|
|
896
901
|
|| readProjectionAssetMaterialSlotString(record.path)
|
|
897
902
|
|| readProjectionAssetMaterialSlotString(record.name);
|
|
898
|
-
const path = normalizeProjectionOwnerNodePath(rawOwnerPath);
|
|
903
|
+
const path = normalizeProjectionOwnerNodePath(rawOwnerPath, { projectionNodeId });
|
|
899
904
|
if (!path)
|
|
900
905
|
return null;
|
|
901
906
|
const slotId = readProjectionAssetMaterialSlotString(record.slotId);
|
|
@@ -1339,19 +1344,56 @@ function readProjectionObject(value) {
|
|
|
1339
1344
|
}
|
|
1340
1345
|
export function applyProjectionTransform(babylon, node, transform) {
|
|
1341
1346
|
const Vector3 = requireBabylonCtor(babylon.Vector3, 'Vector3');
|
|
1347
|
+
if (isEditorTransformMatrixSnapshot(transform)) {
|
|
1348
|
+
const Matrix = requireBabylonCtor(babylon.Matrix, 'Matrix');
|
|
1349
|
+
if (typeof Matrix.FromArray !== 'function' || typeof node?.setPreTransformMatrix !== 'function') {
|
|
1350
|
+
throw new Error('Babylon runtime missing matrix transform support.');
|
|
1351
|
+
}
|
|
1352
|
+
node.position = new Vector3(0, 0, 0);
|
|
1353
|
+
node.rotationQuaternion = null;
|
|
1354
|
+
node.rotation = new Vector3(0, 0, 0);
|
|
1355
|
+
node.scaling = new Vector3(1, 1, 1);
|
|
1356
|
+
node.setPreTransformMatrix(Matrix.FromArray(transform.matrix));
|
|
1357
|
+
writeProjectionLocalMatrixTransform(node, transform.matrix);
|
|
1358
|
+
return;
|
|
1359
|
+
}
|
|
1360
|
+
clearProjectionLocalMatrixTransform(babylon, node);
|
|
1342
1361
|
node.position = new Vector3(transform.position.x, transform.position.y, transform.position.z);
|
|
1362
|
+
node.rotationQuaternion = null;
|
|
1343
1363
|
node.rotation = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
|
|
1344
1364
|
const scale = transform.scale ?? { x: 1, y: 1, z: 1 };
|
|
1345
1365
|
node.scaling = new Vector3(scale.x, scale.y, scale.z);
|
|
1346
1366
|
}
|
|
1347
1367
|
function applyProjectionWorldTransform(babylon, node, transform) {
|
|
1348
1368
|
const parent = node?.parent ?? null;
|
|
1349
|
-
const local = parent
|
|
1369
|
+
const local = parent
|
|
1370
|
+
? toEditorLocalTransformFromWorld(readProjectionWorldTransform(parent), transform, { allowMatrixFallback: true })
|
|
1371
|
+
: transform;
|
|
1350
1372
|
if (!local)
|
|
1351
1373
|
return false;
|
|
1352
1374
|
applyProjectionTransform(babylon, node, local);
|
|
1353
1375
|
return true;
|
|
1354
1376
|
}
|
|
1377
|
+
function writeProjectionLocalMatrixTransform(node, matrix) {
|
|
1378
|
+
node.metadata = {
|
|
1379
|
+
...(readProjectionObject(node?.metadata) ?? {}),
|
|
1380
|
+
[PROJECTION_LOCAL_MATRIX_METADATA_KEY]: cloneEditorTransformMatrix(matrix),
|
|
1381
|
+
};
|
|
1382
|
+
}
|
|
1383
|
+
function clearProjectionLocalMatrixTransform(babylon, node) {
|
|
1384
|
+
if (typeof node?.setPreTransformMatrix === 'function') {
|
|
1385
|
+
const Matrix = babylon.Matrix;
|
|
1386
|
+
if (typeof Matrix?.FromArray === 'function') {
|
|
1387
|
+
node.setPreTransformMatrix(Matrix.FromArray(createIdentityEditorTransformMatrix()));
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
const metadata = readProjectionObject(node?.metadata);
|
|
1391
|
+
if (!metadata || !(PROJECTION_LOCAL_MATRIX_METADATA_KEY in metadata))
|
|
1392
|
+
return;
|
|
1393
|
+
const nextMetadata = { ...metadata };
|
|
1394
|
+
delete nextMetadata[PROJECTION_LOCAL_MATRIX_METADATA_KEY];
|
|
1395
|
+
node.metadata = nextMetadata;
|
|
1396
|
+
}
|
|
1355
1397
|
function applyAssetDefaultsTransform(babylon, node, transform) {
|
|
1356
1398
|
if (!transform)
|
|
1357
1399
|
return;
|