@babylonjs/loaders 9.27.1 → 9.29.0

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.
Files changed (40) hide show
  1. package/BVH/bvhLoader.js +1 -3
  2. package/BVH/bvhLoader.js.map +1 -1
  3. package/OBJ/mtlFileLoader.d.ts +8 -1
  4. package/OBJ/mtlFileLoader.js +55 -13
  5. package/OBJ/mtlFileLoader.js.map +1 -1
  6. package/OBJ/objFileLoader.pure.d.ts +5 -0
  7. package/OBJ/objFileLoader.pure.js +87 -65
  8. package/OBJ/objFileLoader.pure.js.map +1 -1
  9. package/OBJ/objLoadingOptions.d.ts +6 -0
  10. package/OBJ/objLoadingOptions.js.map +1 -1
  11. package/OBJ/solidParser.js +17 -6
  12. package/OBJ/solidParser.js.map +1 -1
  13. package/SPLAT/splatFileLoader.pure.js +86 -82
  14. package/SPLAT/splatFileLoader.pure.js.map +1 -1
  15. package/STL/stlFileLoader.pure.d.ts +1 -0
  16. package/STL/stlFileLoader.pure.js +18 -16
  17. package/STL/stlFileLoader.pure.js.map +1 -1
  18. package/glTF/1.0/glTFLoader.pure.js +30 -37
  19. package/glTF/1.0/glTFLoader.pure.js.map +1 -1
  20. package/glTF/2.0/Extensions/EXT_lights_area.pure.js +16 -23
  21. package/glTF/2.0/Extensions/EXT_lights_area.pure.js.map +1 -1
  22. package/glTF/2.0/Extensions/EXT_lights_ies.pure.js +1 -3
  23. package/glTF/2.0/Extensions/EXT_lights_ies.pure.js.map +1 -1
  24. package/glTF/2.0/Extensions/KHR_gaussian_splatting.pure.js +1 -3
  25. package/glTF/2.0/Extensions/KHR_gaussian_splatting.pure.js.map +1 -1
  26. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.d.ts +7 -0
  27. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js +17 -3
  28. package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js.map +1 -1
  29. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.d.ts +13 -0
  30. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.js +16 -0
  31. package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.js.map +1 -0
  32. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js +18 -25
  33. package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js.map +1 -1
  34. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js +3 -10
  35. package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js.map +1 -1
  36. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js +2 -5
  37. package/glTF/2.0/Extensions/KHR_node_selectability.pure.js.map +1 -1
  38. package/glTF/2.0/glTFLoader.pure.js +15 -37
  39. package/glTF/2.0/glTFLoader.pure.js.map +1 -1
  40. package/package.json +3 -3
