@babylonjs/loaders 9.28.0 → 9.30.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.
- package/BVH/bvhLoader.js +1 -3
- package/BVH/bvhLoader.js.map +1 -1
- package/OBJ/mtlFileLoader.js +9 -35
- package/OBJ/mtlFileLoader.js.map +1 -1
- package/OBJ/objFileLoader.pure.js +18 -23
- package/OBJ/objFileLoader.pure.js.map +1 -1
- package/OBJ/solidParser.js +11 -25
- package/OBJ/solidParser.js.map +1 -1
- package/SPLAT/splatFileLoader.pure.js +86 -82
- package/SPLAT/splatFileLoader.pure.js.map +1 -1
- package/STL/stlFileLoader.pure.d.ts +1 -0
- package/STL/stlFileLoader.pure.js +18 -16
- package/STL/stlFileLoader.pure.js.map +1 -1
- package/glTF/1.0/glTFLoader.pure.js +30 -37
- package/glTF/1.0/glTFLoader.pure.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_area.pure.js +16 -23
- package/glTF/2.0/Extensions/EXT_lights_area.pure.js.map +1 -1
- package/glTF/2.0/Extensions/EXT_lights_ies.pure.js +1 -3
- package/glTF/2.0/Extensions/EXT_lights_ies.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_gaussian_splatting.pure.js +1 -3
- package/glTF/2.0/Extensions/KHR_gaussian_splatting.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js +3 -3
- package/glTF/2.0/Extensions/KHR_interactivity/declarationMapper.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.d.ts +15 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js +70 -21
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityGraphExporter.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.d.ts +13 -0
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.js +16 -0
- package/glTF/2.0/Extensions/KHR_interactivity/interactivityNodeReference.js.map +1 -0
- package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js +18 -25
- package/glTF/2.0/Extensions/KHR_lights_punctual.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js +3 -10
- package/glTF/2.0/Extensions/KHR_node_hoverability.pure.js.map +1 -1
- package/glTF/2.0/Extensions/KHR_node_selectability.pure.js +2 -5
- package/glTF/2.0/Extensions/KHR_node_selectability.pure.js.map +1 -1
- package/glTF/2.0/glTFLoader.pure.js +15 -37
- package/glTF/2.0/glTFLoader.pure.js.map +1 -1
- 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.
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
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":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAM1C,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAEhG,MAAM,IAAI,GAAG,qBAAqB,CAAC;AAEnC;;GAEG;AACH,gEAAgE;AAChE,MAAM,OAAO,UAAU;IAenB;;OAEG;IACH,YAAY,MAAkB;QAjB9B;;WAEG;QACa,SAAI,GAAG,IAAI,CAAC;QAexB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,gBAAgB;IACT,OAAO;QACT,IAAI,CAAC,OAAe,GAAG,IAAI,CAAC;QAC7B,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,gBAAgB;IACT,SAAS;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC;QAChD,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;YAChC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,gDAAgD;IACzC,aAAa,CAAC,OAAe,EAAE,IAAW,EAAE,MAAqD;QACpG,OAAO,UAAU,CAAC,kBAAkB,CAAmD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,EAAE;YACnJ,IAAI,CAAC,OAAO,CAAC,0BAA0B,GAAG,IAAI,CAAC;YAE/C,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;gBACnE,IAAI,YAAmB,CAAC;gBAExB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC7E,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,CAAC;gBAE5C,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBAElF,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjB,gEAA4C,CAAC,CAAC,CAAC;wBAC3C,MAAM,uBAAuB,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAC1G,uBAAuB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;wBAC3C,YAAY,GAAG,uBAAuB,CAAC;wBACvC,MAAM;oBACV,CAAC;oBACD,oDAAsC,CAAC,CAAC,CAAC;wBACrC,YAAY,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAC/E,MAAM;oBACV,CAAC;oBACD,kDAAqC,CAAC,CAAC,CAAC;wBACpC,MAAM,gBAAgB,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;wBAClH,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;wBACxF,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;wBACnF,YAAY,GAAG,gBAAgB,CAAC;wBAChC,MAAM;oBACV,CAAC;oBACD,OAAO,CAAC,CAAC,CAAC;wBACN,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,GAAG,KAAK,CAAC;wBACzD,MAAM,IAAI,KAAK,CAAC,GAAG,gBAAgB,yBAAyB,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;oBAC/E,CAAC;gBACL,CAAC;gBAED,YAAY,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;gBAC7D,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,sBAAsB,GAAG,KAAK,CAAC;gBACzD,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC;gBAEnC,YAAY,CAAC,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC;gBAC9C,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACpF,YAAY,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;gBAC5E,YAAY,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC/E,YAAY,CAAC,MAAM,GAAG,WAAW,CAAC;gBAElC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAE/C,UAAU,CAAC,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;gBAE9D,MAAM,CAAC,WAAW,CAAC,CAAC;YACxB,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,kBAAkB;IAC9B,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAE9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1E,CAAC","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":"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,uBAAuB,CAAC;AAErC,gBAAgB;AAChB,MAAM,qBAAqB,GAAG,wBAAwB,CAAC;AAEvD,MAAM,oBAAoB,GAAG,uBAAuB,CAAC;AAErD;;;GAGG;AACH,gEAAgE;AAChE,MAAM,OAAO,qBAAqB;IAc9B;;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,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,EAAE,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC9I,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,mCAAmC;IAC/C,IAAI,kBAAkB,EAAE,CAAC;QACrB,OAAO;IACX,CAAC;IACD,kBAAkB,GAAG,IAAI,CAAC;IAE1B,mCAAmC,CAAC,iBAAiB,EAAE,IAAI,EAAE;QACzD,gGAAgG;QAChG,MAAM,EAAE;;;;YAIJ,6CAA6C;YAC7C,gDAAgD;SACnD;QACD,iBAAiB,EAAE;YACf,iBAAiB,EAAE,EAAE;YACrB,kBAAkB,EAAE;gBAChB,WAAW,EAAE,KAAK;gBAClB,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,qBAAqB,GAAG,IAAI,CAAC;gBACxC,CAAC;aACJ;SACJ;QACD,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,2DAA6B,EAAE;gBACvE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACjG,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACvG,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,YAAY;gBACnB,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,kBAAkB;gBAC1B,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,kBAAkB;gBAC1B,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,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,qBAAqB,GAAG,SAAS,CAAC,CAAC,CAAC,qBAAqB,GAAG,SAAS,CAAC;YAC5G,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,oBAAoB,SAAS,EAAE,CAAC;YACxD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,OAAO,iBAAiB,CAAC;QAC7B,CAAC;KACJ,CAAC,CAAC;IAEH,mCAAmC,CAAC,kBAAkB,EAAE,IAAI,EAAE;QAC1D,gGAAgG;QAChG,MAAM,EAAE;;;;YAIJ,6CAA6C;YAC7C,gDAAgD;SACnD;QACD,iBAAiB,EAAE;YACf,iBAAiB,EAAE,EAAE;YACrB,kBAAkB,EAAE;gBAChB,WAAW,EAAE,KAAK;gBAClB,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,oBAAoB,GAAG,IAAI,CAAC;gBACvC,CAAC;aACJ;SACJ;QACD,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,2DAA6B,EAAE;gBACvE,WAAW,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACjG,eAAe,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,gDAAgD,EAAE;gBACvG,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,YAAY;gBACnB,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,kBAAkB;gBAC1B,eAAe,EAAE,CAAC;gBAClB,gBAAgB,EAAE,CAAC;gBACnB,UAAU,EAAE,IAAI;aACnB;YACD;gBACI,KAAK,EAAE,MAAM;gBACb,MAAM,EAAE,kBAAkB;gBAC1B,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,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,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,oBAAoB,GAAG,SAAS,CAAC,CAAC,CAAC,oBAAoB,GAAG,SAAS,CAAC;YAC1G,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,qBAAqB,SAAS,EAAE,CAAC;YACzD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,iBAAiB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAChD,OAAO,iBAAiB,CAAC;QAC7B,CAAC;KACJ,CAAC,CAAC;IAEH,sBAAsB,CAAC,sDAAsD,EAAE;QAC3E,GAAG,EAAE,CAAC,IAAW,EAAE,EAAE;YACjB,OAAO,yBAAyB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QACxD,CAAC;QACD,GAAG,EAAE,CAAC,KAAc,EAAE,IAAW,EAAE,EAAE;YACjC,yBAAyB,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACxD,CAAC;QACD,SAAS,EAAE,CAAC,IAAW,EAAE,EAAE,CAAC,IAAI,CAAC,qBAAqB;QACtD,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,+BAA+B,CAAC;QACxD,IAAI,EAAE,SAAS;KAClB,CAAC,CAAC;AACP,CAAC;AAED,IAAI,WAAW,GAAG,KAAK,CAAC;AACxB;;;GAGG;AACH,gEAAgE;AAChE,MAAM,UAAU,6BAA6B;IACzC,IAAI,WAAW,EAAE,CAAC;QACd,OAAO;IACX,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,mCAAmC,EAAE,CAAC;IAEtC,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAE9B,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;AACrF,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_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":"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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_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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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}`;
|