@babylonjs/core 5.0.0-beta.7 → 5.0.0-rc.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 (189) hide show
  1. package/Animations/animation.d.ts +6 -6
  2. package/Animations/animation.js +9 -5
  3. package/Animations/animation.js.map +1 -1
  4. package/Audio/sound.js +9 -3
  5. package/Audio/sound.js.map +1 -1
  6. package/Bones/skeleton.d.ts +0 -6
  7. package/Bones/skeleton.js +2 -14
  8. package/Bones/skeleton.js.map +1 -1
  9. package/Compat/compatibilityOptions.d.ts +9 -0
  10. package/Compat/compatibilityOptions.js +14 -0
  11. package/Compat/compatibilityOptions.js.map +1 -0
  12. package/Compat/index.d.ts +1 -0
  13. package/Compat/index.js +2 -0
  14. package/Compat/index.js.map +1 -0
  15. package/Culling/ray.js +2 -2
  16. package/Culling/ray.js.map +1 -1
  17. package/Debug/skeletonViewer.js +3 -4
  18. package/Debug/skeletonViewer.js.map +1 -1
  19. package/DeviceInput/Helpers/eventFactory.js +8 -1
  20. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  21. package/DeviceInput/InputDevices/deviceSourceManager.d.ts +20 -5
  22. package/DeviceInput/InputDevices/deviceSourceManager.js +68 -7
  23. package/DeviceInput/InputDevices/deviceSourceManager.js.map +1 -1
  24. package/DeviceInput/InputDevices/internalDeviceSourceManager.d.ts +15 -10
  25. package/DeviceInput/InputDevices/internalDeviceSourceManager.js +25 -31
  26. package/DeviceInput/InputDevices/internalDeviceSourceManager.js.map +1 -1
  27. package/DeviceInput/InputDevices/webDeviceInputSystem.d.ts +8 -6
  28. package/DeviceInput/InputDevices/webDeviceInputSystem.js +113 -42
  29. package/DeviceInput/InputDevices/webDeviceInputSystem.js.map +1 -1
  30. package/Engines/Extensions/engine.multiview.js +0 -1
  31. package/Engines/Extensions/engine.multiview.js.map +1 -1
  32. package/Engines/Extensions/engine.query.d.ts +7 -0
  33. package/Engines/Extensions/engine.query.js +12 -0
  34. package/Engines/Extensions/engine.query.js.map +1 -1
  35. package/Engines/Extensions/engine.renderTarget.d.ts +5 -0
  36. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  37. package/Engines/Extensions/engine.views.d.ts +7 -0
  38. package/Engines/Extensions/engine.views.js +12 -0
  39. package/Engines/Extensions/engine.views.js.map +1 -1
  40. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  41. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  42. package/Engines/WebGPU/webgpuConstants.d.ts +2 -1
  43. package/Engines/WebGPU/webgpuConstants.js +1 -0
  44. package/Engines/WebGPU/webgpuConstants.js.map +1 -1
  45. package/Engines/WebGPU/webgpuTextureHelper.js +5 -5
  46. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  47. package/Engines/engine.d.ts +45 -26
  48. package/Engines/index.d.ts +1 -0
  49. package/Engines/index.js +1 -0
  50. package/Engines/index.js.map +1 -1
  51. package/Engines/nativeEngine.js +12 -11
  52. package/Engines/nativeEngine.js.map +1 -1
  53. package/Engines/thinEngine.js +2 -2
  54. package/Engines/thinEngine.js.map +1 -1
  55. package/Engines/webgpuEngine.js +33 -22
  56. package/Engines/webgpuEngine.js.map +1 -1
  57. package/Events/keyboardEvents.d.ts +7 -1
  58. package/Events/keyboardEvents.js +11 -1
  59. package/Events/keyboardEvents.js.map +1 -1
  60. package/Gizmos/boundingBoxGizmo.js +0 -10
  61. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  62. package/Gizmos/gizmo.js +1 -1
  63. package/Gizmos/gizmo.js.map +1 -1
  64. package/Helpers/environmentHelper.js +2 -2
  65. package/Helpers/environmentHelper.js.map +1 -1
  66. package/Inputs/scene.inputManager.d.ts +0 -1
  67. package/Inputs/scene.inputManager.js +7 -7
  68. package/Inputs/scene.inputManager.js.map +1 -1
  69. package/Layers/effectLayer.d.ts +1 -0
  70. package/Layers/effectLayer.js +24 -0
  71. package/Layers/effectLayer.js.map +1 -1
  72. package/Lights/Shadows/shadowGenerator.js +5 -5
  73. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  74. package/Loading/Plugins/babylonFileLoader.js +0 -8
  75. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  76. package/Loading/sceneLoader.js +4 -3
  77. package/Loading/sceneLoader.js.map +1 -1
  78. package/Materials/PBR/pbrBaseMaterial.js +1 -0
  79. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  80. package/Materials/Textures/dynamicTexture.d.ts +1 -1
  81. package/Materials/Textures/dynamicTexture.js.map +1 -1
  82. package/Materials/Textures/texture.js +5 -5
  83. package/Materials/Textures/texture.js.map +1 -1
  84. package/Materials/materialPluginBase.d.ts +5 -0
  85. package/Materials/materialPluginBase.js +5 -0
  86. package/Materials/materialPluginBase.js.map +1 -1
  87. package/Materials/materialPluginEvent.d.ts +1 -0
  88. package/Materials/materialPluginEvent.js.map +1 -1
  89. package/Materials/materialPluginManager.d.ts +1 -0
  90. package/Materials/materialPluginManager.js +20 -15
  91. package/Materials/materialPluginManager.js.map +1 -1
  92. package/Materials/standardMaterial.js +1 -0
  93. package/Materials/standardMaterial.js.map +1 -1
  94. package/Maths/math.vector.d.ts +5 -0
  95. package/Maths/math.vector.js +11 -0
  96. package/Maths/math.vector.js.map +1 -1
  97. package/Meshes/Builders/boxBuilder.js +5 -4
  98. package/Meshes/Builders/boxBuilder.js.map +1 -1
  99. package/Meshes/Builders/capsuleBuilder.js +4 -3
  100. package/Meshes/Builders/capsuleBuilder.js.map +1 -1
  101. package/Meshes/Builders/cylinderBuilder.js +10 -7
  102. package/Meshes/Builders/cylinderBuilder.js.map +1 -1
  103. package/Meshes/Builders/decalBuilder.js +5 -2
  104. package/Meshes/Builders/decalBuilder.js.map +1 -1
  105. package/Meshes/Builders/discBuilder.js +3 -2
  106. package/Meshes/Builders/discBuilder.js.map +1 -1
  107. package/Meshes/Builders/goldbergBuilder.js +10 -1
  108. package/Meshes/Builders/goldbergBuilder.js.map +1 -1
  109. package/Meshes/Builders/groundBuilder.js +2 -1
  110. package/Meshes/Builders/groundBuilder.js.map +1 -1
  111. package/Meshes/Builders/icoSphereBuilder.js +2 -1
  112. package/Meshes/Builders/icoSphereBuilder.js.map +1 -1
  113. package/Meshes/Builders/planeBuilder.js +5 -4
  114. package/Meshes/Builders/planeBuilder.js.map +1 -1
  115. package/Meshes/Builders/polygonBuilder.js +8 -3
  116. package/Meshes/Builders/polygonBuilder.js.map +1 -1
  117. package/Meshes/Builders/polyhedronBuilder.js +3 -2
  118. package/Meshes/Builders/polyhedronBuilder.js.map +1 -1
  119. package/Meshes/Builders/ribbonBuilder.js +4 -3
  120. package/Meshes/Builders/ribbonBuilder.js.map +1 -1
  121. package/Meshes/Builders/sphereBuilder.js +2 -1
  122. package/Meshes/Builders/sphereBuilder.js.map +1 -1
  123. package/Meshes/Builders/tiledBoxBuilder.js +4 -0
  124. package/Meshes/Builders/tiledBoxBuilder.js.map +1 -1
  125. package/Meshes/Builders/torusBuilder.js +2 -1
  126. package/Meshes/Builders/torusBuilder.js.map +1 -1
  127. package/Meshes/Builders/torusKnotBuilder.js +2 -1
  128. package/Meshes/Builders/torusKnotBuilder.js.map +1 -1
  129. package/Meshes/abstractMesh.d.ts +9 -3
  130. package/Meshes/abstractMesh.js +33 -31
  131. package/Meshes/abstractMesh.js.map +1 -1
  132. package/Meshes/geometry.js +31 -0
  133. package/Meshes/geometry.js.map +1 -1
  134. package/Meshes/instancedMesh.js +12 -10
  135. package/Meshes/instancedMesh.js.map +1 -1
  136. package/Meshes/mesh.d.ts +1 -1
  137. package/Meshes/mesh.js +52 -51
  138. package/Meshes/mesh.js.map +1 -1
  139. package/Meshes/mesh.vertexData.d.ts +2 -2
  140. package/Meshes/mesh.vertexData.js +100 -76
  141. package/Meshes/mesh.vertexData.js.map +1 -1
  142. package/Meshes/transformNode.d.ts +0 -2
  143. package/Meshes/transformNode.js +6 -5
  144. package/Meshes/transformNode.js.map +1 -1
  145. package/Misc/decorators.d.ts +1 -1
  146. package/Misc/decorators.js +8 -1
  147. package/Misc/decorators.js.map +1 -1
  148. package/Misc/deepCopier.js +3 -3
  149. package/Misc/deepCopier.js.map +1 -1
  150. package/Misc/error.d.ts +51 -0
  151. package/Misc/error.js +66 -0
  152. package/Misc/error.js.map +1 -0
  153. package/Misc/fileTools.d.ts +4 -4
  154. package/Misc/fileTools.js +7 -7
  155. package/Misc/fileTools.js.map +1 -1
  156. package/Misc/index.d.ts +1 -0
  157. package/Misc/index.js +1 -0
  158. package/Misc/index.js.map +1 -1
  159. package/Particles/particleSystem.d.ts +13 -1
  160. package/Particles/particleSystem.js +27 -1
  161. package/Particles/particleSystem.js.map +1 -1
  162. package/Rendering/prePassRenderer.js +12 -2
  163. package/Rendering/prePassRenderer.js.map +1 -1
  164. package/Rendering/subSurfaceConfiguration.js +1 -1
  165. package/Rendering/subSurfaceConfiguration.js.map +1 -1
  166. package/Rendering/utilityLayerRenderer.js +2 -0
  167. package/Rendering/utilityLayerRenderer.js.map +1 -1
  168. package/Shaders/ShadersInclude/pointCloudVertex.js +1 -1
  169. package/Shaders/ShadersInclude/pointCloudVertex.js.map +1 -1
  170. package/Shaders/background.vertex.js +1 -1
  171. package/Shaders/background.vertex.js.map +1 -1
  172. package/Shaders/pbr.vertex.js +1 -1
  173. package/Shaders/pbr.vertex.js.map +1 -1
  174. package/XR/features/WebXRNearInteraction.js +4 -2
  175. package/XR/features/WebXRNearInteraction.js.map +1 -1
  176. package/assetContainer.js +1 -4
  177. package/assetContainer.js.map +1 -1
  178. package/index.d.ts +1 -0
  179. package/index.js +1 -0
  180. package/index.js.map +1 -1
  181. package/package.json +10 -4
  182. package/scene.d.ts +1 -10
  183. package/scene.js +23 -43
  184. package/scene.js.map +1 -1
  185. package/types.d.ts +1 -1
  186. package/types.js.map +1 -1
  187. package/Misc/baseError.d.ts +0 -7
  188. package/Misc/baseError.js +0 -18
  189. package/Misc/baseError.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"skeletonViewer.js","sourceRoot":"","sources":["../../../sourceES6/core/Debug/skeletonViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from '../Maths/math.color';\r\nimport { Scene } from \"../scene\";\r\nimport { Nullable } from \"../types\";\r\nimport { Bone } from \"../Bones/bone\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateLineSystem } from \"../Meshes/Builders/linesBuilder\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Material } from '../Materials/material';\r\nimport { ShaderMaterial } from '../Materials/shaderMaterial';\r\nimport { DynamicTexture } from '../Materials/Textures/dynamicTexture';\r\nimport { VertexBuffer } from '../Buffers/buffer';\r\nimport { Effect } from '../Materials/effect';\r\n\r\nimport { ISkeletonViewerOptions, IBoneWeightShaderOptions, ISkeletonMapShaderOptions, ISkeletonMapShaderColorMapKnot } from './ISkeletonViewer';\r\nimport { Observer } from '../Misc/observable';\r\n\r\nimport { CreateSphere } from '../Meshes/Builders/sphereBuilder';\r\nimport { ExtrudeShapeCustom } from '../Meshes/Builders/shapeBuilder';\r\n\r\n/**\r\n * Class used to render a debug view of a given skeleton\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#8\r\n */\r\nexport class SkeletonViewer {\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_LINES */\r\n public static readonly DISPLAY_LINES = 0;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERES */\r\n public static readonly DISPLAY_SPHERES = 1;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERE_AND_SPURS */\r\n public static readonly DISPLAY_SPHERE_AND_SPURS = 2;\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#395\r\n */\r\n static CreateBoneWeightShader(options: IBoneWeightShaderOptions, scene: Scene): ShaderMaterial {\r\n\r\n let skeleton: Skeleton = options.skeleton;\r\n let colorBase: Color3 = options.colorBase ?? Color3.Black();\r\n let colorZero: Color3 = options.colorZero ?? Color3.Blue();\r\n let colorQuarter: Color3 = options.colorQuarter ?? Color3.Green();\r\n let colorHalf: Color3 = options.colorHalf ?? Color3.Yellow();\r\n let colorFull: Color3 = options.colorFull ?? Color3.Red();\r\n let targetBoneIndex: number = options.targetBoneIndex ?? 0;\r\n\r\n Effect.ShadersStore['boneWeights:' + skeleton.name + \"VertexShader\"] =\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n uniform vec3 colorBase;\r\n uniform vec3 colorZero;\r\n uniform vec3 colorQuarter;\r\n uniform vec3 colorHalf;\r\n uniform vec3 colorFull;\r\n\r\n uniform float targetBoneIndex;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n vec3 color = colorBase;\r\n float totalWeight = 0.;\r\n if(matricesIndices[0] == targetBoneIndex && matricesWeights[0] > 0.){\r\n totalWeight += matricesWeights[0];\r\n }\r\n if(matricesIndices[1] == targetBoneIndex && matricesWeights[1] > 0.){\r\n totalWeight += matricesWeights[1];\r\n }\r\n if(matricesIndices[2] == targetBoneIndex && matricesWeights[2] > 0.){\r\n totalWeight += matricesWeights[2];\r\n }\r\n if(matricesIndices[3] == targetBoneIndex && matricesWeights[3] > 0.){\r\n totalWeight += matricesWeights[3];\r\n }\r\n\r\n color = mix(color, colorZero, smoothstep(0., 0.25, totalWeight));\r\n color = mix(color, colorQuarter, smoothstep(0.25, 0.5, totalWeight));\r\n color = mix(color, colorHalf, smoothstep(0.5, 0.75, totalWeight));\r\n color = mix(color, colorFull, smoothstep(0.75, 1.0, totalWeight));\r\n vColor = color;\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`;\r\n Effect.ShadersStore['boneWeights:' + skeleton.name + \"FragmentShader\"] =\r\n `\r\n precision highp float;\r\n varying vec3 vPosition;\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4(vColor, 1.0);\r\n gl_FragColor = color;\r\n }\r\n `;\r\n let shader: ShaderMaterial = new ShaderMaterial('boneWeight:' + skeleton.name, scene,\r\n {\r\n vertex: 'boneWeights:' + skeleton.name,\r\n fragment: 'boneWeights:' + skeleton.name\r\n },\r\n {\r\n attributes: ['position', 'normal', 'matricesIndices', 'matricesWeights'],\r\n uniforms: [\r\n 'world', 'worldView', 'worldViewProjection', 'view', 'projection', 'viewProjection',\r\n 'colorBase', 'colorZero', 'colorQuarter', 'colorHalf', 'colorFull', 'targetBoneIndex'\r\n ]\r\n });\r\n\r\n shader.setColor3('colorBase', colorBase);\r\n shader.setColor3('colorZero', colorZero);\r\n shader.setColor3('colorQuarter', colorQuarter);\r\n shader.setColor3('colorHalf', colorHalf);\r\n shader.setColor3('colorFull', colorFull);\r\n shader.setFloat('targetBoneIndex', targetBoneIndex);\r\n\r\n shader.getClassName = (): string => {\r\n return \"BoneWeightShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n */\r\n static CreateSkeletonMapShader(options: ISkeletonMapShaderOptions, scene: Scene) {\r\n\r\n let skeleton: Skeleton = options.skeleton;\r\n let colorMap: ISkeletonMapShaderColorMapKnot[] = options.colorMap ?? [\r\n {\r\n color: new Color3(1, 0.38, 0.18),\r\n location: 0\r\n },\r\n {\r\n color: new Color3(.59, 0.18, 1.00),\r\n location: 0.2\r\n },\r\n {\r\n color: new Color3(0.59, 1, 0.18),\r\n location: 0.4\r\n },\r\n {\r\n color: new Color3(1, 0.87, 0.17),\r\n location: 0.6\r\n },\r\n {\r\n color: new Color3(1, 0.17, 0.42),\r\n location: 0.8\r\n },\r\n {\r\n color: new Color3(0.17, 0.68, 1.0),\r\n location: 1.0\r\n }\r\n ];\r\n\r\n let bufferWidth: number = skeleton.bones.length + 1;\r\n let colorMapBuffer: number[] = SkeletonViewer._CreateBoneMapColorBuffer(bufferWidth, colorMap, scene);\r\n let shader = new ShaderMaterial('boneWeights:' + skeleton.name, scene,\r\n {\r\n vertexSource:\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n uniform float colorMap[` + ((skeleton.bones.length) * 4) + `];\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec3 color = vec3(0.);\r\n bool first = true;\r\n\r\n for (int i = 0; i < 4; i++) {\r\n int boneIdx = int(matricesIndices[i]);\r\n float boneWgt = matricesWeights[i];\r\n\r\n vec3 c = vec3(colorMap[boneIdx * 4 + 0], colorMap[boneIdx * 4 + 1], colorMap[boneIdx * 4 + 2]);\r\n\r\n if (boneWgt > 0.) {\r\n if (first) {\r\n first = false;\r\n color = c;\r\n } else {\r\n color = mix(color, c, boneWgt);\r\n }\r\n }\r\n }\r\n\r\n vColor = color;\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`,\r\n fragmentSource:\r\n `\r\n precision highp float;\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4( vColor, 1.0 );\r\n gl_FragColor = color;\r\n }\r\n `\r\n },\r\n {\r\n attributes: ['position', 'normal', 'matricesIndices', 'matricesWeights'],\r\n uniforms: [\r\n 'world', 'worldView', 'worldViewProjection', 'view', 'projection', 'viewProjection',\r\n 'colorMap'\r\n ]\r\n });\r\n\r\n shader.setFloats('colorMap', colorMapBuffer);\r\n\r\n shader.getClassName = (): string => {\r\n return \"SkeletonMapShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** private static method to create a BoneWeight Shader\r\n * @param size The size of the buffer to create (usually the bone count)\r\n * @param colorMap The gradient data to generate\r\n * @param scene The scene that the shader is scoped to\r\n * @returns an Array of floats from the color gradient values\r\n */\r\n private static _CreateBoneMapColorBuffer(size: number, colorMap: ISkeletonMapShaderColorMapKnot[], scene: Scene) {\r\n let tempGrad = new DynamicTexture('temp', { width: size, height: 1 }, scene, false);\r\n let ctx = tempGrad.getContext();\r\n let grad = ctx.createLinearGradient(0, 0, size, 0);\r\n\r\n colorMap.forEach((stop) => {\r\n grad.addColorStop(stop.location, stop.color.toHexString());\r\n });\r\n\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(0, 0, size, 1);\r\n tempGrad.update();\r\n let buffer: number[] = [];\r\n let data: Uint8ClampedArray = ctx.getImageData(0, 0, size, 1).data;\r\n let rUnit = 1 / 255;\r\n for (let i = 0; i < data.length; i++) {\r\n buffer.push(data[i] * rUnit);\r\n }\r\n tempGrad.dispose();\r\n return buffer;\r\n }\r\n\r\n /** If SkeletonViewer scene scope. */\r\n private _scene: Scene;\r\n\r\n /** Gets or sets the color used to render the skeleton */\r\n public color: Color3 = Color3.White();\r\n\r\n /** Array of the points of the skeleton fo the line view. */\r\n private _debugLines = new Array<Array<Vector3>>();\r\n\r\n /** The SkeletonViewers Mesh. */\r\n private _debugMesh: Nullable<LinesMesh>;\r\n\r\n /** The local axes Meshes. */\r\n private _localAxes: Nullable<LinesMesh> = null;\r\n\r\n /** If SkeletonViewer is enabled. */\r\n private _isEnabled = true;\r\n\r\n /** If SkeletonViewer is ready. */\r\n private _ready: boolean;\r\n\r\n /** SkeletonViewer render observable. */\r\n private _obs: Nullable<Observer<Scene>> = null;\r\n\r\n /** The Utility Layer to render the gizmos in. */\r\n private _utilityLayer: Nullable<UtilityLayerRenderer>;\r\n\r\n private _boneIndices: Set<number>;\r\n\r\n /** Gets the Scene. */\r\n get scene(): Scene {\r\n return this._scene;\r\n }\r\n /** Gets the utilityLayer. */\r\n get utilityLayer(): Nullable<UtilityLayerRenderer> {\r\n return this._utilityLayer;\r\n }\r\n /** Checks Ready Status. */\r\n get isReady(): Boolean {\r\n return this._ready;\r\n }\r\n /** Sets Ready Status. */\r\n set ready(value: boolean) {\r\n this._ready = value;\r\n }\r\n /** Gets the debugMesh */\r\n get debugMesh(): Nullable<AbstractMesh> | Nullable<LinesMesh> {\r\n return this._debugMesh;\r\n }\r\n /** Sets the debugMesh */\r\n set debugMesh(value: Nullable<AbstractMesh> | Nullable<LinesMesh>) {\r\n this._debugMesh = (value as any);\r\n }\r\n /** Gets the displayMode */\r\n get displayMode(): number {\r\n return this.options.displayMode || SkeletonViewer.DISPLAY_LINES;\r\n }\r\n /** Sets the displayMode */\r\n set displayMode(value: number) {\r\n if (value > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n value = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.options.displayMode = value;\r\n }\r\n /**\r\n * Creates a new SkeletonViewer\r\n * @param skeleton defines the skeleton to render\r\n * @param mesh defines the mesh attached to the skeleton\r\n * @param scene defines the hosting scene\r\n * @param autoUpdateBonesMatrices defines a boolean indicating if bones matrices must be forced to update before rendering (true by default)\r\n * @param renderingGroupId defines the rendering group id to use with the viewer\r\n * @param options All of the extra constructor options for the SkeletonViewer\r\n */\r\n constructor(\r\n /** defines the skeleton to render */\r\n public skeleton: Skeleton,\r\n /** defines the mesh attached to the skeleton */\r\n public mesh: AbstractMesh,\r\n /** The Scene scope*/\r\n scene: Scene,\r\n /** defines a boolean indicating if bones matrices must be forced to update before rendering (true by default) */\r\n public autoUpdateBonesMatrices: boolean = true,\r\n /** defines the rendering group id to use with the viewer */\r\n public renderingGroupId: number = 3,\r\n /** is the options for the viewer */\r\n public options: Partial<ISkeletonViewerOptions> = {}\r\n ) {\r\n\r\n this._scene = scene;\r\n this._ready = false;\r\n\r\n //Defaults\r\n options.pauseAnimations = options.pauseAnimations ?? true;\r\n options.returnToRest = options.returnToRest ?? false;\r\n options.displayMode = options.displayMode ?? SkeletonViewer.DISPLAY_LINES;\r\n options.displayOptions = options.displayOptions ?? {};\r\n options.displayOptions.midStep = options.displayOptions.midStep ?? 0.235;\r\n options.displayOptions.midStepFactor = options.displayOptions.midStepFactor ?? 0.155;\r\n options.displayOptions.sphereBaseSize = options.displayOptions.sphereBaseSize ?? 0.15;\r\n options.displayOptions.sphereScaleUnit = options.displayOptions.sphereScaleUnit ?? 2;\r\n options.displayOptions.sphereFactor = options.displayOptions.sphereFactor ?? 0.865;\r\n options.displayOptions.spurFollowsChild = options.displayOptions.spurFollowsChild ?? false;\r\n options.displayOptions.showLocalAxes = options.displayOptions.showLocalAxes ?? false;\r\n options.displayOptions.localAxesSize = options.displayOptions.localAxesSize ?? 0.075;\r\n options.computeBonesUsingShaders = options.computeBonesUsingShaders ?? true;\r\n options.useAllBones = options.useAllBones ?? true;\r\n\r\n const initialMeshBoneIndices = mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const initialMeshBoneWeights = mesh.getVerticesData(VertexBuffer.MatricesWeightsKind);\r\n this._boneIndices = new Set();\r\n\r\n if (!options.useAllBones) {\r\n if (initialMeshBoneIndices && initialMeshBoneWeights) {\r\n for (let i = 0; i < initialMeshBoneIndices.length; ++i) {\r\n const index = initialMeshBoneIndices[i], weight = initialMeshBoneWeights[i];\r\n if (weight !== 0) {\r\n this._boneIndices.add(index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Create Utility Layer */\r\n this._utilityLayer = new UtilityLayerRenderer(this._scene, false);\r\n this._utilityLayer.pickUtilitySceneFirst = false;\r\n this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = true;\r\n\r\n let displayMode = this.options.displayMode || 0;\r\n if (displayMode > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n displayMode = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.displayMode = displayMode;\r\n //Prep the Systems\r\n this.update();\r\n this._bindObs();\r\n }\r\n\r\n /** The Dynamic bindings for the update functions */\r\n private _bindObs(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._obs = this.scene.onBeforeRenderObservable.add(() => {\r\n this._displayLinesUpdate();\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used to manually update. */\r\n public update(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._displayLinesUpdate();\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERES: {\r\n this._buildSpheresAndSpurs(true);\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERE_AND_SPURS: {\r\n this._buildSpheresAndSpurs(false);\r\n break;\r\n }\r\n }\r\n\r\n this._buildLocalAxes();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the viewer is enabled */\r\n public set isEnabled(value: boolean) {\r\n if (this.isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n\r\n if (this.debugMesh) {\r\n this.debugMesh.setEnabled(value);\r\n }\r\n\r\n if (value && !this._obs) {\r\n this._bindObs();\r\n } else if (!value && this._obs) {\r\n this.scene.onBeforeRenderObservable.remove(this._obs);\r\n this._obs = null;\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n private _getBonePosition(position: Vector3, bone: Bone, meshMat: Matrix, x = 0, y = 0, z = 0): void {\r\n var tmat = TmpVectors.Matrix[0];\r\n var parentBone = bone.getParent();\r\n tmat.copyFrom(bone.getLocalMatrix());\r\n\r\n if (x !== 0 || y !== 0 || z !== 0) {\r\n var tmat2 = TmpVectors.Matrix[1];\r\n Matrix.IdentityToRef(tmat2);\r\n tmat2.setTranslationFromFloats(x, y, z);\r\n tmat2.multiplyToRef(tmat, tmat);\r\n }\r\n\r\n if (parentBone) {\r\n tmat.multiplyToRef(parentBone.getAbsoluteTransform(), tmat);\r\n }\r\n\r\n tmat.multiplyToRef(meshMat, tmat);\r\n\r\n position.x = tmat.m[12];\r\n position.y = tmat.m[13];\r\n position.z = tmat.m[14];\r\n }\r\n\r\n private _getLinesForBonesWithLength(bones: Bone[], meshMat: Matrix): void {\r\n var len = bones.length;\r\n\r\n let mesh = this.mesh._effectiveMesh;\r\n var meshPos = mesh.position;\r\n let idx = 0;\r\n for (var i = 0; i < len; i++) {\r\n var bone = bones[i];\r\n var points = this._debugLines[idx];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[idx] = points;\r\n }\r\n this._getBonePosition(points[0], bone, meshMat);\r\n this._getBonePosition(points[1], bone, meshMat, 0, bone.length, 0);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n idx++;\r\n }\r\n }\r\n\r\n private _getLinesForBonesNoLength(bones: Bone[]): void {\r\n var len = bones.length;\r\n var boneNum = 0;\r\n\r\n let mesh = this.mesh._effectiveMesh;\r\n var meshPos = mesh.position;\r\n for (var i = len - 1; i >= 0; i--) {\r\n var childBone = bones[i];\r\n var parentBone = childBone.getParent();\r\n if (!parentBone || (!this._boneIndices.has(childBone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n var points = this._debugLines[boneNum];\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[boneNum] = points;\r\n }\r\n childBone.getAbsolutePositionToRef(mesh, points[0]);\r\n parentBone.getAbsolutePositionToRef(mesh, points[1]);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n boneNum++;\r\n }\r\n }\r\n\r\n /** function to revert the mesh and scene back to the initial state. */\r\n private _revert(animationState: boolean): void {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = animationState;\r\n this.utilityLayer!.utilityLayerScene!.animationsEnabled = animationState;\r\n }\r\n }\r\n\r\n /** function to get the absolute bind pose of a bone by accumulating transformations up the bone hierarchy. */\r\n private _getAbsoluteBindPoseToRef(bone: Nullable<Bone>, matrix: Matrix) {\r\n if (bone === null || bone._index === -1) {\r\n matrix.copyFrom(Matrix.Identity());\r\n return;\r\n }\r\n\r\n this._getAbsoluteBindPoseToRef(bone.getParent(), matrix);\r\n bone.getBaseMatrix().multiplyToRef(matrix, matrix);\r\n return;\r\n }\r\n\r\n /** function to build and bind sphere joint points and spur bone representations. */\r\n private _buildSpheresAndSpurs(spheresOnly = true): void {\r\n\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n\r\n this._ready = false;\r\n let utilityLayerScene = this.utilityLayer?.utilityLayerScene!;\r\n let bones: Bone[] = this.skeleton.bones;\r\n let spheres: Array<[Mesh, Bone]> = [];\r\n let spurs: Mesh[] = [];\r\n\r\n const animationState = this.scene.animationsEnabled;\r\n\r\n try {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = false;\r\n utilityLayerScene.animationsEnabled = false;\r\n }\r\n\r\n if (this.options.returnToRest) {\r\n this.skeleton.returnToRest();\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n let longestBoneLength = Number.NEGATIVE_INFINITY;\r\n let displayOptions = this.options.displayOptions || {};\r\n\r\n for (let i = 0; i < bones.length; i++) {\r\n let bone = bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n let boneAbsoluteBindPoseTransform = new Matrix();\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n\r\n let anchorPoint = new Vector3();\r\n\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, anchorPoint);\r\n\r\n bone.children.forEach((bc, i) => {\r\n let childAbsoluteBindPoseTransform: Matrix = new Matrix();\r\n bc.getBaseMatrix().multiplyToRef(boneAbsoluteBindPoseTransform, childAbsoluteBindPoseTransform);\r\n let childPoint = new Vector3();\r\n childAbsoluteBindPoseTransform.decompose(undefined, undefined, childPoint);\r\n let distanceFromParent = Vector3.Distance(anchorPoint, childPoint);\r\n if (distanceFromParent > longestBoneLength) {\r\n longestBoneLength = distanceFromParent;\r\n }\r\n if (spheresOnly) {\r\n return;\r\n }\r\n\r\n let dir = childPoint.clone().subtract(anchorPoint.clone());\r\n let h = dir.length();\r\n let up = dir.normalize().scale(h);\r\n\r\n let midStep = displayOptions.midStep || 0.165;\r\n let midStepFactor = displayOptions.midStepFactor || 0.215;\r\n\r\n let up0 = up.scale(midStep);\r\n\r\n let spur = ExtrudeShapeCustom('skeletonViewer',\r\n {\r\n shape: [\r\n new Vector3(1, -1, 0),\r\n new Vector3(1, 1, 0),\r\n new Vector3(-1, 1, 0),\r\n new Vector3(-1, -1, 0),\r\n new Vector3(1, -1, 0)\r\n ],\r\n path: [Vector3.Zero(), up0, up],\r\n scaleFunction:\r\n (i: number) => {\r\n switch (i) {\r\n case 0:\r\n case 2:\r\n return 0;\r\n case 1:\r\n return h * midStepFactor;\r\n }\r\n return 0;\r\n },\r\n sideOrientation: Mesh.DEFAULTSIDE,\r\n updatable: false\r\n }, utilityLayerScene);\r\n\r\n let numVertices = spur.getTotalVertices();\r\n let mwk: number[] = [], mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n\r\n // Select verts at end of spur (ie vert 10 to 14) and bind to child\r\n // bone if spurFollowsChild is enabled.\r\n if (displayOptions.spurFollowsChild && i > 9) {\r\n mik.push(bc.getIndex(), 0, 0, 0);\r\n }\r\n else {\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n spur.position = anchorPoint.clone();\r\n\r\n spur.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n spur.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n spur.convertToFlatShadedMesh();\r\n\r\n spurs.push(spur);\r\n });\r\n\r\n let sphereBaseSize = displayOptions.sphereBaseSize || 0.2;\r\n\r\n let sphere = CreateSphere('skeletonViewer', {\r\n segments: 6,\r\n diameter: sphereBaseSize,\r\n updatable: true\r\n }, utilityLayerScene);\r\n\r\n const numVertices = sphere.getTotalVertices();\r\n\r\n let mwk: number[] = [], mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n\r\n sphere.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n sphere.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n\r\n sphere.position = anchorPoint.clone();\r\n spheres.push([sphere, bone]);\r\n }\r\n\r\n let sphereScaleUnit = displayOptions.sphereScaleUnit || 2;\r\n let sphereFactor = displayOptions.sphereFactor || 0.85;\r\n\r\n const meshes = [];\r\n for (let i = 0; i < spheres.length; i++) {\r\n let [sphere, bone] = spheres[i];\r\n let scale = 1 / (sphereScaleUnit / longestBoneLength);\r\n\r\n let _stepsOut = 0;\r\n let _b = bone;\r\n\r\n while ((_b.getParent()) && (_b.getParent() as Bone).getIndex() !== -1) {\r\n _stepsOut++;\r\n _b = (_b.getParent() as Bone);\r\n }\r\n sphere.scaling.scaleInPlace(scale * Math.pow(sphereFactor, _stepsOut));\r\n meshes.push(sphere);\r\n }\r\n\r\n this.debugMesh = Mesh.MergeMeshes(meshes.concat(spurs), true, true);\r\n if (this.debugMesh) {\r\n this.debugMesh.renderingGroupId = this.renderingGroupId;\r\n this.debugMesh.skeleton = this.skeleton;\r\n this.debugMesh.parent = this.mesh;\r\n this.debugMesh.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n this.debugMesh.alwaysSelectAsActiveMesh = true;\r\n }\r\n\r\n const light = this.utilityLayer!._getSharedGizmoLight();\r\n light.intensity = 0.7;\r\n\r\n this._revert(animationState);\r\n this.ready = true;\r\n } catch (err) {\r\n console.error(err);\r\n this._revert(animationState);\r\n this.dispose();\r\n }\r\n }\r\n\r\n private _buildLocalAxes(): void {\r\n if (this._localAxes) {\r\n this._localAxes.dispose();\r\n }\r\n\r\n this._localAxes = null;\r\n\r\n let displayOptions = this.options.displayOptions || {};\r\n\r\n if (!displayOptions.showLocalAxes) {\r\n return;\r\n }\r\n\r\n const targetScene = this._utilityLayer!.utilityLayerScene;\r\n const size = displayOptions.localAxesSize || 0.075;\r\n let lines = [];\r\n let colors = [];\r\n let red = new Color4(1, 0, 0, 1);\r\n let green = new Color4(0, 1, 0, 1);\r\n let blue = new Color4(0, 0, 1, 1);\r\n\r\n let mwk: number[] = [];\r\n let mik: number[] = [];\r\n const vertsPerBone = 6;\r\n\r\n for (let i in this.skeleton.bones) {\r\n let bone = this.skeleton.bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n let boneAbsoluteBindPoseTransform = new Matrix();\r\n let boneOrigin = new Vector3();\r\n\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, boneOrigin);\r\n\r\n let m = bone.getBaseMatrix().getRotationMatrix();\r\n\r\n let boneAxisX = Vector3.TransformCoordinates(new Vector3(0 + size, 0, 0), m);\r\n let boneAxisY = Vector3.TransformCoordinates(new Vector3(0, 0 + size, 0), m);\r\n let boneAxisZ = Vector3.TransformCoordinates(new Vector3(0, 0, 0 + size), m);\r\n\r\n let axisX = [boneOrigin, boneOrigin.add(boneAxisX)];\r\n let axisY = [boneOrigin, boneOrigin.add(boneAxisY)];\r\n let axisZ = [boneOrigin, boneOrigin.add(boneAxisZ)];\r\n\r\n let linePoints = [axisX, axisY, axisZ];\r\n let lineColors = [[red, red], [green, green], [blue, blue]];\r\n\r\n lines.push(...linePoints);\r\n colors.push(...lineColors);\r\n\r\n for (let j = 0; j < vertsPerBone; j++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n this._localAxes = CreateLineSystem('localAxes', { lines: lines, colors: colors, updatable: true }, targetScene);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n this._localAxes.skeleton = this.skeleton;\r\n this._localAxes.renderingGroupId = this.renderingGroupId;\r\n this._localAxes.parent = this.mesh;\r\n this._localAxes.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used for the line display. */\r\n private _displayLinesUpdate(): void {\r\n if (!this._utilityLayer) {\r\n return;\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n let mesh = this.mesh._effectiveMesh;\r\n\r\n if (this.skeleton.bones[0].length === undefined) {\r\n this._getLinesForBonesNoLength(this.skeleton.bones);\r\n } else {\r\n this._getLinesForBonesWithLength(this.skeleton.bones, mesh.getWorldMatrix());\r\n }\r\n\r\n const targetScene = this._utilityLayer.utilityLayerScene;\r\n\r\n if (targetScene) {\r\n if (!this._debugMesh) {\r\n this._debugMesh = CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: null }, targetScene);\r\n this._debugMesh.renderingGroupId = this.renderingGroupId;\r\n } else {\r\n CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: this._debugMesh }, targetScene);\r\n }\r\n this._debugMesh.position.copyFrom(this.mesh.position);\r\n this._debugMesh.color = this.color;\r\n }\r\n }\r\n /** Changes the displayMode of the skeleton viewer\r\n * @param mode The displayMode numerical value\r\n */\r\n public changeDisplayMode(mode: number): void {\r\n let wasEnabled = (this.isEnabled) ? true : false;\r\n if (this.displayMode !== mode) {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.displayMode = mode;\r\n\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n }\r\n\r\n /** Sets a display option of the skeleton viewer\r\n *\r\n * | Option | Type | Default | Description |\r\n * | ---------------- | ------- | ------- | ----------- |\r\n * | midStep | float | 0.235 | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | midStepFactor | float | 0.15 | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereBaseSize | float | 2 | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereScaleUnit | float | 0.865 | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | spurFollowsChild | boolean | false | Whether a spur should attach its far end to the child bone. |\r\n * | showLocalAxes | boolean | false | Displays local axes on all bones. |\r\n * | localAxesSize | float | 0.075 | Determines the length of each local axis. |\r\n *\r\n * @param option String of the option name\r\n * @param value The numerical option value\r\n */\r\n public changeDisplayOptions(option: string, value: number): void {\r\n let wasEnabled = (this.isEnabled) ? true : false;\r\n (this.options.displayOptions as any)[option] = value;\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n\r\n /** Release associated resources */\r\n public dispose(): void {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n }\r\n\r\n if (this._utilityLayer) {\r\n this._utilityLayer.dispose();\r\n this._utilityLayer = null;\r\n }\r\n\r\n this.ready = false;\r\n }\r\n}"]}