@@ -0,0 +1,13 @@
1
+ import { type INode } from "../../glTFLoaderInterfaces.js";
2
+ /**
3
+ * Creates the scene reference used by KHR node events. A glTF node with one
4
+ * primitive loads as a Mesh; one with multiple primitives loads as a
5
+ * TransformNode whose child meshes carry the pointer events.
6
+ * @param node The loaded glTF node.
7
+ * @returns A reference to its actual Babylon runtime node.
8
+ */
9
+ export declare function GetInteractivityNodeRuntimeReference(node: INode | undefined): {
10
+ className?: string;
11
+ id?: string;
12
+ uniqueId?: number;
13
+ };
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Creates the scene reference used by KHR node events. A glTF node with one
3
+ * primitive loads as a Mesh; one with multiple primitives loads as a
4
+ * TransformNode whose child meshes carry the pointer events.
5
+ * @param node The loaded glTF node.
6
+ * @returns A reference to its actual Babylon runtime node.
7
+ */
8
+ export function GetInteractivityNodeRuntimeReference(node) {
9
+ const runtimeNode = node?._babylonTransformNode;
10
+ return {
11
+ className: runtimeNode?.getClassName(),
12
+ id: runtimeNode?.id,
13
+ uniqueId: runtimeNode?.uniqueId,
14
+ };
15
+ }
16
+ //# sourceMappingURL=interactivityNodeReference.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactivityNodeReference.js","sourceRoot":"","sources":["../../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,oCAAoC,CAAC,IAAuB;IACxE,MAAM,WAAW,GAAG,IAAI,EAAE,qBAAqB,CAAC;IAChD,OAAO;QACH,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE;QACtC,EAAE,EAAE,WAAW,EAAE,EAAE;QACnB,QAAQ,EAAE,WAAW,EAAE,QAAQ;KAClC,CAAC;AACN,CAAC","sourcesContent":["import { type INode } from \"../../glTFLoaderInterfaces\";\n\n/**\n * Creates the scene reference used by KHR node events. A glTF node with one\n * primitive loads as a Mesh; one with multiple primitives loads as a\n * TransformNode whose child meshes carry the pointer events.\n * @param node The loaded glTF node.\n * @returns A reference to its actual Babylon runtime node.\n */\nexport function GetInteractivityNodeRuntimeReference(node: INode | undefined): { className?: string; id?: string; uniqueId?: number } {\n const runtimeNode = node?._babylonTransformNode;\n return {\n className: runtimeNode?.getClassName(),\n id: runtimeNode?.id,\n uniqueId: runtimeNode?.uniqueId,\n };\n}\n"]}
@@ -45,35 +45,28 @@ export class KHR_lights {
45
45
  return GLTFLoader.LoadExtensionAsync(context, node, this.name, async (extensionContext, extension) => {
46
46
  this._loader._allMaterialsDirtyRequired = true;
47
47
  return await this._loader.loadNodeAsync(context, node, (babylonMesh) => {
48
- let babylonLight;
49
48
  const light = ArrayItem.Get(extensionContext, this._lights, extension.light);
50
49
  const name = light.name || babylonMesh.name;
51
- this._loader.babylonScene._blockEntityCollection = !!this._loader._assetContainer;
52
- switch (light.type) {
53
- case "directional" /* KHRLightsPunctual_LightType.DIRECTIONAL */: {
54
- const babylonDirectionalLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);
55
- babylonDirectionalLight.position.setAll(0);
56
- babylonLight = babylonDirectionalLight;
57
- break;
50
+ const babylonLight = this._loader.babylonScene._executeWithBlockedEntityCollection(!!this._loader._assetContainer, () => {
51
+ switch (light.type) {
52
+ case "directional" /* KHRLightsPunctual_LightType.DIRECTIONAL */: {
53
+ const babylonDirectionalLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);
54
+ babylonDirectionalLight.position.setAll(0);
55
+ return babylonDirectionalLight;
56
+ }
57
+ case "point" /* KHRLightsPunctual_LightType.POINT */:
58
+ return new PointLight(name, Vector3.Zero(), this._loader.babylonScene);
59
+ case "spot" /* KHRLightsPunctual_LightType.SPOT */: {
60
+ const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);
61
+ babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;
62
+ babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;
63
+ return babylonSpotLight;
64
+ }
65
+ default:
66
+ throw new Error(`${extensionContext}: Invalid light type (${light.type})`);
58
67
  }
59
- case "point" /* KHRLightsPunctual_LightType.POINT */: {
60
- babylonLight = new PointLight(name, Vector3.Zero(), this._loader.babylonScene);
61
- break;
62
- }
63
- case "spot" /* KHRLightsPunctual_LightType.SPOT */: {
64
- const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);
65
- babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;
66
- babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;
67
- babylonLight = babylonSpotLight;
68
- break;
69
- }
70
- default: {
71
- this._loader.babylonScene._blockEntityCollection = false;
72
- throw new Error(`${extensionContext}: Invalid light type (${light.type})`);
73
- }
74
- }
68
+ });
75
69
  babylonLight._parentContainer = this._loader._assetContainer;
76
- this._loader.babylonScene._blockEntityCollection = false;
77
70
  light._babylonLight = babylonLight;
78
71
  babylonLight.falloffType = Light.FALLOFF_GLTF;
79
72
  babylonLight.diffuse = light.color ? Color3.FromArray(light.color) : Color3.White();
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_lights_punctual.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_lights_punctual.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Color3 } from \"core/Maths/math.color.pure\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight.pure\";\r\nimport { PointLight } from \"core/Lights/pointLight.pure\";\r\nimport { SpotLight } from \"core/Lights/spotLight.pure\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { type TransformNode } from \"core/Meshes/transformNode.pure\";\r\n\r\nimport { type IKHRLightsPunctual_LightReference, KHRLightsPunctual_LightType } from \"babylonjs-gltf2interface\";\r\nimport { type INode, type IKHRLightsPunctual_Light } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.pure\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_lights_punctual\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_lights implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /** hidden */\r\n private _loader: GLTFLoader;\r\n private _lights?: IKHRLightsPunctual_Light[];\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._lights;\r\n }\r\n\r\n /** @internal */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name];\r\n this._lights = extension.lights;\r\n ArrayItem.Assign(this._lights);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable<Promise<TransformNode>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRLightsPunctual_LightReference, TransformNode>(context, node, this.name, async (extensionContext, extension) => {\r\n this._loader._allMaterialsDirtyRequired = true;\r\n\r\n return await this._loader.loadNodeAsync(context, node, (babylonMesh) => {\r\n let babylonLight: Light;\r\n\r\n const light = ArrayItem.Get(extensionContext, this._lights, extension.light);\r\n const name = light.name || babylonMesh.name;\r\n\r\n this._loader.babylonScene._blockEntityCollection = !!this._loader._assetContainer;\r\n\r\n switch (light.type) {\r\n case KHRLightsPunctual_LightType.DIRECTIONAL: {\r\n const babylonDirectionalLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);\r\n babylonDirectionalLight.position.setAll(0);\r\n babylonLight = babylonDirectionalLight;\r\n break;\r\n }\r\n case KHRLightsPunctual_LightType.POINT: {\r\n babylonLight = new PointLight(name, Vector3.Zero(), this._loader.babylonScene);\r\n break;\r\n }\r\n case KHRLightsPunctual_LightType.SPOT: {\r\n const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);\r\n babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;\r\n babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;\r\n babylonLight = babylonSpotLight;\r\n break;\r\n }\r\n default: {\r\n this._loader.babylonScene._blockEntityCollection = false;\r\n throw new Error(`${extensionContext}: Invalid light type (${light.type})`);\r\n }\r\n }\r\n\r\n babylonLight._parentContainer = this._loader._assetContainer;\r\n this._loader.babylonScene._blockEntityCollection = false;\r\n light._babylonLight = babylonLight;\r\n\r\n babylonLight.falloffType = Light.FALLOFF_GLTF;\r\n babylonLight.diffuse = light.color ? Color3.FromArray(light.color) : Color3.White();\r\n babylonLight.intensity = light.intensity == undefined ? 1 : light.intensity;\r\n babylonLight.range = light.range == undefined ? Number.MAX_VALUE : light.range;\r\n babylonLight.parent = babylonMesh;\r\n\r\n this._loader._babylonLights.push(babylonLight);\r\n\r\n GLTFLoader.AddPointerMetadata(babylonLight, extensionContext);\r\n\r\n assign(babylonMesh);\r\n });\r\n });\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_lights glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_lights(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_lights(loader));\r\n}\r\n"]}
1
+ {"version":3,"file":"KHR_lights_punctual.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_lights_punctual.pure.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/naming-convention */\r\nimport { type Nullable } from \"core/types\";\r\nimport { Vector3 } from \"core/Maths/math.vector.pure\";\r\nimport { Color3 } from \"core/Maths/math.color.pure\";\r\nimport { DirectionalLight } from \"core/Lights/directionalLight.pure\";\r\nimport { PointLight } from \"core/Lights/pointLight.pure\";\r\nimport { SpotLight } from \"core/Lights/spotLight.pure\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport { type TransformNode } from \"core/Meshes/transformNode.pure\";\r\n\r\nimport { type IKHRLightsPunctual_LightReference, KHRLightsPunctual_LightType } from \"babylonjs-gltf2interface\";\r\nimport { type INode, type IKHRLightsPunctual_Light } from \"../glTFLoaderInterfaces\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { GLTFLoader, ArrayItem } from \"../glTFLoader.pure\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\n\r\nconst NAME = \"KHR_lights_punctual\";\r\n\r\n/**\r\n * [Specification](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_lights_punctual/README.md)\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_lights implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n /** hidden */\r\n private _loader: GLTFLoader;\r\n private _lights?: IKHRLightsPunctual_Light[];\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = this._loader.isExtensionUsed(NAME);\r\n }\r\n\r\n /** @internal */\r\n public dispose() {\r\n (this._loader as any) = null;\r\n delete this._lights;\r\n }\r\n\r\n /** @internal */\r\n public onLoading(): void {\r\n const extensions = this._loader.gltf.extensions;\r\n if (extensions && extensions[this.name]) {\r\n const extension = extensions[this.name];\r\n this._lights = extension.lights;\r\n ArrayItem.Assign(this._lights);\r\n }\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n // eslint-disable-next-line no-restricted-syntax\r\n public loadNodeAsync(context: string, node: INode, assign: (babylonTransformNode: TransformNode) => void): Nullable<Promise<TransformNode>> {\r\n return GLTFLoader.LoadExtensionAsync<IKHRLightsPunctual_LightReference, TransformNode>(context, node, this.name, async (extensionContext, extension) => {\r\n this._loader._allMaterialsDirtyRequired = true;\r\n\r\n return await this._loader.loadNodeAsync(context, node, (babylonMesh) => {\r\n const light = ArrayItem.Get(extensionContext, this._lights, extension.light);\r\n const name = light.name || babylonMesh.name;\r\n\r\n const babylonLight = this._loader.babylonScene._executeWithBlockedEntityCollection(!!this._loader._assetContainer, () => {\r\n switch (light.type) {\r\n case KHRLightsPunctual_LightType.DIRECTIONAL: {\r\n const babylonDirectionalLight = new DirectionalLight(name, Vector3.Backward(), this._loader.babylonScene);\r\n babylonDirectionalLight.position.setAll(0);\r\n return babylonDirectionalLight;\r\n }\r\n case KHRLightsPunctual_LightType.POINT:\r\n return new PointLight(name, Vector3.Zero(), this._loader.babylonScene);\r\n case KHRLightsPunctual_LightType.SPOT: {\r\n const babylonSpotLight = new SpotLight(name, Vector3.Zero(), Vector3.Backward(), 0, 1, this._loader.babylonScene);\r\n babylonSpotLight.angle = ((light.spot && light.spot.outerConeAngle) || Math.PI / 4) * 2;\r\n babylonSpotLight.innerAngle = ((light.spot && light.spot.innerConeAngle) || 0) * 2;\r\n return babylonSpotLight;\r\n }\r\n default:\r\n throw new Error(`${extensionContext}: Invalid light type (${light.type})`);\r\n }\r\n });\r\n\r\n babylonLight._parentContainer = this._loader._assetContainer;\r\n light._babylonLight = babylonLight;\r\n\r\n babylonLight.falloffType = Light.FALLOFF_GLTF;\r\n babylonLight.diffuse = light.color ? Color3.FromArray(light.color) : Color3.White();\r\n babylonLight.intensity = light.intensity == undefined ? 1 : light.intensity;\r\n babylonLight.range = light.range == undefined ? Number.MAX_VALUE : light.range;\r\n babylonLight.parent = babylonMesh;\r\n\r\n this._loader._babylonLights.push(babylonLight);\r\n\r\n GLTFLoader.AddPointerMetadata(babylonLight, extensionContext);\r\n\r\n assign(babylonMesh);\r\n });\r\n });\r\n }\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_lights glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_lights(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_lights(loader));\r\n}\r\n"]}
@@ -2,6 +2,7 @@ import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExt
2
2
  import { addNewInteractivityFlowGraphMapping } from "./KHR_interactivity/declarationMapper.js";
3
3
  import { AddObjectAccessorToKey } from "./objectModelMapping.js";
4
4
  import { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from "./KHR_interactivity/interactivityNodeState.js";
5
+ import { GetInteractivityNodeRuntimeReference } from "./KHR_interactivity/interactivityNodeReference.js";
5
6
  const NAME = "KHR_node_hoverability";
6
7
  // interactivity
7
8
  const MeshPointerOverPrefix = "targetMeshPointerOver_";
@@ -135,11 +136,7 @@ export function _RegisterKHRNodeHoverabilityRuntime() {
135
136
  // find the nodeIndex value
136
137
  serializedObjects[1].config.variable = variableName;
137
138
  context._userVariables[variableName] = validNodeIndex
138
- ? {
139
- className: "Mesh",
140
- id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,
141
- uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,
142
- }
139
+ ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])
143
140
  : { type: "any" /* FlowGraphTypes.Any */, value: [{}] };
144
141
  const eventKey = `${NAME}:event/onHoverIn:${nodeIndex}`;
145
142
  serializedObjects[0].config.eventKey = eventKey;
@@ -237,11 +234,7 @@ export function _RegisterKHRNodeHoverabilityRuntime() {
237
234
  // find the nodeIndex value
238
235
  serializedObjects[1].config.variable = variableName;
239
236
  context._userVariables[variableName] = validNodeIndex
240
- ? {
241
- className: "Mesh",
242
- id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,
243
- uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,
244
- }
237
+ ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])
245
238
  : { type: "any" /* FlowGraphTypes.Any */, value: [{}] };
246
239
  const eventKey = `${NAME}:event/onHoverOut:${nodeIndex}`;