1
+ {"version":3,"file":"skeletonViewer.js","sourceRoot":"","sources":["../../../sourceES6/core/Debug/skeletonViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport { Color3, Color4 } from '../Maths/math.color';\r\nimport { Scene } from \"../scene\";\r\nimport { Nullable } from \"../types\";\r\nimport { Bone } from \"../Bones/bone\";\r\nimport { Skeleton } from \"../Bones/skeleton\";\r\nimport { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateLineSystem } from \"../Meshes/Builders/linesBuilder\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { Material } from '../Materials/material';\r\nimport { ShaderMaterial } from '../Materials/shaderMaterial';\r\nimport { DynamicTexture } from '../Materials/Textures/dynamicTexture';\r\nimport { VertexBuffer } from '../Buffers/buffer';\r\nimport { Effect } from '../Materials/effect';\r\n\r\nimport { ISkeletonViewerOptions, IBoneWeightShaderOptions, ISkeletonMapShaderOptions, ISkeletonMapShaderColorMapKnot } from './ISkeletonViewer';\r\nimport { Observer } from '../Misc/observable';\r\n\r\nimport { CreateSphere } from '../Meshes/Builders/sphereBuilder';\r\nimport { ExtrudeShapeCustom } from '../Meshes/Builders/shapeBuilder';\r\n\r\n/**\r\n * Class used to render a debug view of a given skeleton\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#8\r\n */\r\nexport class SkeletonViewer {\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_LINES */\r\n public static readonly DISPLAY_LINES = 0;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERES */\r\n public static readonly DISPLAY_SPHERES = 1;\r\n /** public Display constants BABYLON.SkeletonViewer.DISPLAY_SPHERE_AND_SPURS */\r\n public static readonly DISPLAY_SPHERE_AND_SPURS = 2;\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n * @see http://www.babylonjs-playground.com/#1BZJVJ#395\r\n */\r\n static CreateBoneWeightShader(options: IBoneWeightShaderOptions, scene: Scene): ShaderMaterial {\r\n\r\n let skeleton: Skeleton = options.skeleton;\r\n let colorBase: Color3 = options.colorBase ?? Color3.Black();\r\n let colorZero: Color3 = options.colorZero ?? Color3.Blue();\r\n let colorQuarter: Color3 = options.colorQuarter ?? Color3.Green();\r\n let colorHalf: Color3 = options.colorHalf ?? Color3.Yellow();\r\n let colorFull: Color3 = options.colorFull ?? Color3.Red();\r\n let targetBoneIndex: number = options.targetBoneIndex ?? 0;\r\n\r\n Effect.ShadersStore['boneWeights:' + skeleton.name + \"VertexShader\"] =\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n uniform vec3 colorBase;\r\n uniform vec3 colorZero;\r\n uniform vec3 colorQuarter;\r\n uniform vec3 colorHalf;\r\n uniform vec3 colorFull;\r\n\r\n uniform float targetBoneIndex;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n vec3 color = colorBase;\r\n float totalWeight = 0.;\r\n if(matricesIndices[0] == targetBoneIndex && matricesWeights[0] > 0.){\r\n totalWeight += matricesWeights[0];\r\n }\r\n if(matricesIndices[1] == targetBoneIndex && matricesWeights[1] > 0.){\r\n totalWeight += matricesWeights[1];\r\n }\r\n if(matricesIndices[2] == targetBoneIndex && matricesWeights[2] > 0.){\r\n totalWeight += matricesWeights[2];\r\n }\r\n if(matricesIndices[3] == targetBoneIndex && matricesWeights[3] > 0.){\r\n totalWeight += matricesWeights[3];\r\n }\r\n\r\n color = mix(color, colorZero, smoothstep(0., 0.25, totalWeight));\r\n color = mix(color, colorQuarter, smoothstep(0.25, 0.5, totalWeight));\r\n color = mix(color, colorHalf, smoothstep(0.5, 0.75, totalWeight));\r\n color = mix(color, colorFull, smoothstep(0.75, 1.0, totalWeight));\r\n vColor = color;\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`;\r\n Effect.ShadersStore['boneWeights:' + skeleton.name + \"FragmentShader\"] =\r\n `\r\n precision highp float;\r\n varying vec3 vPosition;\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4(vColor, 1.0);\r\n gl_FragColor = color;\r\n }\r\n `;\r\n let shader: ShaderMaterial = new ShaderMaterial('boneWeight:' + skeleton.name, scene,\r\n {\r\n vertex: 'boneWeights:' + skeleton.name,\r\n fragment: 'boneWeights:' + skeleton.name\r\n },\r\n {\r\n attributes: ['position', 'normal', 'matricesIndices', 'matricesWeights'],\r\n uniforms: [\r\n 'world', 'worldView', 'worldViewProjection', 'view', 'projection', 'viewProjection',\r\n 'colorBase', 'colorZero', 'colorQuarter', 'colorHalf', 'colorFull', 'targetBoneIndex'\r\n ]\r\n });\r\n\r\n shader.setColor3('colorBase', colorBase);\r\n shader.setColor3('colorZero', colorZero);\r\n shader.setColor3('colorQuarter', colorQuarter);\r\n shader.setColor3('colorHalf', colorHalf);\r\n shader.setColor3('colorFull', colorFull);\r\n shader.setFloat('targetBoneIndex', targetBoneIndex);\r\n\r\n shader.getClassName = (): string => {\r\n return \"BoneWeightShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** public static method to create a BoneWeight Shader\r\n * @param options The constructor options\r\n * @param scene The scene that the shader is scoped to\r\n * @returns The created ShaderMaterial\r\n */\r\n static CreateSkeletonMapShader(options: ISkeletonMapShaderOptions, scene: Scene) {\r\n\r\n let skeleton: Skeleton = options.skeleton;\r\n let colorMap: ISkeletonMapShaderColorMapKnot[] = options.colorMap ?? [\r\n {\r\n color: new Color3(1, 0.38, 0.18),\r\n location: 0\r\n },\r\n {\r\n color: new Color3(.59, 0.18, 1.00),\r\n location: 0.2\r\n },\r\n {\r\n color: new Color3(0.59, 1, 0.18),\r\n location: 0.4\r\n },\r\n {\r\n color: new Color3(1, 0.87, 0.17),\r\n location: 0.6\r\n },\r\n {\r\n color: new Color3(1, 0.17, 0.42),\r\n location: 0.8\r\n },\r\n {\r\n color: new Color3(0.17, 0.68, 1.0),\r\n location: 1.0\r\n }\r\n ];\r\n\r\n let bufferWidth: number = skeleton.bones.length + 1;\r\n let colorMapBuffer: number[] = SkeletonViewer._CreateBoneMapColorBuffer(bufferWidth, colorMap, scene);\r\n let shader = new ShaderMaterial('boneWeights:' + skeleton.name, scene,\r\n {\r\n vertexSource:\r\n `precision highp float;\r\n\r\n attribute vec3 position;\r\n attribute vec2 uv;\r\n\r\n uniform mat4 view;\r\n uniform mat4 projection;\r\n uniform mat4 worldViewProjection;\r\n uniform float colorMap[` + ((skeleton.bones.length) * 4) + `];\r\n\r\n #include<bonesDeclaration>\r\n #if NUM_BONE_INFLUENCERS == 0\r\n attribute vec4 matricesIndices;\r\n attribute vec4 matricesWeights;\r\n #endif\r\n #include<bakedVertexAnimationDeclaration>\r\n #include<instancesDeclaration>\r\n\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec3 positionUpdated = position;\r\n\r\n #include<instancesVertex>\r\n #include<bonesVertex>\r\n #include<bakedVertexAnimation>\r\n\r\n vec3 color = vec3(0.);\r\n bool first = true;\r\n\r\n for (int i = 0; i < 4; i++) {\r\n int boneIdx = int(matricesIndices[i]);\r\n float boneWgt = matricesWeights[i];\r\n\r\n vec3 c = vec3(colorMap[boneIdx * 4 + 0], colorMap[boneIdx * 4 + 1], colorMap[boneIdx * 4 + 2]);\r\n\r\n if (boneWgt > 0.) {\r\n if (first) {\r\n first = false;\r\n color = c;\r\n } else {\r\n color = mix(color, c, boneWgt);\r\n }\r\n }\r\n }\r\n\r\n vColor = color;\r\n\r\n vec4 worldPos = finalWorld * vec4(positionUpdated, 1.0);\r\n\r\n gl_Position = projection * view * worldPos;\r\n }`,\r\n fragmentSource:\r\n `\r\n precision highp float;\r\n varying vec3 vColor;\r\n\r\n void main() {\r\n vec4 color = vec4( vColor, 1.0 );\r\n gl_FragColor = color;\r\n }\r\n `\r\n },\r\n {\r\n attributes: ['position', 'normal', 'matricesIndices', 'matricesWeights'],\r\n uniforms: [\r\n 'world', 'worldView', 'worldViewProjection', 'view', 'projection', 'viewProjection',\r\n 'colorMap'\r\n ]\r\n });\r\n\r\n shader.setFloats('colorMap', colorMapBuffer);\r\n\r\n shader.getClassName = (): string => {\r\n return \"SkeletonMapShader\";\r\n };\r\n\r\n shader.transparencyMode = Material.MATERIAL_OPAQUE;\r\n\r\n return shader;\r\n }\r\n\r\n /** private static method to create a BoneWeight Shader\r\n * @param size The size of the buffer to create (usually the bone count)\r\n * @param colorMap The gradient data to generate\r\n * @param scene The scene that the shader is scoped to\r\n * @returns an Array of floats from the color gradient values\r\n */\r\n private static _CreateBoneMapColorBuffer(size: number, colorMap: ISkeletonMapShaderColorMapKnot[], scene: Scene) {\r\n let tempGrad = new DynamicTexture('temp', { width: size, height: 1 }, scene, false);\r\n let ctx = tempGrad.getContext();\r\n let grad = ctx.createLinearGradient(0, 0, size, 0);\r\n\r\n colorMap.forEach((stop) => {\r\n grad.addColorStop(stop.location, stop.color.toHexString());\r\n });\r\n\r\n ctx.fillStyle = grad;\r\n ctx.fillRect(0, 0, size, 1);\r\n tempGrad.update();\r\n let buffer: number[] = [];\r\n let data: Uint8ClampedArray = ctx.getImageData(0, 0, size, 1).data;\r\n let rUnit = 1 / 255;\r\n for (let i = 0; i < data.length; i++) {\r\n buffer.push(data[i] * rUnit);\r\n }\r\n tempGrad.dispose();\r\n return buffer;\r\n }\r\n\r\n /** If SkeletonViewer scene scope. */\r\n private _scene: Scene;\r\n\r\n /** Gets or sets the color used to render the skeleton */\r\n public color: Color3 = Color3.White();\r\n\r\n /** Array of the points of the skeleton fo the line view. */\r\n private _debugLines = new Array<Array<Vector3>>();\r\n\r\n /** The SkeletonViewers Mesh. */\r\n private _debugMesh: Nullable<LinesMesh>;\r\n\r\n /** The local axes Meshes. */\r\n private _localAxes: Nullable<LinesMesh> = null;\r\n\r\n /** If SkeletonViewer is enabled. */\r\n private _isEnabled = true;\r\n\r\n /** If SkeletonViewer is ready. */\r\n private _ready: boolean;\r\n\r\n /** SkeletonViewer render observable. */\r\n private _obs: Nullable<Observer<Scene>> = null;\r\n\r\n /** The Utility Layer to render the gizmos in. */\r\n private _utilityLayer: Nullable<UtilityLayerRenderer>;\r\n\r\n private _boneIndices: Set<number>;\r\n\r\n /** Gets the Scene. */\r\n get scene(): Scene {\r\n return this._scene;\r\n }\r\n /** Gets the utilityLayer. */\r\n get utilityLayer(): Nullable<UtilityLayerRenderer> {\r\n return this._utilityLayer;\r\n }\r\n /** Checks Ready Status. */\r\n get isReady(): Boolean {\r\n return this._ready;\r\n }\r\n /** Sets Ready Status. */\r\n set ready(value: boolean) {\r\n this._ready = value;\r\n }\r\n /** Gets the debugMesh */\r\n get debugMesh(): Nullable<AbstractMesh> | Nullable<LinesMesh> {\r\n return this._debugMesh;\r\n }\r\n /** Sets the debugMesh */\r\n set debugMesh(value: Nullable<AbstractMesh> | Nullable<LinesMesh>) {\r\n this._debugMesh = (value as any);\r\n }\r\n /** Gets the displayMode */\r\n get displayMode(): number {\r\n return this.options.displayMode || SkeletonViewer.DISPLAY_LINES;\r\n }\r\n /** Sets the displayMode */\r\n set displayMode(value: number) {\r\n if (value > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n value = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.options.displayMode = value;\r\n }\r\n /**\r\n * Creates a new SkeletonViewer\r\n * @param skeleton defines the skeleton to render\r\n * @param mesh defines the mesh attached to the skeleton\r\n * @param scene defines the hosting scene\r\n * @param autoUpdateBonesMatrices defines a boolean indicating if bones matrices must be forced to update before rendering (true by default)\r\n * @param renderingGroupId defines the rendering group id to use with the viewer\r\n * @param options All of the extra constructor options for the SkeletonViewer\r\n */\r\n constructor(\r\n /** defines the skeleton to render */\r\n public skeleton: Skeleton,\r\n /** defines the mesh attached to the skeleton */\r\n public mesh: AbstractMesh,\r\n /** The Scene scope*/\r\n scene: Scene,\r\n /** defines a boolean indicating if bones matrices must be forced to update before rendering (true by default) */\r\n public autoUpdateBonesMatrices: boolean = true,\r\n /** defines the rendering group id to use with the viewer */\r\n public renderingGroupId: number = 3,\r\n /** is the options for the viewer */\r\n public options: Partial<ISkeletonViewerOptions> = {}\r\n ) {\r\n\r\n this._scene = scene;\r\n this._ready = false;\r\n\r\n //Defaults\r\n options.pauseAnimations = options.pauseAnimations ?? true;\r\n options.returnToRest = options.returnToRest ?? false;\r\n options.displayMode = options.displayMode ?? SkeletonViewer.DISPLAY_LINES;\r\n options.displayOptions = options.displayOptions ?? {};\r\n options.displayOptions.midStep = options.displayOptions.midStep ?? 0.235;\r\n options.displayOptions.midStepFactor = options.displayOptions.midStepFactor ?? 0.155;\r\n options.displayOptions.sphereBaseSize = options.displayOptions.sphereBaseSize ?? 0.15;\r\n options.displayOptions.sphereScaleUnit = options.displayOptions.sphereScaleUnit ?? 2;\r\n options.displayOptions.sphereFactor = options.displayOptions.sphereFactor ?? 0.865;\r\n options.displayOptions.spurFollowsChild = options.displayOptions.spurFollowsChild ?? false;\r\n options.displayOptions.showLocalAxes = options.displayOptions.showLocalAxes ?? false;\r\n options.displayOptions.localAxesSize = options.displayOptions.localAxesSize ?? 0.075;\r\n options.computeBonesUsingShaders = options.computeBonesUsingShaders ?? true;\r\n options.useAllBones = options.useAllBones ?? true;\r\n\r\n const initialMeshBoneIndices = mesh.getVerticesData(VertexBuffer.MatricesIndicesKind);\r\n const initialMeshBoneWeights = mesh.getVerticesData(VertexBuffer.MatricesWeightsKind);\r\n this._boneIndices = new Set();\r\n\r\n if (!options.useAllBones) {\r\n if (initialMeshBoneIndices && initialMeshBoneWeights) {\r\n for (let i = 0; i < initialMeshBoneIndices.length; ++i) {\r\n const index = initialMeshBoneIndices[i], weight = initialMeshBoneWeights[i];\r\n if (weight !== 0) {\r\n this._boneIndices.add(index);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /* Create Utility Layer */\r\n this._utilityLayer = new UtilityLayerRenderer(this._scene, false);\r\n this._utilityLayer.pickUtilitySceneFirst = false;\r\n this._utilityLayer.utilityLayerScene.autoClearDepthAndStencil = true;\r\n\r\n let displayMode = this.options.displayMode || 0;\r\n if (displayMode > SkeletonViewer.DISPLAY_SPHERE_AND_SPURS) {\r\n displayMode = SkeletonViewer.DISPLAY_LINES;\r\n }\r\n this.displayMode = displayMode;\r\n //Prep the Systems\r\n this.update();\r\n this._bindObs();\r\n }\r\n\r\n /** The Dynamic bindings for the update functions */\r\n private _bindObs(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._obs = this.scene.onBeforeRenderObservable.add(() => {\r\n this._displayLinesUpdate();\r\n });\r\n break;\r\n }\r\n }\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used to manually update. */\r\n public update(): void {\r\n switch (this.displayMode) {\r\n case SkeletonViewer.DISPLAY_LINES: {\r\n this._displayLinesUpdate();\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERES: {\r\n this._buildSpheresAndSpurs(true);\r\n break;\r\n }\r\n case SkeletonViewer.DISPLAY_SPHERE_AND_SPURS: {\r\n this._buildSpheresAndSpurs(false);\r\n break;\r\n }\r\n }\r\n\r\n this._buildLocalAxes();\r\n }\r\n\r\n /** Gets or sets a boolean indicating if the viewer is enabled */\r\n public set isEnabled(value: boolean) {\r\n if (this.isEnabled === value) {\r\n return;\r\n }\r\n\r\n this._isEnabled = value;\r\n\r\n if (this.debugMesh) {\r\n this.debugMesh.setEnabled(value);\r\n }\r\n\r\n if (value && !this._obs) {\r\n this._bindObs();\r\n } else if (!value && this._obs) {\r\n this.scene.onBeforeRenderObservable.remove(this._obs);\r\n this._obs = null;\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n private _getBonePosition(position: Vector3, bone: Bone, meshMat: Matrix, x = 0, y = 0, z = 0): void {\r\n var tmat = TmpVectors.Matrix[0];\r\n var parentBone = bone.getParent();\r\n tmat.copyFrom(bone.getLocalMatrix());\r\n\r\n if (x !== 0 || y !== 0 || z !== 0) {\r\n var tmat2 = TmpVectors.Matrix[1];\r\n Matrix.IdentityToRef(tmat2);\r\n tmat2.setTranslationFromFloats(x, y, z);\r\n tmat2.multiplyToRef(tmat, tmat);\r\n }\r\n\r\n if (parentBone) {\r\n tmat.multiplyToRef(parentBone.getAbsoluteTransform(), tmat);\r\n }\r\n\r\n tmat.multiplyToRef(meshMat, tmat);\r\n\r\n position.x = tmat.m[12];\r\n position.y = tmat.m[13];\r\n position.z = tmat.m[14];\r\n }\r\n\r\n private _getLinesForBonesWithLength(bones: Bone[], meshMat: Matrix): void {\r\n var len = bones.length;\r\n\r\n let mesh = this.mesh;\r\n var meshPos = mesh.position;\r\n let idx = 0;\r\n for (var i = 0; i < len; i++) {\r\n var bone = bones[i];\r\n var points = this._debugLines[idx];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[idx] = points;\r\n }\r\n this._getBonePosition(points[0], bone, meshMat);\r\n this._getBonePosition(points[1], bone, meshMat, 0, bone.length, 0);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n idx++;\r\n }\r\n }\r\n\r\n private _getLinesForBonesNoLength(bones: Bone[]): void {\r\n var len = bones.length;\r\n var boneNum = 0;\r\n\r\n let mesh = this.mesh;\r\n var meshPos = mesh.position;\r\n for (var i = len - 1; i >= 0; i--) {\r\n var childBone = bones[i];\r\n var parentBone = childBone.getParent();\r\n if (!parentBone || (!this._boneIndices.has(childBone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n var points = this._debugLines[boneNum];\r\n if (!points) {\r\n points = [Vector3.Zero(), Vector3.Zero()];\r\n this._debugLines[boneNum] = points;\r\n }\r\n childBone.getAbsolutePositionToRef(mesh, points[0]);\r\n parentBone.getAbsolutePositionToRef(mesh, points[1]);\r\n points[0].subtractInPlace(meshPos);\r\n points[1].subtractInPlace(meshPos);\r\n boneNum++;\r\n }\r\n }\r\n\r\n /** function to revert the mesh and scene back to the initial state. */\r\n private _revert(animationState: boolean): void {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = animationState;\r\n this.utilityLayer!.utilityLayerScene!.animationsEnabled = animationState;\r\n }\r\n }\r\n\r\n /** function to get the absolute bind pose of a bone by accumulating transformations up the bone hierarchy. */\r\n private _getAbsoluteBindPoseToRef(bone: Nullable<Bone>, matrix: Matrix) {\r\n if (bone === null || bone._index === -1) {\r\n matrix.copyFrom(Matrix.Identity());\r\n return;\r\n }\r\n\r\n this._getAbsoluteBindPoseToRef(bone.getParent(), matrix);\r\n bone.getBaseMatrix().multiplyToRef(matrix, matrix);\r\n return;\r\n }\r\n\r\n /** function to build and bind sphere joint points and spur bone representations. */\r\n private _buildSpheresAndSpurs(spheresOnly = true): void {\r\n\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n\r\n this._ready = false;\r\n let utilityLayerScene = this.utilityLayer?.utilityLayerScene!;\r\n let bones: Bone[] = this.skeleton.bones;\r\n let spheres: Array<[Mesh, Bone]> = [];\r\n let spurs: Mesh[] = [];\r\n\r\n const animationState = this.scene.animationsEnabled;\r\n\r\n try {\r\n if (this.options.pauseAnimations) {\r\n this.scene.animationsEnabled = false;\r\n utilityLayerScene.animationsEnabled = false;\r\n }\r\n\r\n if (this.options.returnToRest) {\r\n this.skeleton.returnToRest();\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n let longestBoneLength = Number.NEGATIVE_INFINITY;\r\n let displayOptions = this.options.displayOptions || {};\r\n\r\n for (let i = 0; i < bones.length; i++) {\r\n let bone = bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n let boneAbsoluteBindPoseTransform = new Matrix();\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n\r\n let anchorPoint = new Vector3();\r\n\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, anchorPoint);\r\n\r\n bone.children.forEach((bc, i) => {\r\n let childAbsoluteBindPoseTransform: Matrix = new Matrix();\r\n bc.getBaseMatrix().multiplyToRef(boneAbsoluteBindPoseTransform, childAbsoluteBindPoseTransform);\r\n let childPoint = new Vector3();\r\n childAbsoluteBindPoseTransform.decompose(undefined, undefined, childPoint);\r\n let distanceFromParent = Vector3.Distance(anchorPoint, childPoint);\r\n if (distanceFromParent > longestBoneLength) {\r\n longestBoneLength = distanceFromParent;\r\n }\r\n if (spheresOnly) {\r\n return;\r\n }\r\n\r\n let dir = childPoint.clone().subtract(anchorPoint.clone());\r\n let h = dir.length();\r\n let up = dir.normalize().scale(h);\r\n\r\n let midStep = displayOptions.midStep || 0.165;\r\n let midStepFactor = displayOptions.midStepFactor || 0.215;\r\n\r\n let up0 = up.scale(midStep);\r\n\r\n let spur = ExtrudeShapeCustom('skeletonViewer',\r\n {\r\n shape: [\r\n new Vector3(1, -1, 0),\r\n new Vector3(1, 1, 0),\r\n new Vector3(-1, 1, 0),\r\n new Vector3(-1, -1, 0),\r\n new Vector3(1, -1, 0)\r\n ],\r\n path: [Vector3.Zero(), up0, up],\r\n scaleFunction:\r\n (i: number) => {\r\n switch (i) {\r\n case 0:\r\n case 2:\r\n return 0;\r\n case 1:\r\n return h * midStepFactor;\r\n }\r\n return 0;\r\n },\r\n sideOrientation: Mesh.DEFAULTSIDE,\r\n updatable: false\r\n }, utilityLayerScene);\r\n\r\n let numVertices = spur.getTotalVertices();\r\n let mwk: number[] = [], mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n\r\n // Select verts at end of spur (ie vert 10 to 14) and bind to child\r\n // bone if spurFollowsChild is enabled.\r\n if (displayOptions.spurFollowsChild && i > 9) {\r\n mik.push(bc.getIndex(), 0, 0, 0);\r\n }\r\n else {\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n spur.position = anchorPoint.clone();\r\n\r\n spur.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n spur.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n spur.convertToFlatShadedMesh();\r\n\r\n spurs.push(spur);\r\n });\r\n\r\n let sphereBaseSize = displayOptions.sphereBaseSize || 0.2;\r\n\r\n let sphere = CreateSphere('skeletonViewer', {\r\n segments: 6,\r\n diameter: sphereBaseSize,\r\n updatable: true\r\n }, utilityLayerScene);\r\n\r\n const numVertices = sphere.getTotalVertices();\r\n\r\n let mwk: number[] = [], mik: number[] = [];\r\n\r\n for (let i = 0; i < numVertices; i++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n\r\n sphere.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n sphere.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n\r\n sphere.position = anchorPoint.clone();\r\n spheres.push([sphere, bone]);\r\n }\r\n\r\n let sphereScaleUnit = displayOptions.sphereScaleUnit || 2;\r\n let sphereFactor = displayOptions.sphereFactor || 0.85;\r\n\r\n const meshes = [];\r\n for (let i = 0; i < spheres.length; i++) {\r\n let [sphere, bone] = spheres[i];\r\n let scale = 1 / (sphereScaleUnit / longestBoneLength);\r\n\r\n let _stepsOut = 0;\r\n let _b = bone;\r\n\r\n while ((_b.getParent()) && (_b.getParent() as Bone).getIndex() !== -1) {\r\n _stepsOut++;\r\n _b = (_b.getParent() as Bone);\r\n }\r\n sphere.scaling.scaleInPlace(scale * Math.pow(sphereFactor, _stepsOut));\r\n meshes.push(sphere);\r\n }\r\n\r\n this.debugMesh = Mesh.MergeMeshes(meshes.concat(spurs), true, true);\r\n if (this.debugMesh) {\r\n this.debugMesh.renderingGroupId = this.renderingGroupId;\r\n this.debugMesh.skeleton = this.skeleton;\r\n this.debugMesh.parent = this.mesh;\r\n this.debugMesh.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n this.debugMesh.alwaysSelectAsActiveMesh = true;\r\n }\r\n\r\n const light = this.utilityLayer!._getSharedGizmoLight();\r\n light.intensity = 0.7;\r\n\r\n this._revert(animationState);\r\n this.ready = true;\r\n } catch (err) {\r\n console.error(err);\r\n this._revert(animationState);\r\n this.dispose();\r\n }\r\n }\r\n\r\n private _buildLocalAxes(): void {\r\n if (this._localAxes) {\r\n this._localAxes.dispose();\r\n }\r\n\r\n this._localAxes = null;\r\n\r\n let displayOptions = this.options.displayOptions || {};\r\n\r\n if (!displayOptions.showLocalAxes) {\r\n return;\r\n }\r\n\r\n const targetScene = this._utilityLayer!.utilityLayerScene;\r\n const size = displayOptions.localAxesSize || 0.075;\r\n let lines = [];\r\n let colors = [];\r\n let red = new Color4(1, 0, 0, 1);\r\n let green = new Color4(0, 1, 0, 1);\r\n let blue = new Color4(0, 0, 1, 1);\r\n\r\n let mwk: number[] = [];\r\n let mik: number[] = [];\r\n const vertsPerBone = 6;\r\n\r\n for (let i in this.skeleton.bones) {\r\n let bone = this.skeleton.bones[i];\r\n\r\n if (bone._index === -1 || (!this._boneIndices.has(bone.getIndex()) && !this.options.useAllBones)) {\r\n continue;\r\n }\r\n\r\n let boneAbsoluteBindPoseTransform = new Matrix();\r\n let boneOrigin = new Vector3();\r\n\r\n this._getAbsoluteBindPoseToRef(bone, boneAbsoluteBindPoseTransform);\r\n boneAbsoluteBindPoseTransform.decompose(undefined, undefined, boneOrigin);\r\n\r\n let m = bone.getBaseMatrix().getRotationMatrix();\r\n\r\n let boneAxisX = Vector3.TransformCoordinates(new Vector3(0 + size, 0, 0), m);\r\n let boneAxisY = Vector3.TransformCoordinates(new Vector3(0, 0 + size, 0), m);\r\n let boneAxisZ = Vector3.TransformCoordinates(new Vector3(0, 0, 0 + size), m);\r\n\r\n let axisX = [boneOrigin, boneOrigin.add(boneAxisX)];\r\n let axisY = [boneOrigin, boneOrigin.add(boneAxisY)];\r\n let axisZ = [boneOrigin, boneOrigin.add(boneAxisZ)];\r\n\r\n let linePoints = [axisX, axisY, axisZ];\r\n let lineColors = [[red, red], [green, green], [blue, blue]];\r\n\r\n lines.push(...linePoints);\r\n colors.push(...lineColors);\r\n\r\n for (let j = 0; j < vertsPerBone; j++) {\r\n mwk.push(1, 0, 0, 0);\r\n mik.push(bone.getIndex(), 0, 0, 0);\r\n }\r\n }\r\n\r\n this._localAxes = CreateLineSystem('localAxes', { lines: lines, colors: colors, updatable: true }, targetScene);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesWeightsKind, mwk, false);\r\n this._localAxes.setVerticesData(VertexBuffer.MatricesIndicesKind, mik, false);\r\n this._localAxes.skeleton = this.skeleton;\r\n this._localAxes.renderingGroupId = this.renderingGroupId;\r\n this._localAxes.parent = this.mesh;\r\n this._localAxes.computeBonesUsingShaders = this.options.computeBonesUsingShaders ?? true;\r\n }\r\n\r\n /** Update the viewer to sync with current skeleton state, only used for the line display. */\r\n private _displayLinesUpdate(): void {\r\n if (!this._utilityLayer) {\r\n return;\r\n }\r\n\r\n if (this.autoUpdateBonesMatrices) {\r\n this.skeleton.computeAbsoluteTransforms();\r\n }\r\n\r\n if (this.skeleton.bones[0].length === undefined) {\r\n this._getLinesForBonesNoLength(this.skeleton.bones);\r\n } else {\r\n this._getLinesForBonesWithLength(this.skeleton.bones, this.mesh.getWorldMatrix());\r\n }\r\n\r\n const targetScene = this._utilityLayer.utilityLayerScene;\r\n\r\n if (targetScene) {\r\n if (!this._debugMesh) {\r\n this._debugMesh = CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: null }, targetScene);\r\n this._debugMesh.renderingGroupId = this.renderingGroupId;\r\n } else {\r\n CreateLineSystem(\"\", { lines: this._debugLines, updatable: true, instance: this._debugMesh }, targetScene);\r\n }\r\n this._debugMesh.position.copyFrom(this.mesh.position);\r\n this._debugMesh.color = this.color;\r\n }\r\n }\r\n /** Changes the displayMode of the skeleton viewer\r\n * @param mode The displayMode numerical value\r\n */\r\n public changeDisplayMode(mode: number): void {\r\n let wasEnabled = (this.isEnabled) ? true : false;\r\n if (this.displayMode !== mode) {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.displayMode = mode;\r\n\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n }\r\n\r\n /** Sets a display option of the skeleton viewer\r\n *\r\n * | Option | Type | Default | Description |\r\n * | ---------------- | ------- | ------- | ----------- |\r\n * | midStep | float | 0.235 | A percentage between a bone and its child that determines the widest part of a spur. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | midStepFactor | float | 0.15 | Mid step width expressed as a factor of the length. A value of 0.5 makes the spur width half of the spur length. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereBaseSize | float | 2 | Sphere base size. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | sphereScaleUnit | float | 0.865 | Sphere scale factor used to scale spheres in relation to the longest bone. Only used when `displayMode` is set to `DISPLAY_SPHERE_AND_SPURS`. |\r\n * | spurFollowsChild | boolean | false | Whether a spur should attach its far end to the child bone. |\r\n * | showLocalAxes | boolean | false | Displays local axes on all bones. |\r\n * | localAxesSize | float | 0.075 | Determines the length of each local axis. |\r\n *\r\n * @param option String of the option name\r\n * @param value The numerical option value\r\n */\r\n public changeDisplayOptions(option: string, value: number): void {\r\n let wasEnabled = (this.isEnabled) ? true : false;\r\n (this.options.displayOptions as any)[option] = value;\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n this.ready = false;\r\n }\r\n this.update();\r\n this._bindObs();\r\n this.isEnabled = wasEnabled;\r\n }\r\n\r\n /** Release associated resources */\r\n public dispose(): void {\r\n this.isEnabled = false;\r\n if (this._debugMesh) {\r\n this._debugMesh.dispose();\r\n this._debugMesh = null;\r\n }\r\n\r\n if (this._utilityLayer) {\r\n this._utilityLayer.dispose();\r\n this._utilityLayer = null;\r\n }\r\n\r\n this.ready = false;\r\n }\r\n}"]}
@@ -44,7 +44,14 @@ var DeviceEventFactory = /** @class */ (function () {
44
44
  */
45
45
  DeviceEventFactory._createPointerEvent = function (deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo) {
46
46
  var evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);
47
- evt.pointerId = deviceType === DeviceType.Mouse ? 1 : deviceSlot;
47
+ if (deviceType === DeviceType.Mouse) {
48
+ evt.pointerId = 1;
49
+ evt.pointerType = "mouse";
50
+ }
51
+ else {
52
+ evt.pointerId = deviceSlot;
53
+ evt.pointerType = "touch";
54
+ }
48
55
  if (inputIndex === PointerInput.Move) {
49
56
  evt.type = "pointermove";
50
57
  }
@@ -1 +1 @@
1
- {"version":3,"file":"eventFactory.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Helpers/eventFactory.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { EventConstants, IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceInputSystem } from \"../InputDevices/inputInterfaces\";\r\n\r\n/**\r\n * Class to wrap DeviceInputSystem data into an event object\r\n */\r\nexport class DeviceEventFactory {\r\n /**\r\n * Create device input events based on provided type and slot\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object\r\n */\r\n public static CreateDeviceEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): IEvent {\r\n switch (deviceType) {\r\n case DeviceType.Keyboard:\r\n return this._createKeyboardEvent(inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n case DeviceType.Mouse:\r\n if (inputIndex === PointerInput.MouseWheelX || inputIndex === PointerInput.MouseWheelY || inputIndex === PointerInput.MouseWheelZ) {\r\n return this._createWheelEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n }\r\n case DeviceType.Touch:\r\n return this._createPointerEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n default:\r\n throw `Unable to generate event for device ${DeviceType[deviceType]}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates pointer event\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Pointer)\r\n */\r\n private static _createPointerEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.pointerId = deviceType === DeviceType.Mouse ? 1 : deviceSlot;\r\n\r\n if (inputIndex === PointerInput.Move) {\r\n evt.type = \"pointermove\";\r\n }\r\n else if (inputIndex >= PointerInput.LeftClick && inputIndex <= PointerInput.RightClick) {\r\n evt.type = (currentState === 1) ? \"pointerdown\" : \"pointerup\";\r\n evt.button = inputIndex - 2;\r\n }\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Wheel Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Wheel)\r\n */\r\n private static _createWheelEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.type = \"wheel\";\r\n evt.deltaMode = EventConstants.DOM_DELTA_PIXEL;\r\n evt.deltaX = (inputIndex === PointerInput.MouseWheelX) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelX);\r\n evt.deltaY = (inputIndex === PointerInput.MouseWheelY) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelY);\r\n evt.deltaZ = (inputIndex === PointerInput.MouseWheelZ) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelZ);\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Mouse)\r\n */\r\n private static _createMouseEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n const pointerX = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Horizontal);\r\n const pointerY = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Vertical);\r\n // If dealing with a change to the delta, grab values for event init\r\n const movementX = inputIndex === PointerInput.DeltaHorizontal ? currentState : 0;\r\n const movementY = inputIndex === PointerInput.DeltaVertical ? currentState : 0;\r\n // Get offsets from container\r\n const offsetX = inputIndex === PointerInput.DeltaHorizontal && elementToAttachTo ? movementX! - elementToAttachTo.getBoundingClientRect().x : 0;\r\n const offsetY = inputIndex === PointerInput.DeltaVertical && elementToAttachTo ? movementY! - elementToAttachTo.getBoundingClientRect().y : 0;\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.clientX = pointerX;\r\n evt.clientY = pointerY;\r\n evt.movementX = movementX;\r\n evt.movementY = movementY;\r\n evt.offsetX = offsetX;\r\n evt.offsetY = offsetY;\r\n evt.x = pointerX;\r\n evt.y = pointerY;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Keyboard Event\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Keyboard)\r\n */\r\n private static _createKeyboardEvent(inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.type = currentState === 1 ? \"keydown\" : \"keyup\";\r\n evt.key = String.fromCharCode(inputIndex);\r\n evt.keyCode = inputIndex;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Add parameters for non-character keys (Ctrl, Alt, Meta, Shift)\r\n * @param evt Event object to add parameters to\r\n * @param deviceInputSystem DeviceInputSystem to pull values from\r\n */\r\n private static _checkNonCharacterKeys(evt: any, deviceInputSystem: IDeviceInputSystem): void {\r\n const isKeyboardActive = deviceInputSystem.isDeviceAvailable(DeviceType.Keyboard);\r\n const altKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 18) === 1;\r\n const ctrlKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 17) === 1;\r\n const metaKey =\r\n isKeyboardActive &&\r\n (deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 91) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 92) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 93) === 1);\r\n const shiftKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 16) === 1;\r\n\r\n evt.altKey = altKey;\r\n evt.ctrlKey = ctrlKey;\r\n evt.metaKey = metaKey;\r\n evt.shiftKey = shiftKey;\r\n }\r\n\r\n /**\r\n * Create base event object\r\n * @param elementToAttachTo Value to use as event target\r\n * @returns\r\n */\r\n private static _createEvent(elementToAttachTo: any): any {\r\n const evt: { [k: string]: any } = {};\r\n evt.preventDefault = () => { };\r\n evt.target = elementToAttachTo;\r\n\r\n return evt;\r\n }\r\n}"]}
1
+ {"version":3,"file":"eventFactory.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Helpers/eventFactory.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { EventConstants, IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceInputSystem } from \"../InputDevices/inputInterfaces\";\r\n\r\n/**\r\n * Class to wrap DeviceInputSystem data into an event object\r\n */\r\nexport class DeviceEventFactory {\r\n /**\r\n * Create device input events based on provided type and slot\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object\r\n */\r\n public static CreateDeviceEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): IEvent {\r\n switch (deviceType) {\r\n case DeviceType.Keyboard:\r\n return this._createKeyboardEvent(inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n case DeviceType.Mouse:\r\n if (inputIndex === PointerInput.MouseWheelX || inputIndex === PointerInput.MouseWheelY || inputIndex === PointerInput.MouseWheelZ) {\r\n return this._createWheelEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n }\r\n case DeviceType.Touch:\r\n return this._createPointerEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n default:\r\n throw `Unable to generate event for device ${DeviceType[deviceType]}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates pointer event\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Pointer)\r\n */\r\n private static _createPointerEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n if (deviceType === DeviceType.Mouse) {\r\n evt.pointerId = 1;\r\n evt.pointerType = \"mouse\";\r\n }\r\n else {\r\n evt.pointerId = deviceSlot;\r\n evt.pointerType = \"touch\";\r\n }\r\n\r\n if (inputIndex === PointerInput.Move) {\r\n evt.type = \"pointermove\";\r\n }\r\n else if (inputIndex >= PointerInput.LeftClick && inputIndex <= PointerInput.RightClick) {\r\n evt.type = (currentState === 1) ? \"pointerdown\" : \"pointerup\";\r\n evt.button = inputIndex - 2;\r\n }\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Wheel Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Wheel)\r\n */\r\n private static _createWheelEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.type = \"wheel\";\r\n evt.deltaMode = EventConstants.DOM_DELTA_PIXEL;\r\n evt.deltaX = (inputIndex === PointerInput.MouseWheelX) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelX);\r\n evt.deltaY = (inputIndex === PointerInput.MouseWheelY) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelY);\r\n evt.deltaZ = (inputIndex === PointerInput.MouseWheelZ) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelZ);\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Mouse)\r\n */\r\n private static _createMouseEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n const pointerX = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Horizontal);\r\n const pointerY = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Vertical);\r\n // If dealing with a change to the delta, grab values for event init\r\n const movementX = inputIndex === PointerInput.DeltaHorizontal ? currentState : 0;\r\n const movementY = inputIndex === PointerInput.DeltaVertical ? currentState : 0;\r\n // Get offsets from container\r\n const offsetX = inputIndex === PointerInput.DeltaHorizontal && elementToAttachTo ? movementX! - elementToAttachTo.getBoundingClientRect().x : 0;\r\n const offsetY = inputIndex === PointerInput.DeltaVertical && elementToAttachTo ? movementY! - elementToAttachTo.getBoundingClientRect().y : 0;\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.clientX = pointerX;\r\n evt.clientY = pointerY;\r\n evt.movementX = movementX;\r\n evt.movementY = movementY;\r\n evt.offsetX = offsetX;\r\n evt.offsetY = offsetY;\r\n evt.x = pointerX;\r\n evt.y = pointerY;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Keyboard Event\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Keyboard)\r\n */\r\n private static _createKeyboardEvent(inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.type = currentState === 1 ? \"keydown\" : \"keyup\";\r\n evt.key = String.fromCharCode(inputIndex);\r\n evt.keyCode = inputIndex;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Add parameters for non-character keys (Ctrl, Alt, Meta, Shift)\r\n * @param evt Event object to add parameters to\r\n * @param deviceInputSystem DeviceInputSystem to pull values from\r\n */\r\n private static _checkNonCharacterKeys(evt: any, deviceInputSystem: IDeviceInputSystem): void {\r\n const isKeyboardActive = deviceInputSystem.isDeviceAvailable(DeviceType.Keyboard);\r\n const altKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 18) === 1;\r\n const ctrlKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 17) === 1;\r\n const metaKey =\r\n isKeyboardActive &&\r\n (deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 91) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 92) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 93) === 1);\r\n const shiftKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 16) === 1;\r\n\r\n evt.altKey = altKey;\r\n evt.ctrlKey = ctrlKey;\r\n evt.metaKey = metaKey;\r\n evt.shiftKey = shiftKey;\r\n }\r\n\r\n /**\r\n * Create base event object\r\n * @param elementToAttachTo Value to use as event target\r\n * @returns\r\n */\r\n private static _createEvent(elementToAttachTo: any): any {\r\n const evt: { [k: string]: any } = {};\r\n evt.preventDefault = () => { };\r\n evt.target = elementToAttachTo;\r\n\r\n return evt;\r\n }\r\n}"]}
@@ -4,10 +4,11 @@ import { Nullable } from '../../types';
4
4
  import { Observable } from '../../Misc/observable';