247
240
  serializedObjects[0].config.eventKey = eventKey;
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_node_hoverability.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_hoverability.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GLTFLoader } from \"../glTFLoader.pure\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\r\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\r\nimport { type INode } from \"../glTFLoaderInterfaces\";\r\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\r\nimport { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from \"./KHR_interactivity/interactivityNodeState\";\r\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes.pure\";\r\n\r\nconst NAME = \"KHR_node_hoverability\";\r\n\r\n// interactivity\r\nconst MeshPointerOverPrefix = \"targetMeshPointerOver_\";\r\n\r\nconst MeshPointerOutPrefix = \"targetMeshPointerOut_\";\r\n\r\n/**\r\n * Loader extension for KHR_node_hoverability\r\n * @see https://github.com/KhronosGroup/glTF/pull/2426\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_node_hoverability implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /** Applies node state before KHR_interactivity graphs start. */\r\n public readonly order = 100;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n InitializeInteractivityNodeState(this._loader.gltf.nodes ?? [], \"hoverable\", (node) => node.extensions?.KHR_node_hoverability?.hoverable);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n}\r\n\r\nlet _RuntimeRegistered = false;\r\n/**\r\n * @internal\r\n * Registers KHR_node_hoverability runtime dependencies without changing the extension registry.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function _RegisterKHRNodeHoverabilityRuntime(): void {\r\n if (_RuntimeRegistered) {\r\n return;\r\n }\r\n _RuntimeRegistered = true;\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onHoverIn\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.PointerOverEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n hoveredNode: \"ref\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return MeshPointerOverPrefix + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n hoveredNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"targetMesh\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"meshUnderPointer\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"meshUnderPointer\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n // find the listener nodeIndex value\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? MeshPointerOverPrefix + nodeIndex : MeshPointerOverPrefix + \"unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? {\r\n className: \"Mesh\",\r\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\r\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\r\n }\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onHoverIn:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onHoverOut\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.PointerOutEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n hoveredNode: \"ref\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return MeshPointerOutPrefix + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n hoveredNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"targetMesh\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"meshOutOfPointer\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"meshOutOfPointer\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? MeshPointerOutPrefix + nodeIndex : MeshPointerOutPrefix + \"unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? {\r\n className: \"Mesh\",\r\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\r\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\r\n }\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onHoverOut:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n AddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_hoverability/hoverable\", {\r\n get: (node: INode) => {\r\n return GetInteractivityNodeState(node, \"hoverable\");\r\n },\r\n set: (value: boolean, node: INode) => {\r\n SetInteractivityNodeState(node, \"hoverable\", value);\r\n },\r\n getTarget: (node: INode) => node._babylonTransformNode,\r\n getPropertyName: [() => \"pointerOverDisableMeshTesting\"],\r\n type: \"boolean\",\r\n });\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_node_hoverability glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_node_hoverability(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n _RegisterKHRNodeHoverabilityRuntime();\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_node_hoverability(loader));\r\n}\r\n"]}
1
+ {"version":3,"file":"KHR_node_hoverability.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_hoverability.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GLTFLoader } from \"../glTFLoader.pure\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\r\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\r\nimport { type INode } from \"../glTFLoaderInterfaces\";\r\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\r\nimport { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from \"./KHR_interactivity/interactivityNodeState\";\r\nimport { GetInteractivityNodeRuntimeReference } from \"./KHR_interactivity/interactivityNodeReference\";\r\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes.pure\";\r\n\r\nconst NAME = \"KHR_node_hoverability\";\r\n\r\n// interactivity\r\nconst MeshPointerOverPrefix = \"targetMeshPointerOver_\";\r\n\r\nconst MeshPointerOutPrefix = \"targetMeshPointerOut_\";\r\n\r\n/**\r\n * Loader extension for KHR_node_hoverability\r\n * @see https://github.com/KhronosGroup/glTF/pull/2426\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_node_hoverability implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /** Applies node state before KHR_interactivity graphs start. */\r\n public readonly order = 100;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n InitializeInteractivityNodeState(this._loader.gltf.nodes ?? [], \"hoverable\", (node) => node.extensions?.KHR_node_hoverability?.hoverable);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n}\r\n\r\nlet _RuntimeRegistered = false;\r\n/**\r\n * @internal\r\n * Registers KHR_node_hoverability runtime dependencies without changing the extension registry.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function _RegisterKHRNodeHoverabilityRuntime(): void {\r\n if (_RuntimeRegistered) {\r\n return;\r\n }\r\n _RuntimeRegistered = true;\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onHoverIn\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.PointerOverEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n hoveredNode: \"ref\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return MeshPointerOverPrefix + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n hoveredNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"targetMesh\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"meshUnderPointer\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"meshUnderPointer\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n // find the listener nodeIndex value\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? MeshPointerOverPrefix + nodeIndex : MeshPointerOverPrefix + \"unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onHoverIn:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onHoverOut\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.PointerOutEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n hoveredNode: \"ref\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return MeshPointerOutPrefix + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n hoverNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n hoveredNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"targetMesh\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"meshOutOfPointer\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"meshOutOfPointer\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? MeshPointerOutPrefix + nodeIndex : MeshPointerOutPrefix + \"unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onHoverOut:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n AddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_hoverability/hoverable\", {\r\n get: (node: INode) => {\r\n return GetInteractivityNodeState(node, \"hoverable\");\r\n },\r\n set: (value: boolean, node: INode) => {\r\n SetInteractivityNodeState(node, \"hoverable\", value);\r\n },\r\n getTarget: (node: INode) => node._babylonTransformNode,\r\n getPropertyName: [() => \"pointerOverDisableMeshTesting\"],\r\n type: \"boolean\",\r\n });\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_node_hoverability glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_node_hoverability(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n _RegisterKHRNodeHoverabilityRuntime();\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_node_hoverability(loader));\r\n}\r\n"]}
@@ -2,6 +2,7 @@ import { registerGLTFExtension, unregisterGLTFExtension } from "../glTFLoaderExt
2
2
  import { addNewInteractivityFlowGraphMapping } from "./KHR_interactivity/declarationMapper.js";
3
3
  import { AddObjectAccessorToKey } from "./objectModelMapping.js";
4
4
  import { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from "./KHR_interactivity/interactivityNodeState.js";
5
+ import { GetInteractivityNodeRuntimeReference } from "./KHR_interactivity/interactivityNodeReference.js";
5
6
  const NAME = "KHR_node_selectability";
6
7
  // add the interactivity mapping for the onSelect event
7
8
  // object model extension for selectable
@@ -154,11 +155,7 @@ export function _RegisterKHRNodeSelectabilityRuntime() {
154
155
  // find the nodeIndex value
155
156
  serializedObjects[1].config.variable = variableName;
156
157
  context._userVariables[variableName] = validNodeIndex
157
- ? {
158
- className: "Mesh",
159
- id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,
160
- uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,
161
- }
158
+ ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])
162
159
  : { type: "any" /* FlowGraphTypes.Any */, value: [{}] };
163
160
  const eventKey = `${NAME}:event/onSelect:${nodeIndex}`;
164
161
  serializedObjects[0].config.eventKey = eventKey;
@@ -1 +1 @@
1
- {"version":3,"file":"KHR_node_selectability.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_selectability.pure.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,OAAO,EAAE,mCAAmC,EAAE,MAAM,uCAAuC,CAAC;AAE5F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,yBAAyB,EAAE,gCAAgC,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AAGpJ,MAAM,IAAI,GAAG,wBAAwB,CAAC;AAEtC,uDAAuD;AAEvD,wCAAwC;AAExC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,sBAAsB;IAc/B;;OAEG;IACH,YAAY,MAAkB;QAhB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAC5B,gEAAgE;QAChD,UAAK,GAAG,GAAG,CAAC;QAYxB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAED,wGAAwG;IACjG,KAAK,CAAC,OAAO;QAChB,gCAAgC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,sBAAsB,EAAE,UAAU,CAAC,CAAC;IACjJ,CAAC;IAEM,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;IACjC,CAAC;CACJ;AAED,IAAI,kBAAkB,GAAG,KAAK,CAAC;AAC/B;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,oCAAoC;IAChD,IAAI,kBAAkB,EAAE,CAAC;QACrB,OAAO;IACX,CAAC;IACD,kBAAkB,GAAG,IAAI,CAAC;IAE1B,mCAAmC,CAAC,gBAAgB,EAAE,IAAI,EAAE;QACxD,gGAAgG;QAChG,MAAM,EAAE;;;;YAIJ,6CAA6C;YAC7C,gDAAgD;SACnD;QACD,iBAAiB,EAAE;YACf,iBAAiB,EAAE,EAAE;YACrB,kBAAkB,EAAE;gBAChB,YAAY,EAAE,KAAK;gBACnB,kBAAkB,EAAE,QAAQ;gBAC5B,cAAc,EAAE,QAAQ;gBACxB,eAAe,EAAE,KAAK;gBACtB,KAAK,EAAE,KAAK;aACf;SACJ;QACD,aAAa,EAAE;YACX,SAAS,EAAE;gBACP,IAAI,EAAE,UAAU;gBAChB,iBAAiB,EAAE,KAAK;gBACxB,OAAO,mEAAiC;gBACxC,WAAW,EAAE,YAAY;gBACzB,kBAAkB,EAAE,IAAI;gBACxB,eAAe,CAAC,IAAI;oBAChB,OAAO,aAAa,GAAG,IAAI,CAAC;gBAChC,CAAC;aACJ;SACJ;QACD,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,2DAA6B,EAAE;gBAC1E,uEAAuE;gBACvE,uEAAuE;gBACvE,0EAA0E;gBAC1E,YAAY,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBAClG,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACvG,cAAc,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACrG,kBAAkB,EAAE,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBAC7G,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,gDAAgD,EAAE;aACtF;YACD,KAAK,EAAE;gBACH,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,gDAAgD,EAAE;aAClF;SACJ;QACD,oBAAoB,EAAE;YAClB;gBACI,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,OAAO;gBACf,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,QAAQ;gBACf,MAAM,EAAE,YAAY;gBACpB,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,YAAY;gBACpB,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,sBAAsB;gBAC7B,MAAM,EAAE,WAAW;gBACnB,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,qBAAqB;gBAC5B,MAAM,EAAE,aAAa;gBACrB,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,yBAAyB;gBAChC,MAAM,EAAE,YAAY;gBACpB,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,IAAI;gBACX,MAAM,EAAE,MAAM;gBACd,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;aACtB;SACJ;QACD,cAAc,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,EAAE,UAAU;YAC7F,oCAAoC;YACpC,MAAM,SAAS,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACrE,MAAM,cAAc,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,SAAS,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC;YACtJ,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,oBAAoB,CAAC;YACvF,2BAA2B;YAC3B,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,YAAY,CAAC;YACpD,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,GAAG,cAAc;gBACjD,CAAC,CAAC;oBACI,SAAS,EAAE,MAAM;oBACjB,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,qBAAqB,EAAE,EAAE;oBAC5D,QAAQ,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CAAC,qBAAqB,EAAE,QAAQ;iBAC3E;gBACH,CAAC,CAAC,EAAE,IAAI,gCAAoB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,GAAG,IAAI,mBAAmB,SAAS,EAAE,CAAC;YACvD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;YAClD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC;YAClD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,OAAO,iBAAiB,CAAC;QAC7B,CAAC;KACJ,CAAC,CAAC;IAEH,sBAAsB,CAAC,wDAAwD,EAAE;QAC7E,GAAG,EAAE,CAAC,IAAW,EAAE,EAAE;YACjB,OAAO,yBAAyB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,GAAG,EAAE,CAAC,KAAc,EAAE,IAAW,EAAE,EAAE;YACjC,yBAAyB,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB;QACtD,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC;QACrC,IAAI,EAAE,SAAS;KAClB,CAAC,CAAC;AACP,CAAC;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,8BAA8B;IAC1C,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,oCAAoC,EAAE,CAAC;IAEvC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAE9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;AACtF,CAAC","sourcesContent":["import { type GLTFLoader } from \"../glTFLoader.pure\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\r\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\r\nimport { type INode } from \"../glTFLoaderInterfaces\";\r\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\r\nimport { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from \"./KHR_interactivity/interactivityNodeState\";\r\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes.pure\";\r\n\r\nconst NAME = \"KHR_node_selectability\";\r\n\r\n// add the interactivity mapping for the onSelect event\r\n\r\n// object model extension for selectable\r\n\r\n/**\r\n * Loader extension for KHR_selectability\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_node_selectability implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /** Applies node state before KHR_interactivity graphs start. */\r\n public readonly order = 100;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n InitializeInteractivityNodeState(this._loader.gltf.nodes ?? [], \"selectable\", (node) => node.extensions?.KHR_node_selectability?.selectable);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n}\r\n\r\nlet _RuntimeRegistered = false;\r\n/**\r\n * @internal\r\n * Registers KHR_node_selectability runtime dependencies without changing the extension registry.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function _RegisterKHRNodeSelectabilityRuntime(): void {\r\n if (_RuntimeRegistered) {\r\n return;\r\n }\r\n _RuntimeRegistered = true;\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onSelect\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.MeshPickEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n selectedNode: \"ref\",\r\n selectionRayOrigin: \"float3\",\r\n selectionPoint: \"float3\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return \"pickedMesh_\" + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n selectedNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n // `selectedNode` is the new ref-typed output from the Opaque-Reference\r\n // spec update. It's the picked Babylon mesh itself, available directly\r\n // from FlowGraphMeshPickEventBlock.pickedMesh — no IndexOf lookup needed.\r\n selectedNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n selectionPoint: { name: \"selectionPoint\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n selectionRayOrigin: { name: \"selectionRayOrigin\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"asset\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"pickedMesh\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"pickedMesh\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"selectionPointInput\",\r\n output: \"pickedPoint\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"selectionRayOriginInput\",\r\n output: \"pickOrigin\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n // find the listener nodeIndex value\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? \"pickedMesh_\" + nodeIndex : \"pickedMesh_unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? {\r\n className: \"Mesh\",\r\n id: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.id,\r\n uniqueId: globalGLTF?.nodes?.[nodeIndex]._babylonTransformNode?.uniqueId,\r\n }\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onSelect:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[0].config.useNaNDefaults = true;\r\n serializedObjects[0].config.pointerIdDefault = -1;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n AddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_selectability/selectable\", {\r\n get: (node: INode) => {\r\n return GetInteractivityNodeState(node, \"selectable\");\r\n },\r\n set: (value: boolean, node: INode) => {\r\n SetInteractivityNodeState(node, \"selectable\", value);\r\n },\r\n getTarget: (node: INode) => node._babylonTransformNode,\r\n getPropertyName: [() => \"isPickable\"],\r\n type: \"boolean\",\r\n });\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_node_selectability glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_node_selectability(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n _RegisterKHRNodeSelectabilityRuntime();\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_node_selectability(loader));\r\n}\r\n"]}
1
+ {"version":3,"file":"KHR_node_selectability.pure.js","sourceRoot":"","sources":["../../../../../../dev/loaders/src/glTF/2.0/Extensions/KHR_node_selectability.pure.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GLTFLoader } from \"../glTFLoader.pure\";\r\nimport { type IGLTFLoaderExtension } from \"../glTFLoaderExtension\";\r\nimport { registerGLTFExtension, unregisterGLTFExtension } from \"../glTFLoaderExtensionRegistry\";\r\nimport { FlowGraphBlockNames } from \"core/FlowGraph/Blocks/flowGraphBlockNames\";\r\nimport { addNewInteractivityFlowGraphMapping } from \"./KHR_interactivity/declarationMapper\";\r\nimport { type INode } from \"../glTFLoaderInterfaces\";\r\nimport { AddObjectAccessorToKey } from \"./objectModelMapping\";\r\nimport { GetInteractivityNodeState, InitializeInteractivityNodeState, SetInteractivityNodeState } from \"./KHR_interactivity/interactivityNodeState\";\r\nimport { GetInteractivityNodeRuntimeReference } from \"./KHR_interactivity/interactivityNodeReference\";\r\nimport { FlowGraphTypes } from \"core/FlowGraph/flowGraphRichTypes.pure\";\r\n\r\nconst NAME = \"KHR_node_selectability\";\r\n\r\n// add the interactivity mapping for the onSelect event\r\n\r\n// object model extension for selectable\r\n\r\n/**\r\n * Loader extension for KHR_selectability\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport class KHR_node_selectability implements IGLTFLoaderExtension {\r\n /**\r\n * The name of this extension.\r\n */\r\n public readonly name = NAME;\r\n /** Applies node state before KHR_interactivity graphs start. */\r\n public readonly order = 100;\r\n /**\r\n * Defines whether this extension is enabled.\r\n */\r\n public enabled: boolean;\r\n\r\n private _loader: GLTFLoader;\r\n\r\n /**\r\n * @internal\r\n */\r\n constructor(loader: GLTFLoader) {\r\n this._loader = loader;\r\n this.enabled = loader.isExtensionUsed(NAME);\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/naming-convention, @typescript-eslint/no-misused-promises\r\n public async onReady(): Promise<void> {\r\n InitializeInteractivityNodeState(this._loader.gltf.nodes ?? [], \"selectable\", (node) => node.extensions?.KHR_node_selectability?.selectable);\r\n }\r\n\r\n public dispose() {\r\n (this._loader as any) = null;\r\n }\r\n}\r\n\r\nlet _RuntimeRegistered = false;\r\n/**\r\n * @internal\r\n * Registers KHR_node_selectability runtime dependencies without changing the extension registry.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function _RegisterKHRNodeSelectabilityRuntime(): void {\r\n if (_RuntimeRegistered) {\r\n return;\r\n }\r\n _RuntimeRegistered = true;\r\n\r\n addNewInteractivityFlowGraphMapping(\"event/onSelect\", NAME, {\r\n // using GetVariable as the nodeIndex is a configuration and not a value (i.e. it's not mutable)\r\n blocks: [\r\n FlowGraphBlockNames.MeshPickEvent,\r\n FlowGraphBlockNames.GetVariable,\r\n FlowGraphBlockNames.IndexOf,\r\n \"KHR_interactivity/FlowGraphGLTFDataProvider\",\r\n \"KHR_interactivity/FlowGraphEventReferenceBlock\",\r\n ],\r\n declarationSchema: {\r\n inputValueSockets: {},\r\n outputValueSockets: {\r\n selectedNode: \"ref\",\r\n selectionRayOrigin: \"float3\",\r\n selectionPoint: \"float3\",\r\n controllerIndex: \"int\",\r\n event: \"ref\",\r\n },\r\n },\r\n configuration: {\r\n nodeIndex: {\r\n name: \"variable\",\r\n configurationType: \"int\",\r\n toBlock: FlowGraphBlockNames.GetVariable,\r\n indexSource: \"assetNodes\",\r\n invalidUsesDefault: true,\r\n dataTransformer(data) {\r\n return \"pickedMesh_\" + data;\r\n },\r\n },\r\n },\r\n outputs: {\r\n values: {\r\n selectedNodeIndex: { name: \"index\", toBlock: FlowGraphBlockNames.IndexOf },\r\n // `selectedNode` is the new ref-typed output from the Opaque-Reference\r\n // spec update. It's the picked Babylon mesh itself, available directly\r\n // from FlowGraphMeshPickEventBlock.pickedMesh — no IndexOf lookup needed.\r\n selectedNode: { name: \"nodeReference\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n controllerIndex: { name: \"controllerIndex\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n selectionPoint: { name: \"selectionPoint\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n selectionRayOrigin: { name: \"selectionRayOrigin\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n event: { name: \"value\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n flows: {\r\n out: { name: \"out\", toBlock: \"KHR_interactivity/FlowGraphEventReferenceBlock\" },\r\n },\r\n },\r\n interBlockConnectors: [\r\n {\r\n input: \"asset\",\r\n output: \"value\",\r\n inputBlockIndex: 0,\r\n outputBlockIndex: 1,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"array\",\r\n output: \"nodes\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 3,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"object\",\r\n output: \"pickedMesh\",\r\n inputBlockIndex: 2,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"node\",\r\n output: \"pickedMesh\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"controllerIndexInput\",\r\n output: \"pointerId\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"selectionPointInput\",\r\n output: \"pickedPoint\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"selectionRayOriginInput\",\r\n output: \"pickOrigin\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n isVariable: true,\r\n },\r\n {\r\n input: \"in\",\r\n output: \"done\",\r\n inputBlockIndex: 4,\r\n outputBlockIndex: 0,\r\n },\r\n ],\r\n extraProcessor(gltfBlock, _declaration, _mapping, _arrays, serializedObjects, context, globalGLTF) {\r\n // find the listener nodeIndex value\r\n const nodeIndex = gltfBlock.configuration?.[\"nodeIndex\"]?.value?.[0];\r\n const validNodeIndex = typeof nodeIndex === \"number\" && Number.isInteger(nodeIndex) && nodeIndex >= 0 && nodeIndex < (globalGLTF?.nodes?.length ?? 0);\r\n const variableName = validNodeIndex ? \"pickedMesh_\" + nodeIndex : \"pickedMesh_unbound\";\r\n // find the nodeIndex value\r\n serializedObjects[1].config.variable = variableName;\r\n context._userVariables[variableName] = validNodeIndex\r\n ? GetInteractivityNodeRuntimeReference(globalGLTF?.nodes?.[nodeIndex])\r\n : { type: FlowGraphTypes.Any, value: [{}] };\r\n const eventKey = `${NAME}:event/onSelect:${nodeIndex}`;\r\n serializedObjects[0].config.eventKey = eventKey;\r\n serializedObjects[0].config.useNaNDefaults = true;\r\n serializedObjects[0].config.pointerIdDefault = -1;\r\n serializedObjects[4].config.eventKey = eventKey;\r\n return serializedObjects;\r\n },\r\n });\r\n\r\n AddObjectAccessorToKey(\"/nodes/{}/extensions/KHR_node_selectability/selectable\", {\r\n get: (node: INode) => {\r\n return GetInteractivityNodeState(node, \"selectable\");\r\n },\r\n set: (value: boolean, node: INode) => {\r\n SetInteractivityNodeState(node, \"selectable\", value);\r\n },\r\n getTarget: (node: INode) => node._babylonTransformNode,\r\n getPropertyName: [() => \"isPickable\"],\r\n type: \"boolean\",\r\n });\r\n}\r\n\r\nlet _Registered = false;\r\n/**\r\n * Registers the KHR_node_selectability glTF loader extension.\r\n * Safe to call multiple times; only the first call has an effect.\r\n */\r\n// eslint-disable-next-line @typescript-eslint/naming-convention\r\nexport function RegisterKHR_node_selectability(): void {\r\n if (_Registered) {\r\n return;\r\n }\r\n _Registered = true;\r\n\r\n _RegisterKHRNodeSelectabilityRuntime();\r\n\r\n unregisterGLTFExtension(NAME);\r\n\r\n registerGLTFExtension(NAME, true, (loader) => new KHR_node_selectability(loader));\r\n}\r\n"]}
@@ -550,11 +550,9 @@ export class GLTFLoader {
550
550
  index: -1,
551
551
  };
552
552
  }
553
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
554
- const rootMesh = new Mesh("__root__", this._babylonScene);
553
+ const rootMesh = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new Mesh("__root__", this._babylonScene));
555
554
  this._rootBabylonMesh = rootMesh;
556
555
  this._rootBabylonMesh._parentContainer = this._assetContainer;
557
- this._babylonScene._blockEntityCollection = false;
558
556
  this._rootBabylonMesh.setEnabled(false);
559
557
  const rootNode = {
560
558
  _babylonTransformNode: this._rootBabylonMesh,
@@ -754,10 +752,8 @@ export class GLTFLoader {
754
752
  const hasSkin = this._parent.loadSkins && node.skin != undefined;
755
753
  if (!hasMesh || hasSkin) {
756
754
  const nodeName = node.name || `node${node.index}`;
757
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
758
- const transformNode = new TransformNode(nodeName, this._babylonScene);
755
+ const transformNode = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new TransformNode(nodeName, this._babylonScene));
759
756
  transformNode._parentContainer = this._assetContainer;
760
- this._babylonScene._blockEntityCollection = false;
761
757
  if (node.mesh == undefined) {
762
758
  node._babylonTransformNode = transformNode;
763
759
  }
@@ -841,10 +837,8 @@ export class GLTFLoader {
841
837
  }));