5
5
  import { IDeviceEvent } from './inputInterfaces';
6
6
  import { DeviceSource } from './deviceSource';
7
+ import { IDisposable } from '../../scene';
7
8
  /**
8
9
  * Class to keep track of devices
9
10
  */
10
- export declare class DeviceSourceManager {
11
+ export declare class DeviceSourceManager implements IDisposable {
11
12
  /**
12
13
  * Observable to be triggered when after a device is connected, any new observers added will be triggered against already connected devices
13
14
  */
@@ -20,22 +21,36 @@ export declare class DeviceSourceManager {
20
21
  * Observable to be triggered when after a device is disconnected
21
22
  */
22
23
  readonly onDeviceDisconnectedObservable: Observable<DeviceSource<DeviceType>>;
23
- private _deviceSourceManager;
24
+ private _engine;
25
+ private _onDisposeObserver;
26
+ private _getDeviceSource;
27
+ private _getDeviceSources;
28
+ private _getDevices;
24
29
  /**
25
30
  * Gets a DeviceSource, given a type and slot
31
+ * @param deviceType Type of Device
32
+ * @param deviceSlot Slot or ID of device
33
+ * @returns DeviceSource
26
34
  */
27
- getDeviceSource: <T extends DeviceType>(deviceType: T, deviceSlot?: number) => Nullable<DeviceSource<T>>;
35
+ getDeviceSource<T extends DeviceType>(deviceType: T, deviceSlot?: number): Nullable<DeviceSource<T>>;
28
36
  /**
29
37
  * Gets an array of DeviceSource objects for a given device type
38
+ * @param deviceType Type of Device
39
+ * @returns All available DeviceSources of a given type
30
40
  */
31
- getDeviceSources: <T extends DeviceType>(deviceType: T) => ReadonlyArray<DeviceSource<T>>;
41
+ getDeviceSources<T extends DeviceType>(deviceType: T): ReadonlyArray<DeviceSource<T>>;
32
42
  /**
33
43
  * Returns a read-only list of all available devices
44
+ * @returns All available DeviceSources
34
45
  */
35
- getDevices: () => ReadonlyArray<DeviceSource<DeviceType>>;
46
+ getDevices(): ReadonlyArray<DeviceSource<DeviceType>>;
36
47
  /**
37
48
  * Default constructor
38
49
  * @param engine Used to get canvas (if applicable)
39
50
  */
40
51
  constructor(engine: Engine);
52
+ /**
53
+ * Dispose of DeviceSourceManager
54
+ */
55
+ dispose(): void;
41
56
  }
@@ -1,3 +1,4 @@
1
+ import { Observable } from '../../Misc/observable.js';
1
2
  import { InternalDeviceSourceManager } from './internalDeviceSourceManager.js';
2
3
  /**
3
4
  * Class to keep track of devices
@@ -8,14 +9,74 @@ var DeviceSourceManager = /** @class */ (function () {
8
9
  * @param engine Used to get canvas (if applicable)
9
10
  */
10
11
  function DeviceSourceManager(engine) {
11
- this._deviceSourceManager = InternalDeviceSourceManager._Create(engine);
12
- this.onDeviceConnectedObservable = this._deviceSourceManager.onDeviceConnectedObservable;
13
- this.onInputChangedObservable = this._deviceSourceManager.onInputChangedObservable;
14
- this.onDeviceDisconnectedObservable = this._deviceSourceManager.onDeviceDisconnectedObservable;
15
- this.getDeviceSource = this._deviceSourceManager.getDeviceSource;
16
- this.getDeviceSources = this._deviceSourceManager.getDeviceSources;
17
- this.getDevices = this._deviceSourceManager.getDevices;
12
+ var _this = this;
13
+ this._engine = engine;
14
+ if (!this._engine._deviceSourceManager) {
15
+ this._engine._deviceSourceManager = new InternalDeviceSourceManager(engine);
16
+ }
17
+ this._engine._deviceSourceManager._refCount++;
18
+ // Observables
19
+ this.onDeviceConnectedObservable = new Observable(function (observer) {
20
+ _this.getDevices().forEach(function (device) {
21
+ _this.onDeviceConnectedObservable.notifyObserver(observer, device);
22
+ });
23
+ });
24
+ this.onInputChangedObservable = new Observable();
25
+ this.onDeviceDisconnectedObservable = new Observable();
26
+ this._engine._deviceSourceManager.registerManager(this);
27
+ this._getDeviceSource = this._engine._deviceSourceManager.getDeviceSource;
28
+ this._getDeviceSources = this._engine._deviceSourceManager.getDeviceSources;
29
+ this._getDevices = this._engine._deviceSourceManager.getDevices;
30
+ this._onDisposeObserver = engine.onDisposeObservable.add(function () {
31
+ _this.dispose();
32
+ });
18
33
  }
34
+ // Public Functions
35
+ /**
36
+ * Gets a DeviceSource, given a type and slot
37
+ * @param deviceType Type of Device
38
+ * @param deviceSlot Slot or ID of device
39
+ * @returns DeviceSource
40
+ */
41
+ DeviceSourceManager.prototype.getDeviceSource = function (deviceType, deviceSlot) {
42
+ return this._getDeviceSource(deviceType, deviceSlot);
43
+ };
44
+ /**
45
+ * Gets an array of DeviceSource objects for a given device type
46
+ * @param deviceType Type of Device
47
+ * @returns All available DeviceSources of a given type
48
+ */
49
+ DeviceSourceManager.prototype.getDeviceSources = function (deviceType) {
50
+ return this._getDeviceSources(deviceType);
51
+ };
52
+ /**
53
+ * Returns a read-only list of all available devices
54
+ * @returns All available DeviceSources
55
+ */
56
+ DeviceSourceManager.prototype.getDevices = function () {
57
+ return this._getDevices();
58
+ };
59
+ /**
60
+ * Dispose of DeviceSourceManager
61
+ */
62
+ DeviceSourceManager.prototype.dispose = function () {
63
+ // Null out observable refs
64
+ this.onDeviceConnectedObservable.clear();
65
+ this.onInputChangedObservable.clear();
66
+ this.onDeviceDisconnectedObservable.clear();
67
+ // Null out function refs
68
+ this._getDeviceSource = function () { return null; };
69
+ this._getDeviceSources = function () { return []; };
70
+ this._getDevices = function () { return []; };
71
+ if (this._engine._deviceSourceManager) {
72
+ this._engine._deviceSourceManager.unregisterManager(this);
73
+ if (--this._engine._deviceSourceManager._refCount < 1) {
74
+ this._engine._deviceSourceManager.dispose();
75
+ delete this._engine._deviceSourceManager;
76
+ }
77
+ }
78
+ this._engine.onDisposeObservable.remove(this._onDisposeObserver);
79
+ };
19
80
  return DeviceSourceManager;
20
81
  }());
21
82
  export { DeviceSourceManager };
@@ -1 +1 @@
1
- {"version":3,"file":"deviceSourceManager.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/InputDevices/deviceSourceManager.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E;;GAEG;AACH;IAkCI;;;OAGG;IACH,6BAAY,MAAc;QACtB,IAAI,CAAC,oBAAoB,GAAG,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAExE,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,oBAAoB,CAAC,2BAA2B,CAAC;QACzF,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,CAAC;QACnF,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,oBAAoB,CAAC,8BAA8B,CAAC;QAC/F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC;QACjE,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC;QACnE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC;IAC3D,CAAC;IACL,0BAAC;AAAD,CAAC,AAhDD,IAgDC","sourcesContent":["import { Engine } from '../../Engines/engine';\nimport { DeviceType } from './deviceEnums';\nimport { Nullable } from '../../types';\nimport { Observable } from '../../Misc/observable';\nimport { IDeviceEvent } from './inputInterfaces';\nimport { DeviceSource } from './deviceSource';\nimport { InternalDeviceSourceManager } from './internalDeviceSourceManager';\n\n/**\n * Class to keep track of devices\n */\nexport class DeviceSourceManager {\n // Public Members\n /**\n * Observable to be triggered when after a device is connected, any new observers added will be triggered against already connected devices\n */\n public readonly onDeviceConnectedObservable: Observable<DeviceSource<DeviceType>>;\n /**\n * Observable to be triggered when a device's input is changed\n */\n public readonly onInputChangedObservable: Observable<IDeviceEvent>;\n /**\n * Observable to be triggered when after a device is disconnected\n */\n public readonly onDeviceDisconnectedObservable: Observable<DeviceSource<DeviceType>>;\n\n // Private Members\n private _deviceSourceManager: InternalDeviceSourceManager;\n\n // Public Functions\n /**\n * Gets a DeviceSource, given a type and slot\n */\n public getDeviceSource: <T extends DeviceType>(deviceType: T, deviceSlot?: number) => Nullable<DeviceSource<T>>;\n\n /**\n * Gets an array of DeviceSource objects for a given device type\n */\n public getDeviceSources: <T extends DeviceType>(deviceType: T) => ReadonlyArray<DeviceSource<T>>;\n\n /**\n * Returns a read-only list of all available devices\n */\n public getDevices: () => ReadonlyArray<DeviceSource<DeviceType>>;\n\n /**\n * Default constructor\n * @param engine Used to get canvas (if applicable)\n */\n constructor(engine: Engine) {\n this._deviceSourceManager = InternalDeviceSourceManager._Create(engine);\n\n this.onDeviceConnectedObservable = this._deviceSourceManager.onDeviceConnectedObservable;\n this.onInputChangedObservable = this._deviceSourceManager.onInputChangedObservable;\n this.onDeviceDisconnectedObservable = this._deviceSourceManager.onDeviceDisconnectedObservable;\n this.getDeviceSource = this._deviceSourceManager.getDeviceSource;\n this.getDeviceSources = this._deviceSourceManager.getDeviceSources;\n this.getDevices = this._deviceSourceManager.getDevices;\n }\n}\n"]}
1
+ {"version":3,"file":"deviceSourceManager.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/InputDevices/deviceSourceManager.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from '../../Engines/engine';\nimport { DeviceType } from './deviceEnums';\nimport { Nullable } from '../../types';\nimport { Observable, Observer } from '../../Misc/observable';\nimport { IDeviceEvent } from './inputInterfaces';\nimport { DeviceSource } from './deviceSource';\nimport { InternalDeviceSourceManager } from './internalDeviceSourceManager';\nimport { IDisposable } from '../../scene';\nimport { ThinEngine } from '../../Engines/thinEngine';\n\n/**\n * Class to keep track of devices\n */\nexport class DeviceSourceManager implements IDisposable {\n // Public Members\n /**\n * Observable to be triggered when after a device is connected, any new observers added will be triggered against already connected devices\n */\n public readonly onDeviceConnectedObservable: Observable<DeviceSource<DeviceType>>;\n /**\n * Observable to be triggered when a device's input is changed\n */\n public readonly onInputChangedObservable: Observable<IDeviceEvent>;\n /**\n * Observable to be triggered when after a device is disconnected\n */\n public readonly onDeviceDisconnectedObservable: Observable<DeviceSource<DeviceType>>;\n\n // Private Members\n private _engine: Engine;\n private _onDisposeObserver: Nullable<Observer<ThinEngine>>;\n\n private _getDeviceSource: <T extends DeviceType>(deviceType: T, deviceSlot?: number) => Nullable<DeviceSource<T>>;\n private _getDeviceSources: <T extends DeviceType>(deviceType: T) => ReadonlyArray<DeviceSource<T>>;\n private _getDevices: () => ReadonlyArray<DeviceSource<DeviceType>>;\n\n // Public Functions\n /**\n * Gets a DeviceSource, given a type and slot\n * @param deviceType Type of Device\n * @param deviceSlot Slot or ID of device\n * @returns DeviceSource\n */\n public getDeviceSource<T extends DeviceType>(deviceType: T, deviceSlot?: number): Nullable<DeviceSource<T>> {\n return this._getDeviceSource(deviceType, deviceSlot);\n }\n\n /**\n * Gets an array of DeviceSource objects for a given device type\n * @param deviceType Type of Device\n * @returns All available DeviceSources of a given type\n */\n public getDeviceSources<T extends DeviceType>(deviceType: T): ReadonlyArray<DeviceSource<T>> {\n return this._getDeviceSources(deviceType);\n }\n\n /**\n * Returns a read-only list of all available devices\n * @returns All available DeviceSources\n */\n public getDevices(): ReadonlyArray<DeviceSource<DeviceType>> {\n return this._getDevices();\n }\n\n /**\n * Default constructor\n * @param engine Used to get canvas (if applicable)\n */\n constructor(engine: Engine) {\n this._engine = engine;\n if (!this._engine._deviceSourceManager) {\n this._engine._deviceSourceManager = new InternalDeviceSourceManager(engine);\n }\n this._engine._deviceSourceManager._refCount++;\n\n // Observables\n this.onDeviceConnectedObservable = new Observable<DeviceSource<DeviceType>>((observer) => {\n this.getDevices().forEach((device) => {\n this.onDeviceConnectedObservable.notifyObserver(observer, device);\n });\n });\n this.onInputChangedObservable = new Observable<IDeviceEvent>();\n this.onDeviceDisconnectedObservable = new Observable<DeviceSource<DeviceType>>();\n\n this._engine._deviceSourceManager.registerManager(this);\n\n this._getDeviceSource = this._engine._deviceSourceManager.getDeviceSource;\n this._getDeviceSources = this._engine._deviceSourceManager.getDeviceSources;\n this._getDevices = this._engine._deviceSourceManager.getDevices;\n\n this._onDisposeObserver = engine.onDisposeObservable.add(() => {\n this.dispose();\n });\n }\n\n /**\n * Dispose of DeviceSourceManager\n */\n public dispose(): void {\n // Null out observable refs\n this.onDeviceConnectedObservable.clear();\n this.onInputChangedObservable.clear();\n this.onDeviceDisconnectedObservable.clear();\n // Null out function refs\n this._getDeviceSource = () => { return null; };\n this._getDeviceSources = () => { return []; };\n this._getDevices = () => { return []; };\n\n if (this._engine._deviceSourceManager) {\n this._engine._deviceSourceManager.unregisterManager(this);\n if (--this._engine._deviceSourceManager._refCount < 1) {\n this._engine._deviceSourceManager.dispose();\n delete this._engine._deviceSourceManager;\n }\n }\n this._engine.onDisposeObservable.remove(this._onDisposeObserver);\n }\n}\n"]}
@@ -8,23 +8,28 @@ import { Engine } from '../../Engines/engine';
8
8
  declare module "../../Engines/engine" {
9
9
  interface Engine {
10
10
  /** @hidden */
11
- _deviceSourceManager: InternalDeviceSourceManager;
11
+ _deviceSourceManager?: InternalDeviceSourceManager;
12
12
  }
13
13
  }
14
14
  /** @hidden */
15
+ export interface IObservableManager {
16
+ onDeviceConnectedObservable: Observable<DeviceSource<DeviceType>>;
17
+ onInputChangedObservable: Observable<IDeviceEvent>;
18
+ onDeviceDisconnectedObservable: Observable<DeviceSource<DeviceType>>;
19
+ }
20
+ /** @hidden */
15
21
  export declare class InternalDeviceSourceManager implements IDisposable {
16
- readonly onDeviceConnectedObservable: Observable<DeviceSource<DeviceType>>;
17
- readonly onInputChangedObservable: Observable<IDeviceEvent>;
18
- readonly onDeviceDisconnectedObservable: Observable<DeviceSource<DeviceType>>;
19
22
  private readonly _devices;
20
23
  private readonly _firstDevice;
21
24
  private readonly _deviceInputSystem;
22
- private _oninputChangedObserver;
23
- static _Create(engine: Engine): InternalDeviceSourceManager;
24
- private constructor();
25
- getDeviceSource: <T extends DeviceType>(deviceType: T, deviceSlot?: number | undefined) => Nullable<DeviceSource<T>>;
26
- getDeviceSources: <T extends DeviceType>(deviceType: T) => readonly DeviceSource<T>[];
27
- getDevices: () => ReadonlyArray<DeviceSource<DeviceType>>;
25
+ private readonly _registeredManagers;
26
+ _refCount: number;
27
+ constructor(engine: Engine);
28
+ readonly getDeviceSource: <T extends DeviceType>(deviceType: T, deviceSlot?: number | undefined) => Nullable<DeviceSource<T>>;
29
+ readonly getDeviceSources: <T extends DeviceType>(deviceType: T) => readonly DeviceSource<T>[];
30
+ readonly getDevices: () => ReadonlyArray<DeviceSource<DeviceType>>;
31
+ readonly registerManager: (manager: IObservableManager) => void;
32
+ readonly unregisterManager: (manager: IObservableManager) => void;
28
33
  dispose(): void;
29
34
  /**
30
35
  * Function to add device name to device list