842
838
  }
843
839
  else {
844
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
845
- node._babylonTransformNode = new TransformNode(name, this._babylonScene);
840
+ node._babylonTransformNode = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new TransformNode(name, this._babylonScene));
846
841
  node._babylonTransformNode._parentContainer = this._assetContainer;
847
- this._babylonScene._blockEntityCollection = false;
848
842
  node._primitiveBabylonMeshes = [];
849
843
  for (const primitive of primitives) {
850
844
  promises.push(this._loadMeshPrimitiveAsync(`${context}/primitives/${primitive.index}`, `${name}_primitive${primitive.index}`, node, mesh, primitive, (babylonMesh) => {
@@ -879,18 +873,14 @@ export class GLTFLoader {
879
873
  let babylonAbstractMesh;
880
874
  let promise;
881
875
  if (shouldInstance && primitive._instanceData) {
882
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
883
- babylonAbstractMesh = primitive._instanceData.babylonSourceMesh.createInstance(name);
876
+ babylonAbstractMesh = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => primitive._instanceData.babylonSourceMesh.createInstance(name));
884
877
  babylonAbstractMesh._parentContainer = this._assetContainer;
885
- this._babylonScene._blockEntityCollection = false;
886
878
  promise = primitive._instanceData.promise;
887
879
  }
888
880
  else {
889
881
  const promises = new Array();
890
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
891
- const babylonMesh = new Mesh(name, this._babylonScene);
882
+ const babylonMesh = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new Mesh(name, this._babylonScene));
892
883
  babylonMesh._parentContainer = this._assetContainer;
893
- this._babylonScene._blockEntityCollection = false;
894
884
  babylonMesh.sideOrientation = this._babylonScene.useRightHandedSystem ? Material.CounterClockWiseSideOrientation : Material.ClockWiseSideOrientation;
895
885
  this._createMorphTargets(context, node, mesh, primitive, babylonMesh);
896
886
  promises.push(this._loadVertexDataAsync(context, primitive, babylonMesh).then(async (babylonGeometry) => {
@@ -898,10 +888,10 @@ export class GLTFLoader {
898
888
  if (this._disposed) {
899
889
  return;
900
890
  }
901
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
902
- babylonGeometry.applyToMesh(babylonMesh);
903
- babylonGeometry._parentContainer = this._assetContainer;
904
- this._babylonScene._blockEntityCollection = false;
891
+ this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => {
892
+ babylonGeometry.applyToMesh(babylonMesh);
893
+ babylonGeometry._parentContainer = this._assetContainer;
894
+ });
905
895
  });
906
896
  }));
907
897
  if (!this.parent.skipMaterials) {
@@ -1018,10 +1008,8 @@ export class GLTFLoader {
1018
1008
  throw new Error(`${context}: Primitives do not have the same number of targets`);
1019
1009
  }
1020
1010
  const targetNames = mesh.extras ? mesh.extras.targetNames : null;
1021
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1022
- babylonMesh.morphTargetManager = new MorphTargetManager(this._babylonScene);
1011
+ babylonMesh.morphTargetManager = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new MorphTargetManager(this._babylonScene));
1023
1012
  babylonMesh.morphTargetManager._parentContainer = this._assetContainer;
1024
- this._babylonScene._blockEntityCollection = false;
1025
1013
  babylonMesh.morphTargetManager.areUpdatesFrozen = true;
1026
1014
  for (let index = 0; index < primitive.targets.length; index++) {
1027
1015
  const weight = node.weights ? node.weights[index] : mesh.weights ? mesh.weights[index] : 0;
@@ -1182,10 +1170,8 @@ export class GLTFLoader {
1182
1170
  return skin._data.promise;
1183
1171
  }
1184
1172
  const skeletonId = `skeleton${skin.index}`;
1185
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1186
- const babylonSkeleton = new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene);
1173
+ const babylonSkeleton = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new Skeleton(skin.name || skeletonId, skeletonId, this._babylonScene));
1187
1174
  babylonSkeleton._parentContainer = this._assetContainer;
1188
- this._babylonScene._blockEntityCollection = false;
1189
1175
  this._loadBones(context, skin, babylonSkeleton);
1190
1176
  const promise = this._loadSkinInverseBindMatricesDataAsync(context, skin).then((inverseBindMatricesData) => {
1191
1177
  this._updateBoneMatrices(babylonSkeleton, inverseBindMatricesData);
@@ -1328,10 +1314,8 @@ export class GLTFLoader {
1328
1314
  }
1329
1315
  const promises = new Array();
1330
1316
  this.logOpen(`${context} ${camera.name || ""}`);
1331
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1332
- const babylonCamera = new FreeCamera(camera.name || `camera${camera.index}`, Vector3.Zero(), this._babylonScene, false);
1317
+ const babylonCamera = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new FreeCamera(camera.name || `camera${camera.index}`, Vector3.Zero(), this._babylonScene, false));
1333
1318
  babylonCamera._parentContainer = this._assetContainer;
1334
- this._babylonScene._blockEntityCollection = false;
1335
1319
  camera._babylonCamera = babylonCamera;
1336
1320
  // glTF cameras look towards the local -Z axis.
1337
1321
  babylonCamera.setTarget(new Vector3(0, 0, -1));
@@ -1405,10 +1389,8 @@ export class GLTFLoader {
1405
1389
  }
1406
1390
  // eslint-disable-next-line @typescript-eslint/naming-convention
1407
1391
  return LazyAnimationGroupModulePromise.value.then(({ AnimationGroup }) => {
1408
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1409
- const babylonAnimationGroup = new AnimationGroup(animation.name || `animation${animation.index}`, this._babylonScene);
1392
+ const babylonAnimationGroup = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new AnimationGroup(animation.name || `animation${animation.index}`, this._babylonScene));
1410
1393
  babylonAnimationGroup._parentContainer = this._assetContainer;
1411
- this._babylonScene._blockEntityCollection = false;
1412
1394
  animation._babylonAnimationGroup = babylonAnimationGroup;
1413
1395
  const promises = new Array();
1414
1396
  ArrayItem.Assign(animation.channels);
@@ -1899,10 +1881,8 @@ export class GLTFLoader {
1899
1881
  throw new Error("No PBR material implementation loaded");
1900
1882
  }
1901
1883
  _createDefaultMaterial(name, babylonDrawMode, impl) {
1902
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
1903
- const babylonMaterial = new impl.materialClass(name, this._babylonScene);
1884
+ const babylonMaterial = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new impl.materialClass(name, this._babylonScene));
1904
1885
  babylonMaterial._parentContainer = this._assetContainer;
1905
- this._babylonScene._blockEntityCollection = false;
1906
1886
  babylonMaterial.fillMode = babylonDrawMode;
1907
1887
  babylonMaterial.transparencyMode = impl.materialClass.MATERIAL_OPAQUE;
1908
1888
  // Create the material adapter and set some default properties.
@@ -2134,7 +2114,6 @@ export class GLTFLoader {
2134
2114
  const samplerData = this._loadSampler(`/samplers/${sampler.index}`, sampler);
2135
2115
  const promises = new Array();
2136
2116
  const deferred = new Deferred();
2137
- this._babylonScene._blockEntityCollection = !!this._assetContainer;
2138
2117
  const textureCreationOptions = {
2139
2118
  noMipmap: samplerData.noMipMaps,
2140
2119
  invertY: false,
@@ -2153,12 +2132,11 @@ export class GLTFLoader {
2153
2132
  loaderOptions: textureLoaderOptions,
2154
2133
  useSRGBBuffer: !!useSRGBBuffer && this._parent.useSRGBBuffers,
2155
2134
  };
2156
- const babylonTexture = new Texture(null, this._babylonScene, textureCreationOptions);
2135
+ const babylonTexture = this._babylonScene._executeWithBlockedEntityCollection(!!this._assetContainer, () => new Texture(null, this._babylonScene, textureCreationOptions));
2157
2136
  if (sourceTexture) {
2158
2137
  this._trackTexture(sourceTexture, babylonTexture, image.index, sampler.index >= 0 ? sampler.index : undefined);
2159
2138
  }
2160
2139
  babylonTexture._parentContainer = this._assetContainer;
2161
- this._babylonScene._blockEntityCollection = false;
2162
2140
  promises.push(deferred.promise);
2163
2141
  const nonBase64Uri = image.uri && !IsBase64DataUrl(image.uri) ? image.uri : undefined;
2164
2142
  const imageId = nonBase64Uri ?? `${this._fileName}#image${image.index}`;