@babylonjs/core 7.3.1 → 7.3.3

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 (510) hide show
  1. package/Actions/condition.js.map +1 -1
  2. package/Actions/directActions.js.map +1 -1
  3. package/Actions/directAudioActions.js.map +1 -1
  4. package/Actions/interpolateValueAction.js.map +1 -1
  5. package/Animations/easing.js.map +1 -1
  6. package/Behaviors/Meshes/sixDofDragBehavior.js.map +1 -1
  7. package/Bones/bone.js.map +1 -1
  8. package/Cameras/Inputs/arcRotateCameraPointersInput.js.map +1 -1
  9. package/Cameras/Inputs/followCameraPointersInput.js.map +1 -1
  10. package/Cameras/Inputs/freeCameraMouseWheelInput.js.map +1 -1
  11. package/Cameras/Stereoscopic/anaglyphArcRotateCamera.js.map +1 -1
  12. package/Cameras/Stereoscopic/anaglyphFreeCamera.js.map +1 -1
  13. package/Cameras/Stereoscopic/anaglyphGamepadCamera.js.map +1 -1
  14. package/Cameras/Stereoscopic/anaglyphUniversalCamera.js.map +1 -1
  15. package/Cameras/Stereoscopic/stereoscopicArcRotateCamera.js.map +1 -1
  16. package/Cameras/Stereoscopic/stereoscopicFreeCamera.js.map +1 -1
  17. package/Cameras/Stereoscopic/stereoscopicGamepadCamera.js.map +1 -1
  18. package/Cameras/Stereoscopic/stereoscopicScreenUniversalCamera.js.map +1 -1
  19. package/Cameras/Stereoscopic/stereoscopicUniversalCamera.js.map +1 -1
  20. package/Cameras/VR/vrDeviceOrientationArcRotateCamera.js.map +1 -1
  21. package/Cameras/VR/vrDeviceOrientationFreeCamera.js.map +1 -1
  22. package/Cameras/VR/vrDeviceOrientationGamepadCamera.js.map +1 -1
  23. package/Cameras/VR/vrExperienceHelper.js.map +1 -1
  24. package/Cameras/arcRotateCamera.js.map +1 -1
  25. package/Cameras/camera.js.map +1 -1
  26. package/Cameras/deviceOrientationCamera.js.map +1 -1
  27. package/Cameras/flyCamera.js.map +1 -1
  28. package/Cameras/followCamera.js.map +1 -1
  29. package/Cameras/freeCamera.js.map +1 -1
  30. package/Cameras/freeCameraInputsManager.js.map +1 -1
  31. package/Cameras/gamepadCamera.js.map +1 -1
  32. package/Cameras/targetCamera.js.map +1 -1
  33. package/Cameras/touchCamera.js.map +1 -1
  34. package/Cameras/universalCamera.js.map +1 -1
  35. package/Cameras/virtualJoysticksCamera.js.map +1 -1
  36. package/Compute/computeEffect.js +4 -4
  37. package/Compute/computeEffect.js.map +1 -1
  38. package/Debug/boneAxesViewer.js.map +1 -1
  39. package/Engines/IPipelineContext.d.ts +3 -0
  40. package/Engines/IPipelineContext.js.map +1 -1
  41. package/Engines/Native/nativePipelineContext.d.ts +2 -0
  42. package/Engines/Native/nativePipelineContext.js +3 -0
  43. package/Engines/Native/nativePipelineContext.js.map +1 -1
  44. package/Engines/Native/nativeRenderTargetWrapper.js.map +1 -1
  45. package/Engines/Processors/Expressions/Operators/shaderDefineAndOperator.js.map +1 -1
  46. package/Engines/Processors/Expressions/Operators/shaderDefineArithmeticOperator.js.map +1 -1
  47. package/Engines/Processors/Expressions/Operators/shaderDefineIsDefinedOperator.js.map +1 -1
  48. package/Engines/Processors/Expressions/Operators/shaderDefineOrOperator.js.map +1 -1
  49. package/Engines/Processors/iShaderProcessor.d.ts +3 -2
  50. package/Engines/Processors/iShaderProcessor.js.map +1 -1
  51. package/Engines/Processors/shaderCodeConditionNode.js.map +1 -1
  52. package/Engines/Processors/shaderCodeTestNode.js.map +1 -1
  53. package/Engines/Processors/shaderProcessor.d.ts +15 -23
  54. package/Engines/Processors/shaderProcessor.js +332 -320
  55. package/Engines/Processors/shaderProcessor.js.map +1 -1
  56. package/Engines/WebGL/webGLPipelineContext.d.ts +2 -0
  57. package/Engines/WebGL/webGLPipelineContext.js +3 -0
  58. package/Engines/WebGL/webGLPipelineContext.js.map +1 -1
  59. package/Engines/WebGL/webGLRenderTargetWrapper.js.map +1 -1
  60. package/Engines/WebGL/webGLShaderProcessors.d.ts +3 -2
  61. package/Engines/WebGL/webGLShaderProcessors.js +2 -2
  62. package/Engines/WebGL/webGLShaderProcessors.js.map +1 -1
  63. package/Engines/WebGPU/Extensions/engine.computeShader.js +1 -1
  64. package/Engines/WebGPU/Extensions/engine.computeShader.js.map +1 -1
  65. package/Engines/WebGPU/Extensions/engine.rawTexture.js +10 -10
  66. package/Engines/WebGPU/Extensions/engine.rawTexture.js.map +1 -1
  67. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  68. package/Engines/WebGPU/webgpuDepthCullingState.js.map +1 -1
  69. package/Engines/WebGPU/webgpuHardwareTexture.d.ts +2 -0
  70. package/Engines/WebGPU/webgpuHardwareTexture.js +2 -0
  71. package/Engines/WebGPU/webgpuHardwareTexture.js.map +1 -1
  72. package/Engines/WebGPU/webgpuPipelineContext.d.ts +2 -0
  73. package/Engines/WebGPU/webgpuPipelineContext.js +3 -0
  74. package/Engines/WebGPU/webgpuPipelineContext.js.map +1 -1
  75. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.d.ts +3 -2
  76. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js +2 -4
  77. package/Engines/WebGPU/webgpuShaderProcessorsGLSL.js.map +1 -1
  78. package/Engines/WebGPU/webgpuShaderProcessorsWGSL.js.map +1 -1
  79. package/Engines/WebGPU/webgpuStencilStateComposer.js.map +1 -1
  80. package/Engines/abstractEngine.d.ts +10 -5
  81. package/Engines/abstractEngine.functions.d.ts +38 -0
  82. package/Engines/abstractEngine.functions.js +75 -0
  83. package/Engines/abstractEngine.functions.js.map +1 -0
  84. package/Engines/abstractEngine.js +34 -14
  85. package/Engines/abstractEngine.js.map +1 -1
  86. package/Engines/constants.d.ts +2 -0
  87. package/Engines/constants.js +2 -0
  88. package/Engines/constants.js.map +1 -1
  89. package/Engines/engine.d.ts +0 -8
  90. package/Engines/engine.js +0 -28
  91. package/Engines/engine.js.map +1 -1
  92. package/Engines/nativeEngine.js.map +1 -1
  93. package/Engines/nullEngine.js.map +1 -1
  94. package/Engines/thinEngine.d.ts +11 -6
  95. package/Engines/thinEngine.functions.d.ts +96 -0
  96. package/Engines/thinEngine.functions.js +249 -0
  97. package/Engines/thinEngine.functions.js.map +1 -0
  98. package/Engines/thinEngine.js +50 -129
  99. package/Engines/thinEngine.js.map +1 -1
  100. package/Engines/webgpuEngine.js +5 -1
  101. package/Engines/webgpuEngine.js.map +1 -1
  102. package/Events/keyboardEvents.js.map +1 -1
  103. package/FlowGraph/Blocks/Data/flowGraphBinaryOperationBlock.js.map +1 -1
  104. package/FlowGraph/Blocks/Data/flowGraphCachedOperationBlock.js.map +1 -1
  105. package/FlowGraph/Blocks/Data/flowGraphConditionalDataBlock.js.map +1 -1
  106. package/FlowGraph/Blocks/Data/flowGraphConstantBlock.js.map +1 -1
  107. package/FlowGraph/Blocks/Data/flowGraphConstantOperationBlock.js.map +1 -1
  108. package/FlowGraph/Blocks/Data/flowGraphCoordinateTransformBlock.js.map +1 -1
  109. package/FlowGraph/Blocks/Data/flowGraphGetPropertyBlock.js.map +1 -1
  110. package/FlowGraph/Blocks/Data/flowGraphGetVariableBlock.js.map +1 -1
  111. package/FlowGraph/Blocks/Data/flowGraphTernaryOperationBlock.js.map +1 -1
  112. package/FlowGraph/Blocks/Data/flowGraphUnaryOperationBlock.js.map +1 -1
  113. package/FlowGraph/Blocks/Event/flowGraphMeshPickEventBlock.js.map +1 -1
  114. package/FlowGraph/Blocks/Event/flowGraphReceiveCustomEventBlock.js.map +1 -1
  115. package/FlowGraph/Blocks/Event/flowGraphSceneReadyEventBlock.js.map +1 -1
  116. package/FlowGraph/Blocks/Event/flowGraphSceneTickEventBlock.js.map +1 -1
  117. package/FlowGraph/Blocks/Execution/Animation/flowGraphPauseAnimationBlock.js.map +1 -1
  118. package/FlowGraph/Blocks/Execution/Animation/flowGraphPlayAnimationBlock.js.map +1 -1
  119. package/FlowGraph/Blocks/Execution/Animation/flowGraphStopAnimationBlock.js.map +1 -1
  120. package/FlowGraph/Blocks/Execution/Audio/flowGraphPlayAudioBlock.js.map +1 -1
  121. package/FlowGraph/Blocks/Execution/Audio/flowGraphStopAudioBlock.js.map +1 -1
  122. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphBranchBlock.js.map +1 -1
  123. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphCounterBlock.js.map +1 -1
  124. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDebounceBlock.js.map +1 -1
  125. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphDoNBlock.js.map +1 -1
  126. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphFlipFlopBlock.js.map +1 -1
  127. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphForLoopBlock.js.map +1 -1
  128. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphMultiGateBlock.js.map +1 -1
  129. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSequenceBlock.js.map +1 -1
  130. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphSwitchBlock.js.map +1 -1
  131. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphThrottleBlock.js.map +1 -1
  132. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphTimerBlock.js.map +1 -1
  133. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWaitAllBlock.js.map +1 -1
  134. package/FlowGraph/Blocks/Execution/ControlFlow/flowGraphWhileLoopBlock.js.map +1 -1
  135. package/FlowGraph/Blocks/Execution/flowGraphConsoleLogBlock.js.map +1 -1
  136. package/FlowGraph/Blocks/Execution/flowGraphSendCustomEventBlock.js.map +1 -1
  137. package/FlowGraph/Blocks/Execution/flowGraphSetPropertyBlock.js.map +1 -1
  138. package/FlowGraph/Blocks/Execution/flowGraphSetVariableBlock.js.map +1 -1
  139. package/FlowGraph/flowGraphDataConnection.js.map +1 -1
  140. package/FlowGraph/flowGraphExecutionBlock.js.map +1 -1
  141. package/FlowGraph/flowGraphSignalConnection.js.map +1 -1
  142. package/Gamepads/dualShockGamepad.js.map +1 -1
  143. package/Gamepads/gamepad.js.map +1 -1
  144. package/Gamepads/xboxGamepad.js.map +1 -1
  145. package/Gizmos/axisDragGizmo.js.map +1 -1
  146. package/Gizmos/axisScaleGizmo.js.map +1 -1
  147. package/Gizmos/boundingBoxGizmo.js.map +1 -1
  148. package/Gizmos/cameraGizmo.js.map +1 -1
  149. package/Gizmos/lightGizmo.js.map +1 -1
  150. package/Gizmos/planeDragGizmo.js.map +1 -1
  151. package/Gizmos/planeRotationGizmo.js.map +1 -1
  152. package/Gizmos/positionGizmo.js.map +1 -1
  153. package/Gizmos/rotationGizmo.js.map +1 -1
  154. package/Gizmos/scaleGizmo.js.map +1 -1
  155. package/Helpers/photoDome.js.map +1 -1
  156. package/Helpers/textureDome.js.map +1 -1
  157. package/Helpers/videoDome.js.map +1 -1
  158. package/Layers/glowLayer.js.map +1 -1
  159. package/Layers/highlightLayer.js.map +1 -1
  160. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  161. package/Lights/directionalLight.js.map +1 -1
  162. package/Lights/hemisphericLight.js.map +1 -1
  163. package/Lights/light.js.map +1 -1
  164. package/Lights/pointLight.js.map +1 -1
  165. package/Lights/shadowLight.js.map +1 -1
  166. package/Lights/spotLight.js.map +1 -1
  167. package/Materials/Background/backgroundMaterial.js.map +1 -1
  168. package/Materials/GaussianSplatting/gaussianSplattingMaterial.js.map +1 -1
  169. package/Materials/GreasedLine/greasedLinePluginMaterial.js.map +1 -1
  170. package/Materials/GreasedLine/greasedLineSimpleMaterial.js.map +1 -1
  171. package/Materials/Node/Blocks/Dual/clipPlanesBlock.js.map +1 -1
  172. package/Materials/Node/Blocks/Dual/currentScreenBlock.js.map +1 -1
  173. package/Materials/Node/Blocks/Dual/fogBlock.js.map +1 -1
  174. package/Materials/Node/Blocks/Dual/imageSourceBlock.js.map +1 -1
  175. package/Materials/Node/Blocks/Dual/lightBlock.js.map +1 -1
  176. package/Materials/Node/Blocks/Dual/reflectionTextureBaseBlock.js.map +1 -1
  177. package/Materials/Node/Blocks/Dual/reflectionTextureBlock.js.map +1 -1
  178. package/Materials/Node/Blocks/Dual/sceneDepthBlock.js.map +1 -1
  179. package/Materials/Node/Blocks/Dual/textureBlock.js +3 -3
  180. package/Materials/Node/Blocks/Dual/textureBlock.js.map +1 -1
  181. package/Materials/Node/Blocks/Fragment/TBNBlock.js.map +1 -1
  182. package/Materials/Node/Blocks/Fragment/derivativeBlock.js.map +1 -1
  183. package/Materials/Node/Blocks/Fragment/discardBlock.js.map +1 -1
  184. package/Materials/Node/Blocks/Fragment/fragCoordBlock.js.map +1 -1
  185. package/Materials/Node/Blocks/Fragment/fragDepthBlock.js.map +1 -1
  186. package/Materials/Node/Blocks/Fragment/fragmentOutputBlock.js.map +1 -1
  187. package/Materials/Node/Blocks/Fragment/frontFacingBlock.js.map +1 -1
  188. package/Materials/Node/Blocks/Fragment/heightToNormalBlock.js.map +1 -1
  189. package/Materials/Node/Blocks/Fragment/imageProcessingBlock.js.map +1 -1
  190. package/Materials/Node/Blocks/Fragment/perturbNormalBlock.js.map +1 -1
  191. package/Materials/Node/Blocks/Fragment/prePassOutputBlock.js.map +1 -1
  192. package/Materials/Node/Blocks/Fragment/screenSizeBlock.js.map +1 -1
  193. package/Materials/Node/Blocks/Fragment/screenSpaceBlock.js.map +1 -1
  194. package/Materials/Node/Blocks/Fragment/shadowMapBlock.js.map +1 -1
  195. package/Materials/Node/Blocks/Fragment/twirlBlock.js.map +1 -1
  196. package/Materials/Node/Blocks/Input/inputBlock.js.map +1 -1
  197. package/Materials/Node/Blocks/Input/prePassTextureBlock.js.map +1 -1
  198. package/Materials/Node/Blocks/PBR/anisotropyBlock.js.map +1 -1
  199. package/Materials/Node/Blocks/PBR/clearCoatBlock.js.map +1 -1
  200. package/Materials/Node/Blocks/PBR/iridescenceBlock.js.map +1 -1
  201. package/Materials/Node/Blocks/PBR/pbrMetallicRoughnessBlock.js.map +1 -1
  202. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  203. package/Materials/Node/Blocks/PBR/refractionBlock.js.map +1 -1
  204. package/Materials/Node/Blocks/PBR/sheenBlock.js.map +1 -1
  205. package/Materials/Node/Blocks/PBR/subSurfaceBlock.js.map +1 -1
  206. package/Materials/Node/Blocks/Particle/particleBlendMultiplyBlock.js.map +1 -1
  207. package/Materials/Node/Blocks/Particle/particleRampGradientBlock.js.map +1 -1
  208. package/Materials/Node/Blocks/Particle/particleTextureBlock.js.map +1 -1
  209. package/Materials/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  210. package/Materials/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  211. package/Materials/Node/Blocks/Vertex/bonesBlock.js.map +1 -1
  212. package/Materials/Node/Blocks/Vertex/instancesBlock.js.map +1 -1
  213. package/Materials/Node/Blocks/Vertex/lightInformationBlock.js.map +1 -1
  214. package/Materials/Node/Blocks/Vertex/morphTargetsBlock.js.map +1 -1
  215. package/Materials/Node/Blocks/Vertex/vertexOutputBlock.js.map +1 -1
  216. package/Materials/Node/Blocks/addBlock.js.map +1 -1
  217. package/Materials/Node/Blocks/arcTan2Block.js.map +1 -1
  218. package/Materials/Node/Blocks/biPlanarBlock.js.map +1 -1
  219. package/Materials/Node/Blocks/clampBlock.js.map +1 -1
  220. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  221. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  222. package/Materials/Node/Blocks/colorSplitterBlock.js.map +1 -1
  223. package/Materials/Node/Blocks/conditionalBlock.js.map +1 -1
  224. package/Materials/Node/Blocks/crossBlock.js.map +1 -1
  225. package/Materials/Node/Blocks/curveBlock.js.map +1 -1
  226. package/Materials/Node/Blocks/customBlock.js.map +1 -1
  227. package/Materials/Node/Blocks/desaturateBlock.js.map +1 -1
  228. package/Materials/Node/Blocks/distanceBlock.js.map +1 -1
  229. package/Materials/Node/Blocks/divideBlock.js.map +1 -1
  230. package/Materials/Node/Blocks/dotBlock.js.map +1 -1
  231. package/Materials/Node/Blocks/elbowBlock.js.map +1 -1
  232. package/Materials/Node/Blocks/fresnelBlock.js.map +1 -1
  233. package/Materials/Node/Blocks/gradientBlock.js.map +1 -1
  234. package/Materials/Node/Blocks/lengthBlock.js.map +1 -1
  235. package/Materials/Node/Blocks/lerpBlock.js.map +1 -1
  236. package/Materials/Node/Blocks/matrixBuilderBlock.js.map +1 -1
  237. package/Materials/Node/Blocks/matrixDeterminantBlock.js.map +1 -1
  238. package/Materials/Node/Blocks/matrixTransposeBlock.js.map +1 -1
  239. package/Materials/Node/Blocks/maxBlock.js.map +1 -1
  240. package/Materials/Node/Blocks/meshAttributeExistsBlock.js.map +1 -1
  241. package/Materials/Node/Blocks/minBlock.js.map +1 -1
  242. package/Materials/Node/Blocks/modBlock.js.map +1 -1
  243. package/Materials/Node/Blocks/multiplyBlock.js.map +1 -1
  244. package/Materials/Node/Blocks/nLerpBlock.js.map +1 -1
  245. package/Materials/Node/Blocks/negateBlock.js.map +1 -1
  246. package/Materials/Node/Blocks/normalBlendBlock.js.map +1 -1
  247. package/Materials/Node/Blocks/normalizeBlock.js.map +1 -1
  248. package/Materials/Node/Blocks/oneMinusBlock.js.map +1 -1
  249. package/Materials/Node/Blocks/posterizeBlock.js.map +1 -1
  250. package/Materials/Node/Blocks/powBlock.js.map +1 -1
  251. package/Materials/Node/Blocks/randomNumberBlock.js.map +1 -1
  252. package/Materials/Node/Blocks/reciprocalBlock.js.map +1 -1
  253. package/Materials/Node/Blocks/reflectBlock.js.map +1 -1
  254. package/Materials/Node/Blocks/refractBlock.js.map +1 -1
  255. package/Materials/Node/Blocks/remapBlock.js.map +1 -1
  256. package/Materials/Node/Blocks/replaceColorBlock.js.map +1 -1
  257. package/Materials/Node/Blocks/rotate2dBlock.js.map +1 -1
  258. package/Materials/Node/Blocks/scaleBlock.js.map +1 -1
  259. package/Materials/Node/Blocks/simplexPerlin3DBlock.js.map +1 -1
  260. package/Materials/Node/Blocks/smoothStepBlock.js.map +1 -1
  261. package/Materials/Node/Blocks/stepBlock.js.map +1 -1
  262. package/Materials/Node/Blocks/subtractBlock.js.map +1 -1
  263. package/Materials/Node/Blocks/transformBlock.js.map +1 -1
  264. package/Materials/Node/Blocks/triPlanarBlock.js.map +1 -1
  265. package/Materials/Node/Blocks/trigonometryBlock.js.map +1 -1
  266. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  267. package/Materials/Node/Blocks/vectorSplitterBlock.js.map +1 -1
  268. package/Materials/Node/Blocks/viewDirectionBlock.js.map +1 -1
  269. package/Materials/Node/Blocks/voronoiNoiseBlock.js.map +1 -1
  270. package/Materials/Node/Blocks/waveBlock.js.map +1 -1
  271. package/Materials/Node/Blocks/worleyNoise3DBlock.js.map +1 -1
  272. package/Materials/Node/nodeMaterial.js.map +1 -1
  273. package/Materials/Node/nodeMaterialConnectionPointCustomObject.js.map +1 -1
  274. package/Materials/PBR/pbrAnisotropicConfiguration.js.map +1 -1
  275. package/Materials/PBR/pbrBRDFConfiguration.js.map +1 -1
  276. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  277. package/Materials/PBR/pbrBaseSimpleMaterial.js.map +1 -1
  278. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  279. package/Materials/PBR/pbrIridescenceConfiguration.js.map +1 -1
  280. package/Materials/PBR/pbrMaterial.js.map +1 -1
  281. package/Materials/PBR/pbrMetallicRoughnessMaterial.js.map +1 -1
  282. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  283. package/Materials/PBR/pbrSpecularGlossinessMaterial.js.map +1 -1
  284. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  285. package/Materials/Textures/MultiviewRenderTarget.js.map +1 -1
  286. package/Materials/Textures/Procedurals/customProceduralTexture.js.map +1 -1
  287. package/Materials/Textures/Procedurals/noiseProceduralTexture.js.map +1 -1
  288. package/Materials/Textures/Procedurals/proceduralTexture.d.ts +9 -1
  289. package/Materials/Textures/Procedurals/proceduralTexture.js +16 -0
  290. package/Materials/Textures/Procedurals/proceduralTexture.js.map +1 -1
  291. package/Materials/Textures/baseTexture.js.map +1 -1
  292. package/Materials/Textures/colorGradingTexture.js.map +1 -1
  293. package/Materials/Textures/cubeTexture.js.map +1 -1
  294. package/Materials/Textures/dynamicTexture.js.map +1 -1
  295. package/Materials/Textures/equiRectangularCubeTexture.js +1 -1
  296. package/Materials/Textures/equiRectangularCubeTexture.js.map +1 -1
  297. package/Materials/Textures/hdrCubeTexture.js.map +1 -1
  298. package/Materials/Textures/htmlElementTexture.js.map +1 -1
  299. package/Materials/Textures/internalTexture.js.map +1 -1
  300. package/Materials/Textures/mirrorTexture.js.map +1 -1
  301. package/Materials/Textures/multiRenderTarget.js.map +1 -1
  302. package/Materials/Textures/prePassRenderTarget.js.map +1 -1
  303. package/Materials/Textures/rawCubeTexture.js.map +1 -1
  304. package/Materials/Textures/refractionTexture.js.map +1 -1
  305. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  306. package/Materials/Textures/texture.js.map +1 -1
  307. package/Materials/Textures/thinRenderTargetTexture.js.map +1 -1
  308. package/Materials/Textures/videoTexture.js.map +1 -1
  309. package/Materials/effect.d.ts +11 -6
  310. package/Materials/effect.functions.d.ts +86 -0
  311. package/Materials/effect.functions.js +185 -0
  312. package/Materials/effect.functions.js.map +1 -0
  313. package/Materials/effect.js +94 -153
  314. package/Materials/effect.js.map +1 -1
  315. package/Materials/effect.webgl.functions.d.ts +13 -0
  316. package/Materials/effect.webgl.functions.js +83 -0
  317. package/Materials/effect.webgl.functions.js.map +1 -0
  318. package/Materials/material.decalMapConfiguration.js.map +1 -1
  319. package/Materials/material.detailMapConfiguration.js.map +1 -1
  320. package/Materials/materialPluginManager.js +2 -2
  321. package/Materials/materialPluginManager.js.map +1 -1
  322. package/Materials/meshDebugPluginMaterial.js.map +1 -1
  323. package/Materials/multiMaterial.js.map +1 -1
  324. package/Materials/pushMaterial.js.map +1 -1
  325. package/Materials/shaderMaterial.js.map +1 -1
  326. package/Materials/standardMaterial.js.map +1 -1
  327. package/Meshes/Compression/dracoCompression.js.map +1 -1
  328. package/Meshes/Compression/dracoCompressionWorker.d.ts +1 -1
  329. package/Meshes/Compression/dracoCompressionWorker.js +21 -10
  330. package/Meshes/Compression/dracoCompressionWorker.js.map +1 -1
  331. package/Meshes/GaussianSplatting/gaussianSplattingMesh.js.map +1 -1
  332. package/Meshes/GreasedLine/greasedLineBaseMesh.js.map +1 -1
  333. package/Meshes/GreasedLine/greasedLineMesh.js.map +1 -1
  334. package/Meshes/GreasedLine/greasedLineRibbonMesh.js.map +1 -1
  335. package/Meshes/Node/Blocks/Instances/instantiateBaseBlock.js.map +1 -1
  336. package/Meshes/Node/Blocks/Instances/instantiateBlock.js.map +1 -1
  337. package/Meshes/Node/Blocks/Instances/instantiateLinearBlock.js.map +1 -1
  338. package/Meshes/Node/Blocks/Instances/instantiateOnFacesBlock.js.map +1 -1
  339. package/Meshes/Node/Blocks/Instances/instantiateOnVerticesBlock.js.map +1 -1
  340. package/Meshes/Node/Blocks/Instances/instantiateOnVolumeBlock.js.map +1 -1
  341. package/Meshes/Node/Blocks/Instances/instantiateRadialBlock.js.map +1 -1
  342. package/Meshes/Node/Blocks/Matrices/alignBlock.js.map +1 -1
  343. package/Meshes/Node/Blocks/Matrices/rotationXBlock.js.map +1 -1
  344. package/Meshes/Node/Blocks/Matrices/rotationYBlock.js.map +1 -1
  345. package/Meshes/Node/Blocks/Matrices/rotationZBlock.js.map +1 -1
  346. package/Meshes/Node/Blocks/Matrices/scalingBlock.js.map +1 -1
  347. package/Meshes/Node/Blocks/Matrices/translationBlock.js.map +1 -1
  348. package/Meshes/Node/Blocks/Set/setColorsBlock.js.map +1 -1
  349. package/Meshes/Node/Blocks/Set/setMaterialIDBlock.js.map +1 -1
  350. package/Meshes/Node/Blocks/Set/setNormalsBlock.js.map +1 -1
  351. package/Meshes/Node/Blocks/Set/setPositionsBlock.js.map +1 -1
  352. package/Meshes/Node/Blocks/Set/setTangentsBlock.js.map +1 -1
  353. package/Meshes/Node/Blocks/Set/setUVsBlock.js.map +1 -1
  354. package/Meshes/Node/Blocks/Sources/boxBlock.js.map +1 -1
  355. package/Meshes/Node/Blocks/Sources/capsuleBlock.js.map +1 -1
  356. package/Meshes/Node/Blocks/Sources/cylinderBlock.js.map +1 -1
  357. package/Meshes/Node/Blocks/Sources/discBlock.js.map +1 -1
  358. package/Meshes/Node/Blocks/Sources/gridBlock.js.map +1 -1
  359. package/Meshes/Node/Blocks/Sources/icoSphereBlock.js.map +1 -1
  360. package/Meshes/Node/Blocks/Sources/meshBlock.js.map +1 -1
  361. package/Meshes/Node/Blocks/Sources/nullBlock.js.map +1 -1
  362. package/Meshes/Node/Blocks/Sources/planeBlock.js.map +1 -1
  363. package/Meshes/Node/Blocks/Sources/sphereBlock.js.map +1 -1
  364. package/Meshes/Node/Blocks/Sources/torusBlock.js.map +1 -1
  365. package/Meshes/Node/Blocks/Teleport/teleportInBlock.js.map +1 -1
  366. package/Meshes/Node/Blocks/Teleport/teleportOutBlock.js.map +1 -1
  367. package/Meshes/Node/Blocks/Textures/geometryTextureBlock.js.map +1 -1
  368. package/Meshes/Node/Blocks/Textures/geometryTextureFetchBlock.js.map +1 -1
  369. package/Meshes/Node/Blocks/booleanGeometryBlock.js.map +1 -1
  370. package/Meshes/Node/Blocks/boundingBlock.js.map +1 -1
  371. package/Meshes/Node/Blocks/computeNormalsBlock.js.map +1 -1
  372. package/Meshes/Node/Blocks/conditionBlock.js.map +1 -1
  373. package/Meshes/Node/Blocks/debugBlock.js.map +1 -1
  374. package/Meshes/Node/Blocks/geometryArcTan2Block.js.map +1 -1
  375. package/Meshes/Node/Blocks/geometryClampBlock.js.map +1 -1
  376. package/Meshes/Node/Blocks/geometryCollectionBlock.js.map +1 -1
  377. package/Meshes/Node/Blocks/geometryCrossBlock.js.map +1 -1
  378. package/Meshes/Node/Blocks/geometryCurveBlock.js.map +1 -1
  379. package/Meshes/Node/Blocks/geometryDesaturateBlock.js.map +1 -1
  380. package/Meshes/Node/Blocks/geometryDistanceBlock.js.map +1 -1
  381. package/Meshes/Node/Blocks/geometryDotBlock.js.map +1 -1
  382. package/Meshes/Node/Blocks/geometryElbowBlock.js.map +1 -1
  383. package/Meshes/Node/Blocks/geometryInfoBlock.js.map +1 -1
  384. package/Meshes/Node/Blocks/geometryInputBlock.js.map +1 -1
  385. package/Meshes/Node/Blocks/geometryLengthBlock.js.map +1 -1
  386. package/Meshes/Node/Blocks/geometryLerpBlock.js.map +1 -1
  387. package/Meshes/Node/Blocks/geometryModBlock.js.map +1 -1
  388. package/Meshes/Node/Blocks/geometryNLerpBlock.js.map +1 -1
  389. package/Meshes/Node/Blocks/geometryOptimizeBlock.js.map +1 -1
  390. package/Meshes/Node/Blocks/geometryOutputBlock.js.map +1 -1
  391. package/Meshes/Node/Blocks/geometryPosterizeBlock.js.map +1 -1
  392. package/Meshes/Node/Blocks/geometryPowBlock.js.map +1 -1
  393. package/Meshes/Node/Blocks/geometryReplaceColorBlock.js.map +1 -1
  394. package/Meshes/Node/Blocks/geometryRotate2dBlock.js.map +1 -1
  395. package/Meshes/Node/Blocks/geometrySmoothStepBlock.js.map +1 -1
  396. package/Meshes/Node/Blocks/geometryStepBlock.js.map +1 -1
  397. package/Meshes/Node/Blocks/geometryTransformBlock.js.map +1 -1
  398. package/Meshes/Node/Blocks/geometryTrigonometryBlock.js.map +1 -1
  399. package/Meshes/Node/Blocks/intFloatConverterBlock.js.map +1 -1
  400. package/Meshes/Node/Blocks/mapRangeBlock.js.map +1 -1
  401. package/Meshes/Node/Blocks/mappingBlock.js.map +1 -1
  402. package/Meshes/Node/Blocks/mathBlock.js.map +1 -1
  403. package/Meshes/Node/Blocks/matrixComposeBlock.js.map +1 -1
  404. package/Meshes/Node/Blocks/mergeGeometryBlock.js.map +1 -1
  405. package/Meshes/Node/Blocks/noiseBlock.js.map +1 -1
  406. package/Meshes/Node/Blocks/normalizeVectorBlock.js.map +1 -1
  407. package/Meshes/Node/Blocks/randomBlock.js.map +1 -1
  408. package/Meshes/Node/Blocks/vectorConverterBlock.js.map +1 -1
  409. package/Meshes/Node/nodeGeometryBlock.js +1 -0
  410. package/Meshes/Node/nodeGeometryBlock.js.map +1 -1
  411. package/Meshes/WebGL/webGLDataBuffer.js.map +1 -1
  412. package/Meshes/WebGPU/webgpuDataBuffer.js.map +1 -1
  413. package/Meshes/abstractMesh.js.map +1 -1
  414. package/Meshes/geodesicMesh.js.map +1 -1
  415. package/Meshes/goldbergMesh.js.map +1 -1
  416. package/Meshes/groundMesh.js.map +1 -1
  417. package/Meshes/instancedMesh.js.map +1 -1
  418. package/Meshes/linesMesh.js.map +1 -1
  419. package/Meshes/mesh.js.map +1 -1
  420. package/Meshes/trailMesh.js.map +1 -1
  421. package/Meshes/transformNode.js.map +1 -1
  422. package/Misc/assetsManager.js.map +1 -1
  423. package/Misc/depthReducer.js.map +1 -1
  424. package/Misc/fileTools.js +4 -3
  425. package/Misc/fileTools.js.map +1 -1
  426. package/Misc/sceneOptimizer.js.map +1 -1
  427. package/Misc/smartArray.js.map +1 -1
  428. package/Misc/workerPool.js.map +1 -1
  429. package/Particles/EmitterTypes/cylinderParticleEmitter.js.map +1 -1
  430. package/Particles/EmitterTypes/sphereParticleEmitter.js.map +1 -1
  431. package/Particles/gpuParticleSystem.js.map +1 -1
  432. package/Particles/particleSystem.js.map +1 -1
  433. package/Particles/thinParticleSystem.js.map +1 -1
  434. package/Physics/physicsRaycastResult.js.map +1 -1
  435. package/Physics/proximityCastResult.js.map +1 -1
  436. package/Physics/v1/physicsJoint.js.map +1 -1
  437. package/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline.js.map +1 -1
  438. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  439. package/PostProcesses/RenderPipeline/Pipelines/ssao2RenderingPipeline.js.map +1 -1
  440. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  441. package/PostProcesses/RenderPipeline/Pipelines/ssrRenderingPipeline.js.map +1 -1
  442. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  443. package/PostProcesses/RenderPipeline/Pipelines/taaRenderingPipeline.js.map +1 -1
  444. package/PostProcesses/anaglyphPostProcess.js.map +1 -1
  445. package/PostProcesses/blackAndWhitePostProcess.js.map +1 -1
  446. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  447. package/PostProcesses/blurPostProcess.js.map +1 -1
  448. package/PostProcesses/chromaticAberrationPostProcess.js.map +1 -1
  449. package/PostProcesses/circleOfConfusionPostProcess.js.map +1 -1
  450. package/PostProcesses/colorCorrectionPostProcess.js.map +1 -1
  451. package/PostProcesses/convolutionPostProcess.js.map +1 -1
  452. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  453. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  454. package/PostProcesses/displayPassPostProcess.js.map +1 -1
  455. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  456. package/PostProcesses/filterPostProcess.js.map +1 -1
  457. package/PostProcesses/fxaaPostProcess.js.map +1 -1
  458. package/PostProcesses/grainPostProcess.js.map +1 -1
  459. package/PostProcesses/highlightsPostProcess.js.map +1 -1
  460. package/PostProcesses/imageProcessingPostProcess.js.map +1 -1
  461. package/PostProcesses/motionBlurPostProcess.js.map +1 -1
  462. package/PostProcesses/passPostProcess.js.map +1 -1
  463. package/PostProcesses/refractionPostProcess.js.map +1 -1
  464. package/PostProcesses/screenSpaceCurvaturePostProcess.js.map +1 -1
  465. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  466. package/PostProcesses/sharpenPostProcess.js.map +1 -1
  467. package/PostProcesses/stereoscopicInterlacePostProcess.js.map +1 -1
  468. package/PostProcesses/subSurfaceScatteringPostProcess.js.map +1 -1
  469. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  470. package/PostProcesses/volumetricLightScatteringPostProcess.js.map +1 -1
  471. package/PostProcesses/vrDistortionCorrectionPostProcess.js.map +1 -1
  472. package/PostProcesses/vrMultiviewToSingleviewPostProcess.js.map +1 -1
  473. package/Rendering/GlobalIllumination/giRSMManager.js.map +1 -1
  474. package/Rendering/edgesRenderer.js.map +1 -1
  475. package/Rendering/fluidRenderer/fluidRenderingObjectCustomParticles.js.map +1 -1
  476. package/Rendering/fluidRenderer/fluidRenderingObjectParticleSystem.js.map +1 -1
  477. package/Rendering/reflectiveShadowMap.js.map +1 -1
  478. package/Sprites/sprite.js.map +1 -1
  479. package/Sprites/spritePackedManager.js.map +1 -1
  480. package/XR/features/Layers/WebXRCompositionLayer.js.map +1 -1
  481. package/XR/features/Layers/WebXRProjectionLayer.js.map +1 -1
  482. package/XR/features/WebXRAnchorSystem.js.map +1 -1
  483. package/XR/features/WebXRBackgroundRemover.js.map +1 -1
  484. package/XR/features/WebXRControllerMovement.js.map +1 -1
  485. package/XR/features/WebXRControllerPhysics.js.map +1 -1
  486. package/XR/features/WebXRControllerPointerSelection.js.map +1 -1
  487. package/XR/features/WebXRControllerTeleportation.js.map +1 -1
  488. package/XR/features/WebXRDOMOverlay.js.map +1 -1
  489. package/XR/features/WebXRDepthSensing.js.map +1 -1
  490. package/XR/features/WebXREyeTracking.js.map +1 -1
  491. package/XR/features/WebXRFeaturePointSystem.js.map +1 -1
  492. package/XR/features/WebXRHandTracking.js.map +1 -1
  493. package/XR/features/WebXRHitTest.js.map +1 -1
  494. package/XR/features/WebXRHitTestLegacy.js.map +1 -1
  495. package/XR/features/WebXRImageTracking.js.map +1 -1
  496. package/XR/features/WebXRLayers.js.map +1 -1
  497. package/XR/features/WebXRLightEstimation.js.map +1 -1
  498. package/XR/features/WebXRMeshDetector.js.map +1 -1
  499. package/XR/features/WebXRNearInteraction.js.map +1 -1
  500. package/XR/features/WebXRPlaneDetector.js.map +1 -1
  501. package/XR/features/WebXRRawCameraAccess.js.map +1 -1
  502. package/XR/features/WebXRSpaceWarp.js.map +1 -1
  503. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  504. package/XR/motionController/webXRProfiledMotionController.js.map +1 -1
  505. package/XR/native/nativeXRRenderTarget.js.map +1 -1
  506. package/XR/webXRCamera.js.map +1 -1
  507. package/XR/webXRWebGLLayer.js.map +1 -1
  508. package/assets/Draco/draco_wasm_wrapper.js +115 -115
  509. package/package.json +1 -1
  510. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"gamepad.js","sourceRoot":"","sources":["../../../../dev/core/src/Gamepads/gamepad.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,MAAM,OAAO,WAAW;IACpB;;;;OAIG;IACH;IACI;;OAEG;IACI,CAAS;IAChB;;OAEG;IACI,CAAS;QAJT,MAAC,GAAD,CAAC,CAAQ;QAIT,MAAC,GAAD,CAAC,CAAQ;IACjB,CAAC;CACP;AAwBD;;GAEG;AACH,MAAM,OAAO,OAAO;IAqDhB;;OAEG;IACH,IAAW,WAAW;QAClB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;;;;;;OASG;IACH;IACI;;OAEG;IACI,EAAU;IACjB;;OAEG;IACI,KAAa;IACpB;;OAEG;IACI,cAAmB,EAC1B,aAAqB,CAAC,EACtB,aAAqB,CAAC,EACtB,cAAsB,CAAC,EACvB,cAAsB,CAAC;QAZhB,OAAE,GAAF,EAAE,CAAQ;QAIV,UAAK,GAAL,KAAK,CAAQ;QAIb,mBAAc,GAAd,cAAc,CAAK;QA5EtB,eAAU,GAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACzC,gBAAW,GAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAElD,gBAAgB;QACT,iBAAY,GAAG,IAAI,CAAC;QAsC3B;;WAEG;QACO,sBAAiB,GAAY,KAAK,CAAC;QAqCzC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;QACpC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACtC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;SAC9H;QACD,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;YACtC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;SACjI;IACL,CAAC;IAED;;;OAGG;IACI,kBAAkB,CAAC,QAAuC;QAC7D,IAAI,CAAC,mBAAmB,GAAG,QAAQ,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,mBAAmB,CAAC,QAAuC;QAC9D,IAAI,CAAC,oBAAoB,GAAG,QAAQ,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD;;OAEG;IACH,IAAW,SAAS,CAAC,SAAsB;QACvC,IAAI,IAAI,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;YACtG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;SACvC;QACD,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IACD;;OAEG;IACH,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IACD;;OAEG;IACH,IAAW,UAAU,CAAC,SAAsB;QACxC,IAAI,IAAI,CAAC,oBAAoB,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE;YACzG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;IACjC,CAAC;IAED;;OAEG;IAEI,MAAM;QACT,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YAC1H,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBACxB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;aAC1B;SACJ;QACD,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;SAChI;IACL,CAAC;IAED;;OAEG;IACI,OAAO,KAAI,CAAC;;AA5InB;;GAEG;AACW,eAAO,GAAG,CAAC,AAAJ,CAAK;AAC1B;;GAEG;AACW,eAAO,GAAG,CAAC,AAAJ,CAAK;AAC1B;;GAEG;AACW,YAAI,GAAG,CAAC,AAAJ,CAAK;AACvB;;GAEG;AACW,oBAAY,GAAG,CAAC,AAAJ,CAAK;AAC/B;;GAEG;AACW,iBAAS,GAAG,CAAC,AAAJ,CAAK;AA4HhC;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,OAAO;IAcnC;;;OAGG;IACI,YAAY,CAAC,QAAyC;QACzD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAClC,CAAC;IACD;;;OAGG;IACI,UAAU,CAAC,QAA0C;QACxD,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACH,YAAY,EAAU,EAAE,KAAa,EAAE,cAAmB;QACtD,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QA/BrC;;WAEG;QACI,2BAAsB,GAAG,IAAI,UAAU,EAAU,CAAC;QACzD;;WAEG;QACI,yBAAoB,GAAG,IAAI,UAAU,EAAU,CAAC;QAyBnD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;IAEO,eAAe,CAAC,QAAgB,EAAE,YAAoB,EAAE,WAAmB;QAC/E,IAAI,QAAQ,KAAK,YAAY,EAAE;YAC3B,IAAI,QAAQ,KAAK,CAAC,EAAE;gBAChB,IAAI,IAAI,CAAC,aAAa,EAAE;oBACpB,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;iBACnC;gBAED,IAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC5D;YACD,IAAI,QAAQ,KAAK,CAAC,EAAE;gBAChB,IAAI,IAAI,CAAC,WAAW,EAAE;oBAClB,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;iBACjC;gBAED,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;aAC1D;SACJ;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;OAEG;IACI,MAAM;QACT,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;YACvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;SACtH;IACL,CAAC;IAED;;OAEG;IACI,OAAO;QACV,KAAK,CAAC,OAAO,EAAE,CAAC;QAChB,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,CAAC;QACpC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAC;IACtC,CAAC;CACJ","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Represents a gamepad control stick position\r\n */\r\nexport class StickValues {\r\n /**\r\n * Initializes the gamepad x and y control stick values\r\n * @param x The x component of the gamepad control stick value\r\n * @param y The y component of the gamepad control stick value\r\n */\r\n constructor(\r\n /**\r\n * The x component of the control stick\r\n */\r\n public x: number,\r\n /**\r\n * The y component of the control stick\r\n */\r\n public y: number\r\n ) {}\r\n}\r\n\r\n/**\r\n * An interface which manages callbacks for gamepad button changes\r\n */\r\nexport interface GamepadButtonChanges {\r\n /**\r\n * Called when a gamepad has been changed\r\n */\r\n changed: boolean;\r\n /**\r\n * Called when a gamepad press event has been triggered\r\n */\r\n pressChanged: boolean;\r\n /**\r\n * Called when a touch event has been triggered\r\n */\r\n touchChanged: boolean;\r\n /**\r\n * Called when a value has changed\r\n */\r\n valueChanged: boolean;\r\n}\r\n\r\n/**\r\n * Represents a gamepad\r\n */\r\nexport class Gamepad {\r\n /**\r\n * Specifies what type of gamepad this represents\r\n */\r\n public type: number;\r\n\r\n private _leftStick: StickValues = { x: 0, y: 0 };\r\n private _rightStick: StickValues = { x: 0, y: 0 };\r\n\r\n /** @internal */\r\n public _isConnected = true;\r\n\r\n private _leftStickAxisX: number;\r\n private _leftStickAxisY: number;\r\n private _rightStickAxisX: number;\r\n private _rightStickAxisY: number;\r\n\r\n /**\r\n * Triggered when the left control stick has been changed\r\n */\r\n private _onleftstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Triggered when the right control stick has been changed\r\n */\r\n private _onrightstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Represents a gamepad controller\r\n */\r\n public static GAMEPAD = 0;\r\n /**\r\n * Represents a generic controller\r\n */\r\n public static GENERIC = 1;\r\n /**\r\n * Represents an XBox controller\r\n */\r\n public static XBOX = 2;\r\n /**\r\n * Represents a pose-enabled controller\r\n */\r\n public static POSE_ENABLED = 3;\r\n /**\r\n * Represents an Dual Shock controller\r\n */\r\n public static DUALSHOCK = 4;\r\n\r\n /**\r\n * Specifies whether the left control stick should be Y-inverted\r\n */\r\n protected _invertLeftStickY: boolean = false;\r\n\r\n /**\r\n * Specifies if the gamepad has been connected\r\n */\r\n public get isConnected(): boolean {\r\n return this._isConnected;\r\n }\r\n\r\n /**\r\n * Initializes the gamepad\r\n * @param id The id of the gamepad\r\n * @param index The index of the gamepad\r\n * @param browserGamepad The browser gamepad\r\n * @param leftStickX The x component of the left joystick\r\n * @param leftStickY The y component of the left joystick\r\n * @param rightStickX The x component of the right joystick\r\n * @param rightStickY The y component of the right joystick\r\n */\r\n constructor(\r\n /**\r\n * The id of the gamepad\r\n */\r\n public id: string,\r\n /**\r\n * The index of the gamepad\r\n */\r\n public index: number,\r\n /**\r\n * The browser gamepad\r\n */\r\n public browserGamepad: any,\r\n leftStickX: number = 0,\r\n leftStickY: number = 1,\r\n rightStickX: number = 2,\r\n rightStickY: number = 3\r\n ) {\r\n this.type = Gamepad.GAMEPAD;\r\n this._leftStickAxisX = leftStickX;\r\n this._leftStickAxisY = leftStickY;\r\n this._rightStickAxisX = rightStickX;\r\n this._rightStickAxisY = rightStickY;\r\n if (this.browserGamepad.axes.length >= 2) {\r\n this._leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n }\r\n if (this.browserGamepad.axes.length >= 4) {\r\n this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Callback triggered when the left joystick has changed\r\n * @param callback callback to trigger\r\n */\r\n public onleftstickchanged(callback: (values: StickValues) => void) {\r\n this._onleftstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Callback triggered when the right joystick has changed\r\n * @param callback callback to trigger\r\n */\r\n public onrightstickchanged(callback: (values: StickValues) => void) {\r\n this._onrightstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left joystick\r\n */\r\n public get leftStick(): StickValues {\r\n return this._leftStick;\r\n }\r\n /**\r\n * Sets the left joystick values\r\n */\r\n public set leftStick(newValues: StickValues) {\r\n if (this._onleftstickchanged && (this._leftStick.x !== newValues.x || this._leftStick.y !== newValues.y)) {\r\n this._onleftstickchanged(newValues);\r\n }\r\n this._leftStick = newValues;\r\n }\r\n /**\r\n * Gets the right joystick\r\n */\r\n public get rightStick(): StickValues {\r\n return this._rightStick;\r\n }\r\n /**\r\n * Sets the right joystick value\r\n */\r\n public set rightStick(newValues: StickValues) {\r\n if (this._onrightstickchanged && (this._rightStick.x !== newValues.x || this._rightStick.y !== newValues.y)) {\r\n this._onrightstickchanged(newValues);\r\n }\r\n this._rightStick = newValues;\r\n }\r\n\r\n /**\r\n * Updates the gamepad joystick positions\r\n */\r\n\r\n public update() {\r\n if (this._leftStick) {\r\n this.leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n if (this._invertLeftStickY) {\r\n this.leftStick.y *= -1;\r\n }\r\n }\r\n if (this._rightStick) {\r\n this.rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public dispose() {}\r\n}\r\n\r\n/**\r\n * Represents a generic gamepad\r\n */\r\nexport class GenericPad extends Gamepad {\r\n private _buttons: Array<number>;\r\n private _onbuttondown: (buttonPressed: number) => void;\r\n private _onbuttonup: (buttonReleased: number) => void;\r\n\r\n /**\r\n * Observable triggered when a button has been pressed\r\n */\r\n public onButtonDownObservable = new Observable<number>();\r\n /**\r\n * Observable triggered when a button has been released\r\n */\r\n public onButtonUpObservable = new Observable<number>();\r\n\r\n /**\r\n * Callback triggered when a button has been pressed\r\n * @param callback Called when a button has been pressed\r\n */\r\n public onbuttondown(callback: (buttonPressed: number) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n /**\r\n * Callback triggered when a button has been released\r\n * @param callback Called when a button has been released\r\n */\r\n public onbuttonup(callback: (buttonReleased: number) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Initializes the generic gamepad\r\n * @param id The id of the generic gamepad\r\n * @param index The index of the generic gamepad\r\n * @param browserGamepad The browser gamepad\r\n */\r\n constructor(id: string, index: number, browserGamepad: any) {\r\n super(id, index, browserGamepad);\r\n this.type = Gamepad.GENERIC;\r\n this._buttons = new Array(browserGamepad.buttons.length);\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonIndex: number): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonIndex);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonIndex);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonIndex);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonIndex);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Updates the generic gamepad\r\n */\r\n public update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._buttons[index] = this._setButtonValue(this.browserGamepad.buttons[index].value, this._buttons[index], index);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the generic gamepad\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"gamepad.js","sourceRoot":"","sources":["../../../../dev/core/src/Gamepads/gamepad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\n\r\n/**\r\n * Represents a gamepad control stick position\r\n */\r\nexport class StickValues {\r\n /**\r\n * Initializes the gamepad x and y control stick values\r\n * @param x The x component of the gamepad control stick value\r\n * @param y The y component of the gamepad control stick value\r\n */\r\n constructor(\r\n /**\r\n * The x component of the control stick\r\n */\r\n public x: number,\r\n /**\r\n * The y component of the control stick\r\n */\r\n public y: number\r\n ) {}\r\n}\r\n\r\n/**\r\n * An interface which manages callbacks for gamepad button changes\r\n */\r\nexport interface GamepadButtonChanges {\r\n /**\r\n * Called when a gamepad has been changed\r\n */\r\n changed: boolean;\r\n /**\r\n * Called when a gamepad press event has been triggered\r\n */\r\n pressChanged: boolean;\r\n /**\r\n * Called when a touch event has been triggered\r\n */\r\n touchChanged: boolean;\r\n /**\r\n * Called when a value has changed\r\n */\r\n valueChanged: boolean;\r\n}\r\n\r\n/**\r\n * Represents a gamepad\r\n */\r\nexport class Gamepad {\r\n /**\r\n * Specifies what type of gamepad this represents\r\n */\r\n public type: number;\r\n\r\n private _leftStick: StickValues = { x: 0, y: 0 };\r\n private _rightStick: StickValues = { x: 0, y: 0 };\r\n\r\n /** @internal */\r\n public _isConnected = true;\r\n\r\n private _leftStickAxisX: number;\r\n private _leftStickAxisY: number;\r\n private _rightStickAxisX: number;\r\n private _rightStickAxisY: number;\r\n\r\n /**\r\n * Triggered when the left control stick has been changed\r\n */\r\n private _onleftstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Triggered when the right control stick has been changed\r\n */\r\n private _onrightstickchanged: (values: StickValues) => void;\r\n\r\n /**\r\n * Represents a gamepad controller\r\n */\r\n public static GAMEPAD = 0;\r\n /**\r\n * Represents a generic controller\r\n */\r\n public static GENERIC = 1;\r\n /**\r\n * Represents an XBox controller\r\n */\r\n public static XBOX = 2;\r\n /**\r\n * Represents a pose-enabled controller\r\n */\r\n public static POSE_ENABLED = 3;\r\n /**\r\n * Represents an Dual Shock controller\r\n */\r\n public static DUALSHOCK = 4;\r\n\r\n /**\r\n * Specifies whether the left control stick should be Y-inverted\r\n */\r\n protected _invertLeftStickY: boolean = false;\r\n\r\n /**\r\n * Specifies if the gamepad has been connected\r\n */\r\n public get isConnected(): boolean {\r\n return this._isConnected;\r\n }\r\n\r\n /**\r\n * Initializes the gamepad\r\n * @param id The id of the gamepad\r\n * @param index The index of the gamepad\r\n * @param browserGamepad The browser gamepad\r\n * @param leftStickX The x component of the left joystick\r\n * @param leftStickY The y component of the left joystick\r\n * @param rightStickX The x component of the right joystick\r\n * @param rightStickY The y component of the right joystick\r\n */\r\n constructor(\r\n /**\r\n * The id of the gamepad\r\n */\r\n public id: string,\r\n /**\r\n * The index of the gamepad\r\n */\r\n public index: number,\r\n /**\r\n * The browser gamepad\r\n */\r\n public browserGamepad: any,\r\n leftStickX: number = 0,\r\n leftStickY: number = 1,\r\n rightStickX: number = 2,\r\n rightStickY: number = 3\r\n ) {\r\n this.type = Gamepad.GAMEPAD;\r\n this._leftStickAxisX = leftStickX;\r\n this._leftStickAxisY = leftStickY;\r\n this._rightStickAxisX = rightStickX;\r\n this._rightStickAxisY = rightStickY;\r\n if (this.browserGamepad.axes.length >= 2) {\r\n this._leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n }\r\n if (this.browserGamepad.axes.length >= 4) {\r\n this._rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Callback triggered when the left joystick has changed\r\n * @param callback callback to trigger\r\n */\r\n public onleftstickchanged(callback: (values: StickValues) => void) {\r\n this._onleftstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Callback triggered when the right joystick has changed\r\n * @param callback callback to trigger\r\n */\r\n public onrightstickchanged(callback: (values: StickValues) => void) {\r\n this._onrightstickchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left joystick\r\n */\r\n public get leftStick(): StickValues {\r\n return this._leftStick;\r\n }\r\n /**\r\n * Sets the left joystick values\r\n */\r\n public set leftStick(newValues: StickValues) {\r\n if (this._onleftstickchanged && (this._leftStick.x !== newValues.x || this._leftStick.y !== newValues.y)) {\r\n this._onleftstickchanged(newValues);\r\n }\r\n this._leftStick = newValues;\r\n }\r\n /**\r\n * Gets the right joystick\r\n */\r\n public get rightStick(): StickValues {\r\n return this._rightStick;\r\n }\r\n /**\r\n * Sets the right joystick value\r\n */\r\n public set rightStick(newValues: StickValues) {\r\n if (this._onrightstickchanged && (this._rightStick.x !== newValues.x || this._rightStick.y !== newValues.y)) {\r\n this._onrightstickchanged(newValues);\r\n }\r\n this._rightStick = newValues;\r\n }\r\n\r\n /**\r\n * Updates the gamepad joystick positions\r\n */\r\n\r\n public update() {\r\n if (this._leftStick) {\r\n this.leftStick = { x: this.browserGamepad.axes[this._leftStickAxisX], y: this.browserGamepad.axes[this._leftStickAxisY] };\r\n if (this._invertLeftStickY) {\r\n this.leftStick.y *= -1;\r\n }\r\n }\r\n if (this._rightStick) {\r\n this.rightStick = { x: this.browserGamepad.axes[this._rightStickAxisX], y: this.browserGamepad.axes[this._rightStickAxisY] };\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public dispose() {}\r\n}\r\n\r\n/**\r\n * Represents a generic gamepad\r\n */\r\nexport class GenericPad extends Gamepad {\r\n private _buttons: Array<number>;\r\n private _onbuttondown: (buttonPressed: number) => void;\r\n private _onbuttonup: (buttonReleased: number) => void;\r\n\r\n /**\r\n * Observable triggered when a button has been pressed\r\n */\r\n public onButtonDownObservable = new Observable<number>();\r\n /**\r\n * Observable triggered when a button has been released\r\n */\r\n public onButtonUpObservable = new Observable<number>();\r\n\r\n /**\r\n * Callback triggered when a button has been pressed\r\n * @param callback Called when a button has been pressed\r\n */\r\n public onbuttondown(callback: (buttonPressed: number) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n /**\r\n * Callback triggered when a button has been released\r\n * @param callback Called when a button has been released\r\n */\r\n public onbuttonup(callback: (buttonReleased: number) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Initializes the generic gamepad\r\n * @param id The id of the generic gamepad\r\n * @param index The index of the generic gamepad\r\n * @param browserGamepad The browser gamepad\r\n */\r\n constructor(id: string, index: number, browserGamepad: any) {\r\n super(id, index, browserGamepad);\r\n this.type = Gamepad.GENERIC;\r\n this._buttons = new Array(browserGamepad.buttons.length);\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonIndex: number): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonIndex);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonIndex);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonIndex);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonIndex);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Updates the generic gamepad\r\n */\r\n public override update() {\r\n super.update();\r\n for (let index = 0; index < this._buttons.length; index++) {\r\n this._buttons[index] = this._setButtonValue(this.browserGamepad.buttons[index].value, this._buttons[index], index);\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the generic gamepad\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"xboxGamepad.js","sourceRoot":"","sources":["../../../../dev/core/src/Gamepads/xboxGamepad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\nimport { Gamepad } from \"../Gamepads/gamepad\";\r\n/**\r\n * Defines supported buttons for XBox360 compatible gamepads\r\n */\r\nexport enum Xbox360Button {\r\n /** A */\r\n A = 0,\r\n /** B */\r\n B = 1,\r\n /** X */\r\n X = 2,\r\n /** Y */\r\n Y = 3,\r\n /** Left button */\r\n LB = 4,\r\n /** Right button */\r\n RB = 5,\r\n /** Back */\r\n Back = 8,\r\n /** Start */\r\n Start = 9,\r\n /** Left stick */\r\n LeftStick = 10,\r\n /** Right stick */\r\n RightStick = 11,\r\n}\r\n\r\n/** Defines values for XBox360 DPad */\r\nexport enum Xbox360Dpad {\r\n /** Up */\r\n Up = 12,\r\n /** Down */\r\n Down = 13,\r\n /** Left */\r\n Left = 14,\r\n /** Right */\r\n Right = 15,\r\n}\r\n\r\n/**\r\n * Defines a XBox360 gamepad\r\n */\r\nexport class Xbox360Pad extends Gamepad {\r\n private _leftTrigger: number = 0;\r\n private _rightTrigger: number = 0;\r\n\r\n private _onlefttriggerchanged: (value: number) => void;\r\n private _onrighttriggerchanged: (value: number) => void;\r\n\r\n private _onbuttondown: (buttonPressed: Xbox360Button) => void;\r\n private _onbuttonup: (buttonReleased: Xbox360Button) => void;\r\n private _ondpaddown: (dPadPressed: Xbox360Dpad) => void;\r\n private _ondpadup: (dPadReleased: Xbox360Dpad) => void;\r\n\r\n /** Observable raised when a button is pressed */\r\n public onButtonDownObservable = new Observable<Xbox360Button>();\r\n /** Observable raised when a button is released */\r\n public onButtonUpObservable = new Observable<Xbox360Button>();\r\n /** Observable raised when a pad is pressed */\r\n public onPadDownObservable = new Observable<Xbox360Dpad>();\r\n /** Observable raised when a pad is released */\r\n public onPadUpObservable = new Observable<Xbox360Dpad>();\r\n\r\n private _buttonA: number = 0;\r\n private _buttonB: number = 0;\r\n private _buttonX: number = 0;\r\n private _buttonY: number = 0;\r\n private _buttonBack: number = 0;\r\n private _buttonStart: number = 0;\r\n private _buttonLB: number = 0;\r\n private _buttonRB: number = 0;\r\n\r\n private _buttonLeftStick: number = 0;\r\n private _buttonRightStick: number = 0;\r\n private _dPadUp: number = 0;\r\n private _dPadDown: number = 0;\r\n private _dPadLeft: number = 0;\r\n private _dPadRight: number = 0;\r\n\r\n private _isXboxOnePad: boolean = false;\r\n\r\n /**\r\n * Creates a new XBox360 gamepad object\r\n * @param id defines the id of this gamepad\r\n * @param index defines its index\r\n * @param gamepad defines the internal HTML gamepad object\r\n * @param xboxOne defines if it is a XBox One gamepad\r\n */\r\n constructor(id: string, index: number, gamepad: any, xboxOne: boolean = false) {\r\n super(id, index, gamepad, 0, 1, 2, 3);\r\n this.type = Gamepad.XBOX;\r\n this._isXboxOnePad = xboxOne;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when left trigger is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onlefttriggerchanged(callback: (value: number) => void) {\r\n this._onlefttriggerchanged = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when right trigger is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onrighttriggerchanged(callback: (value: number) => void) {\r\n this._onrighttriggerchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left trigger value\r\n */\r\n public get leftTrigger(): number {\r\n return this._leftTrigger;\r\n }\r\n /**\r\n * Sets the left trigger value\r\n */\r\n public set leftTrigger(newValue: number) {\r\n if (this._onlefttriggerchanged && this._leftTrigger !== newValue) {\r\n this._onlefttriggerchanged(newValue);\r\n }\r\n this._leftTrigger = newValue;\r\n }\r\n\r\n /**\r\n * Gets the right trigger value\r\n */\r\n public get rightTrigger(): number {\r\n return this._rightTrigger;\r\n }\r\n /**\r\n * Sets the right trigger value\r\n */\r\n public set rightTrigger(newValue: number) {\r\n if (this._onrighttriggerchanged && this._rightTrigger !== newValue) {\r\n this._onrighttriggerchanged(newValue);\r\n }\r\n this._rightTrigger = newValue;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a button is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onbuttondown(callback: (buttonPressed: Xbox360Button) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a button is released\r\n * @param callback defines the callback to use\r\n */\r\n public onbuttonup(callback: (buttonReleased: Xbox360Button) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a pad is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public ondpaddown(callback: (dPadPressed: Xbox360Dpad) => void) {\r\n this._ondpaddown = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a pad is released\r\n * @param callback defines the callback to use\r\n */\r\n public ondpadup(callback: (dPadReleased: Xbox360Dpad) => void) {\r\n this._ondpadup = callback;\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonType: Xbox360Button): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonType);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonType);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonType);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonType);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n private _setDPadValue(newValue: number, currentValue: number, buttonType: Xbox360Dpad): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._ondpaddown) {\r\n this._ondpaddown(buttonType);\r\n }\r\n\r\n this.onPadDownObservable.notifyObservers(buttonType);\r\n }\r\n if (newValue === 0) {\r\n if (this._ondpadup) {\r\n this._ondpadup(buttonType);\r\n }\r\n\r\n this.onPadUpObservable.notifyObservers(buttonType);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Gets the value of the `A` button\r\n */\r\n public get buttonA(): number {\r\n return this._buttonA;\r\n }\r\n /**\r\n * Sets the value of the `A` button\r\n */\r\n public set buttonA(value) {\r\n this._buttonA = this._setButtonValue(value, this._buttonA, Xbox360Button.A);\r\n }\r\n\r\n /**\r\n * Gets the value of the `B` button\r\n */\r\n public get buttonB(): number {\r\n return this._buttonB;\r\n }\r\n /**\r\n * Sets the value of the `B` button\r\n */\r\n public set buttonB(value) {\r\n this._buttonB = this._setButtonValue(value, this._buttonB, Xbox360Button.B);\r\n }\r\n\r\n /**\r\n * Gets the value of the `X` button\r\n */\r\n public get buttonX(): number {\r\n return this._buttonX;\r\n }\r\n /**\r\n * Sets the value of the `X` button\r\n */\r\n public set buttonX(value) {\r\n this._buttonX = this._setButtonValue(value, this._buttonX, Xbox360Button.X);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Y` button\r\n */\r\n public get buttonY(): number {\r\n return this._buttonY;\r\n }\r\n /**\r\n * Sets the value of the `Y` button\r\n */\r\n public set buttonY(value) {\r\n this._buttonY = this._setButtonValue(value, this._buttonY, Xbox360Button.Y);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Start` button\r\n */\r\n public get buttonStart(): number {\r\n return this._buttonStart;\r\n }\r\n /**\r\n * Sets the value of the `Start` button\r\n */\r\n public set buttonStart(value) {\r\n this._buttonStart = this._setButtonValue(value, this._buttonStart, Xbox360Button.Start);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Back` button\r\n */\r\n public get buttonBack(): number {\r\n return this._buttonBack;\r\n }\r\n /**\r\n * Sets the value of the `Back` button\r\n */\r\n public set buttonBack(value) {\r\n this._buttonBack = this._setButtonValue(value, this._buttonBack, Xbox360Button.Back);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Left` button\r\n */\r\n public get buttonLB(): number {\r\n return this._buttonLB;\r\n }\r\n /**\r\n * Sets the value of the `Left` button\r\n */\r\n public set buttonLB(value) {\r\n this._buttonLB = this._setButtonValue(value, this._buttonLB, Xbox360Button.LB);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Right` button\r\n */\r\n public get buttonRB(): number {\r\n return this._buttonRB;\r\n }\r\n /**\r\n * Sets the value of the `Right` button\r\n */\r\n public set buttonRB(value) {\r\n this._buttonRB = this._setButtonValue(value, this._buttonRB, Xbox360Button.RB);\r\n }\r\n\r\n /**\r\n * Gets the value of the Left joystick\r\n */\r\n public get buttonLeftStick(): number {\r\n return this._buttonLeftStick;\r\n }\r\n /**\r\n * Sets the value of the Left joystick\r\n */\r\n public set buttonLeftStick(value) {\r\n this._buttonLeftStick = this._setButtonValue(value, this._buttonLeftStick, Xbox360Button.LeftStick);\r\n }\r\n\r\n /**\r\n * Gets the value of the Right joystick\r\n */\r\n public get buttonRightStick(): number {\r\n return this._buttonRightStick;\r\n }\r\n /**\r\n * Sets the value of the Right joystick\r\n */\r\n public set buttonRightStick(value) {\r\n this._buttonRightStick = this._setButtonValue(value, this._buttonRightStick, Xbox360Button.RightStick);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad up\r\n */\r\n public get dPadUp(): number {\r\n return this._dPadUp;\r\n }\r\n /**\r\n * Sets the value of D-pad up\r\n */\r\n public set dPadUp(value) {\r\n this._dPadUp = this._setDPadValue(value, this._dPadUp, Xbox360Dpad.Up);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad down\r\n */\r\n public get dPadDown(): number {\r\n return this._dPadDown;\r\n }\r\n /**\r\n * Sets the value of D-pad down\r\n */\r\n public set dPadDown(value) {\r\n this._dPadDown = this._setDPadValue(value, this._dPadDown, Xbox360Dpad.Down);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad left\r\n */\r\n public get dPadLeft(): number {\r\n return this._dPadLeft;\r\n }\r\n /**\r\n * Sets the value of D-pad left\r\n */\r\n public set dPadLeft(value) {\r\n this._dPadLeft = this._setDPadValue(value, this._dPadLeft, Xbox360Dpad.Left);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad right\r\n */\r\n public get dPadRight(): number {\r\n return this._dPadRight;\r\n }\r\n /**\r\n * Sets the value of D-pad right\r\n */\r\n public set dPadRight(value) {\r\n this._dPadRight = this._setDPadValue(value, this._dPadRight, Xbox360Dpad.Right);\r\n }\r\n\r\n /**\r\n * Force the gamepad to synchronize with device values\r\n */\r\n public update() {\r\n super.update();\r\n if (this._isXboxOnePad) {\r\n this.buttonA = this.browserGamepad.buttons[0].value;\r\n this.buttonB = this.browserGamepad.buttons[1].value;\r\n this.buttonX = this.browserGamepad.buttons[2].value;\r\n this.buttonY = this.browserGamepad.buttons[3].value;\r\n this.buttonLB = this.browserGamepad.buttons[4].value;\r\n this.buttonRB = this.browserGamepad.buttons[5].value;\r\n this.leftTrigger = this.browserGamepad.buttons[6].value;\r\n this.rightTrigger = this.browserGamepad.buttons[7].value;\r\n this.buttonBack = this.browserGamepad.buttons[8].value;\r\n this.buttonStart = this.browserGamepad.buttons[9].value;\r\n this.buttonLeftStick = this.browserGamepad.buttons[10].value;\r\n this.buttonRightStick = this.browserGamepad.buttons[11].value;\r\n this.dPadUp = this.browserGamepad.buttons[12].value;\r\n this.dPadDown = this.browserGamepad.buttons[13].value;\r\n this.dPadLeft = this.browserGamepad.buttons[14].value;\r\n this.dPadRight = this.browserGamepad.buttons[15].value;\r\n } else {\r\n this.buttonA = this.browserGamepad.buttons[0].value;\r\n this.buttonB = this.browserGamepad.buttons[1].value;\r\n this.buttonX = this.browserGamepad.buttons[2].value;\r\n this.buttonY = this.browserGamepad.buttons[3].value;\r\n this.buttonLB = this.browserGamepad.buttons[4].value;\r\n this.buttonRB = this.browserGamepad.buttons[5].value;\r\n this.leftTrigger = this.browserGamepad.buttons[6].value;\r\n this.rightTrigger = this.browserGamepad.buttons[7].value;\r\n this.buttonBack = this.browserGamepad.buttons[8].value;\r\n this.buttonStart = this.browserGamepad.buttons[9].value;\r\n this.buttonLeftStick = this.browserGamepad.buttons[10].value;\r\n this.buttonRightStick = this.browserGamepad.buttons[11].value;\r\n this.dPadUp = this.browserGamepad.buttons[12].value;\r\n this.dPadDown = this.browserGamepad.buttons[13].value;\r\n this.dPadLeft = this.browserGamepad.buttons[14].value;\r\n this.dPadRight = this.browserGamepad.buttons[15].value;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n this.onPadDownObservable.clear();\r\n this.onPadUpObservable.clear();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"xboxGamepad.js","sourceRoot":"","sources":["../../../../dev/core/src/Gamepads/xboxGamepad.ts"],"names":[],"mappings":"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","sourcesContent":["import { Observable } from \"../Misc/observable\";\r\nimport { Gamepad } from \"../Gamepads/gamepad\";\r\n/**\r\n * Defines supported buttons for XBox360 compatible gamepads\r\n */\r\nexport enum Xbox360Button {\r\n /** A */\r\n A = 0,\r\n /** B */\r\n B = 1,\r\n /** X */\r\n X = 2,\r\n /** Y */\r\n Y = 3,\r\n /** Left button */\r\n LB = 4,\r\n /** Right button */\r\n RB = 5,\r\n /** Back */\r\n Back = 8,\r\n /** Start */\r\n Start = 9,\r\n /** Left stick */\r\n LeftStick = 10,\r\n /** Right stick */\r\n RightStick = 11,\r\n}\r\n\r\n/** Defines values for XBox360 DPad */\r\nexport enum Xbox360Dpad {\r\n /** Up */\r\n Up = 12,\r\n /** Down */\r\n Down = 13,\r\n /** Left */\r\n Left = 14,\r\n /** Right */\r\n Right = 15,\r\n}\r\n\r\n/**\r\n * Defines a XBox360 gamepad\r\n */\r\nexport class Xbox360Pad extends Gamepad {\r\n private _leftTrigger: number = 0;\r\n private _rightTrigger: number = 0;\r\n\r\n private _onlefttriggerchanged: (value: number) => void;\r\n private _onrighttriggerchanged: (value: number) => void;\r\n\r\n private _onbuttondown: (buttonPressed: Xbox360Button) => void;\r\n private _onbuttonup: (buttonReleased: Xbox360Button) => void;\r\n private _ondpaddown: (dPadPressed: Xbox360Dpad) => void;\r\n private _ondpadup: (dPadReleased: Xbox360Dpad) => void;\r\n\r\n /** Observable raised when a button is pressed */\r\n public onButtonDownObservable = new Observable<Xbox360Button>();\r\n /** Observable raised when a button is released */\r\n public onButtonUpObservable = new Observable<Xbox360Button>();\r\n /** Observable raised when a pad is pressed */\r\n public onPadDownObservable = new Observable<Xbox360Dpad>();\r\n /** Observable raised when a pad is released */\r\n public onPadUpObservable = new Observable<Xbox360Dpad>();\r\n\r\n private _buttonA: number = 0;\r\n private _buttonB: number = 0;\r\n private _buttonX: number = 0;\r\n private _buttonY: number = 0;\r\n private _buttonBack: number = 0;\r\n private _buttonStart: number = 0;\r\n private _buttonLB: number = 0;\r\n private _buttonRB: number = 0;\r\n\r\n private _buttonLeftStick: number = 0;\r\n private _buttonRightStick: number = 0;\r\n private _dPadUp: number = 0;\r\n private _dPadDown: number = 0;\r\n private _dPadLeft: number = 0;\r\n private _dPadRight: number = 0;\r\n\r\n private _isXboxOnePad: boolean = false;\r\n\r\n /**\r\n * Creates a new XBox360 gamepad object\r\n * @param id defines the id of this gamepad\r\n * @param index defines its index\r\n * @param gamepad defines the internal HTML gamepad object\r\n * @param xboxOne defines if it is a XBox One gamepad\r\n */\r\n constructor(id: string, index: number, gamepad: any, xboxOne: boolean = false) {\r\n super(id, index, gamepad, 0, 1, 2, 3);\r\n this.type = Gamepad.XBOX;\r\n this._isXboxOnePad = xboxOne;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when left trigger is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onlefttriggerchanged(callback: (value: number) => void) {\r\n this._onlefttriggerchanged = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when right trigger is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onrighttriggerchanged(callback: (value: number) => void) {\r\n this._onrighttriggerchanged = callback;\r\n }\r\n\r\n /**\r\n * Gets the left trigger value\r\n */\r\n public get leftTrigger(): number {\r\n return this._leftTrigger;\r\n }\r\n /**\r\n * Sets the left trigger value\r\n */\r\n public set leftTrigger(newValue: number) {\r\n if (this._onlefttriggerchanged && this._leftTrigger !== newValue) {\r\n this._onlefttriggerchanged(newValue);\r\n }\r\n this._leftTrigger = newValue;\r\n }\r\n\r\n /**\r\n * Gets the right trigger value\r\n */\r\n public get rightTrigger(): number {\r\n return this._rightTrigger;\r\n }\r\n /**\r\n * Sets the right trigger value\r\n */\r\n public set rightTrigger(newValue: number) {\r\n if (this._onrighttriggerchanged && this._rightTrigger !== newValue) {\r\n this._onrighttriggerchanged(newValue);\r\n }\r\n this._rightTrigger = newValue;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a button is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public onbuttondown(callback: (buttonPressed: Xbox360Button) => void) {\r\n this._onbuttondown = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a button is released\r\n * @param callback defines the callback to use\r\n */\r\n public onbuttonup(callback: (buttonReleased: Xbox360Button) => void) {\r\n this._onbuttonup = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a pad is pressed\r\n * @param callback defines the callback to use\r\n */\r\n public ondpaddown(callback: (dPadPressed: Xbox360Dpad) => void) {\r\n this._ondpaddown = callback;\r\n }\r\n\r\n /**\r\n * Defines the callback to call when a pad is released\r\n * @param callback defines the callback to use\r\n */\r\n public ondpadup(callback: (dPadReleased: Xbox360Dpad) => void) {\r\n this._ondpadup = callback;\r\n }\r\n\r\n private _setButtonValue(newValue: number, currentValue: number, buttonType: Xbox360Button): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._onbuttondown) {\r\n this._onbuttondown(buttonType);\r\n }\r\n\r\n this.onButtonDownObservable.notifyObservers(buttonType);\r\n }\r\n if (newValue === 0) {\r\n if (this._onbuttonup) {\r\n this._onbuttonup(buttonType);\r\n }\r\n\r\n this.onButtonUpObservable.notifyObservers(buttonType);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n private _setDPadValue(newValue: number, currentValue: number, buttonType: Xbox360Dpad): number {\r\n if (newValue !== currentValue) {\r\n if (newValue === 1) {\r\n if (this._ondpaddown) {\r\n this._ondpaddown(buttonType);\r\n }\r\n\r\n this.onPadDownObservable.notifyObservers(buttonType);\r\n }\r\n if (newValue === 0) {\r\n if (this._ondpadup) {\r\n this._ondpadup(buttonType);\r\n }\r\n\r\n this.onPadUpObservable.notifyObservers(buttonType);\r\n }\r\n }\r\n return newValue;\r\n }\r\n\r\n /**\r\n * Gets the value of the `A` button\r\n */\r\n public get buttonA(): number {\r\n return this._buttonA;\r\n }\r\n /**\r\n * Sets the value of the `A` button\r\n */\r\n public set buttonA(value) {\r\n this._buttonA = this._setButtonValue(value, this._buttonA, Xbox360Button.A);\r\n }\r\n\r\n /**\r\n * Gets the value of the `B` button\r\n */\r\n public get buttonB(): number {\r\n return this._buttonB;\r\n }\r\n /**\r\n * Sets the value of the `B` button\r\n */\r\n public set buttonB(value) {\r\n this._buttonB = this._setButtonValue(value, this._buttonB, Xbox360Button.B);\r\n }\r\n\r\n /**\r\n * Gets the value of the `X` button\r\n */\r\n public get buttonX(): number {\r\n return this._buttonX;\r\n }\r\n /**\r\n * Sets the value of the `X` button\r\n */\r\n public set buttonX(value) {\r\n this._buttonX = this._setButtonValue(value, this._buttonX, Xbox360Button.X);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Y` button\r\n */\r\n public get buttonY(): number {\r\n return this._buttonY;\r\n }\r\n /**\r\n * Sets the value of the `Y` button\r\n */\r\n public set buttonY(value) {\r\n this._buttonY = this._setButtonValue(value, this._buttonY, Xbox360Button.Y);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Start` button\r\n */\r\n public get buttonStart(): number {\r\n return this._buttonStart;\r\n }\r\n /**\r\n * Sets the value of the `Start` button\r\n */\r\n public set buttonStart(value) {\r\n this._buttonStart = this._setButtonValue(value, this._buttonStart, Xbox360Button.Start);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Back` button\r\n */\r\n public get buttonBack(): number {\r\n return this._buttonBack;\r\n }\r\n /**\r\n * Sets the value of the `Back` button\r\n */\r\n public set buttonBack(value) {\r\n this._buttonBack = this._setButtonValue(value, this._buttonBack, Xbox360Button.Back);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Left` button\r\n */\r\n public get buttonLB(): number {\r\n return this._buttonLB;\r\n }\r\n /**\r\n * Sets the value of the `Left` button\r\n */\r\n public set buttonLB(value) {\r\n this._buttonLB = this._setButtonValue(value, this._buttonLB, Xbox360Button.LB);\r\n }\r\n\r\n /**\r\n * Gets the value of the `Right` button\r\n */\r\n public get buttonRB(): number {\r\n return this._buttonRB;\r\n }\r\n /**\r\n * Sets the value of the `Right` button\r\n */\r\n public set buttonRB(value) {\r\n this._buttonRB = this._setButtonValue(value, this._buttonRB, Xbox360Button.RB);\r\n }\r\n\r\n /**\r\n * Gets the value of the Left joystick\r\n */\r\n public get buttonLeftStick(): number {\r\n return this._buttonLeftStick;\r\n }\r\n /**\r\n * Sets the value of the Left joystick\r\n */\r\n public set buttonLeftStick(value) {\r\n this._buttonLeftStick = this._setButtonValue(value, this._buttonLeftStick, Xbox360Button.LeftStick);\r\n }\r\n\r\n /**\r\n * Gets the value of the Right joystick\r\n */\r\n public get buttonRightStick(): number {\r\n return this._buttonRightStick;\r\n }\r\n /**\r\n * Sets the value of the Right joystick\r\n */\r\n public set buttonRightStick(value) {\r\n this._buttonRightStick = this._setButtonValue(value, this._buttonRightStick, Xbox360Button.RightStick);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad up\r\n */\r\n public get dPadUp(): number {\r\n return this._dPadUp;\r\n }\r\n /**\r\n * Sets the value of D-pad up\r\n */\r\n public set dPadUp(value) {\r\n this._dPadUp = this._setDPadValue(value, this._dPadUp, Xbox360Dpad.Up);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad down\r\n */\r\n public get dPadDown(): number {\r\n return this._dPadDown;\r\n }\r\n /**\r\n * Sets the value of D-pad down\r\n */\r\n public set dPadDown(value) {\r\n this._dPadDown = this._setDPadValue(value, this._dPadDown, Xbox360Dpad.Down);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad left\r\n */\r\n public get dPadLeft(): number {\r\n return this._dPadLeft;\r\n }\r\n /**\r\n * Sets the value of D-pad left\r\n */\r\n public set dPadLeft(value) {\r\n this._dPadLeft = this._setDPadValue(value, this._dPadLeft, Xbox360Dpad.Left);\r\n }\r\n\r\n /**\r\n * Gets the value of D-pad right\r\n */\r\n public get dPadRight(): number {\r\n return this._dPadRight;\r\n }\r\n /**\r\n * Sets the value of D-pad right\r\n */\r\n public set dPadRight(value) {\r\n this._dPadRight = this._setDPadValue(value, this._dPadRight, Xbox360Dpad.Right);\r\n }\r\n\r\n /**\r\n * Force the gamepad to synchronize with device values\r\n */\r\n public override update() {\r\n super.update();\r\n if (this._isXboxOnePad) {\r\n this.buttonA = this.browserGamepad.buttons[0].value;\r\n this.buttonB = this.browserGamepad.buttons[1].value;\r\n this.buttonX = this.browserGamepad.buttons[2].value;\r\n this.buttonY = this.browserGamepad.buttons[3].value;\r\n this.buttonLB = this.browserGamepad.buttons[4].value;\r\n this.buttonRB = this.browserGamepad.buttons[5].value;\r\n this.leftTrigger = this.browserGamepad.buttons[6].value;\r\n this.rightTrigger = this.browserGamepad.buttons[7].value;\r\n this.buttonBack = this.browserGamepad.buttons[8].value;\r\n this.buttonStart = this.browserGamepad.buttons[9].value;\r\n this.buttonLeftStick = this.browserGamepad.buttons[10].value;\r\n this.buttonRightStick = this.browserGamepad.buttons[11].value;\r\n this.dPadUp = this.browserGamepad.buttons[12].value;\r\n this.dPadDown = this.browserGamepad.buttons[13].value;\r\n this.dPadLeft = this.browserGamepad.buttons[14].value;\r\n this.dPadRight = this.browserGamepad.buttons[15].value;\r\n } else {\r\n this.buttonA = this.browserGamepad.buttons[0].value;\r\n this.buttonB = this.browserGamepad.buttons[1].value;\r\n this.buttonX = this.browserGamepad.buttons[2].value;\r\n this.buttonY = this.browserGamepad.buttons[3].value;\r\n this.buttonLB = this.browserGamepad.buttons[4].value;\r\n this.buttonRB = this.browserGamepad.buttons[5].value;\r\n this.leftTrigger = this.browserGamepad.buttons[6].value;\r\n this.rightTrigger = this.browserGamepad.buttons[7].value;\r\n this.buttonBack = this.browserGamepad.buttons[8].value;\r\n this.buttonStart = this.browserGamepad.buttons[9].value;\r\n this.buttonLeftStick = this.browserGamepad.buttons[10].value;\r\n this.buttonRightStick = this.browserGamepad.buttons[11].value;\r\n this.dPadUp = this.browserGamepad.buttons[12].value;\r\n this.dPadDown = this.browserGamepad.buttons[13].value;\r\n this.dPadLeft = this.browserGamepad.buttons[14].value;\r\n this.dPadRight = this.browserGamepad.buttons[15].value;\r\n }\r\n }\r\n\r\n /**\r\n * Disposes the gamepad\r\n */\r\n public override dispose() {\r\n super.dispose();\r\n this.onButtonDownObservable.clear();\r\n this.onButtonUpObservable.clear();\r\n this.onPadDownObservable.clear();\r\n this.onPadUpObservable.clear();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axisDragGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisDragGizmo.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AA0BlD;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,KAAK;IAyBpC,4EAA4E;IAC5E,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED,8DAA8D;IAC9D,IAAW,aAAa;QACpB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED,qEAAqE;IACrE,IAAW,eAAe;QACtB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,YAAY,CAAC,KAAY,EAAE,QAA0B,EAAE,YAAoB,CAAC,EAAE,UAAU,GAAG,KAAK;QAC1G,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,cAAc,CAC3B,UAAU,EACV;YACI,WAAW,EAAE,CAAC;YACd,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;YAClD,YAAY,EAAE,EAAE;SACnB,EACD,KAAK,CACR,CAAC;QACF,MAAM,IAAI,GAAG,cAAc,CACvB,UAAU,EACV;YACI,WAAW,EAAE,KAAK,GAAG,SAAS;YAC9B,MAAM,EAAE,KAAK;YACb,cAAc,EAAE,KAAK,GAAG,SAAS;YACjC,YAAY,EAAE,EAAE;SACnB,EACD,KAAK,CACR,CAAC;QAEF,2CAA2C;QAC3C,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC;QACxB,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC;QAE3B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QAE9B,IAAI,UAAU,EAAE;YACZ,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;YACpB,QAAQ,CAAC,UAAU,GAAG,CAAC,CAAC;SAC3B;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,MAAM,CAAC,oBAAoB,CAAC,KAAY,EAAE,KAAoB;QACjE,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,cAAc,EAAE,EAAE;YACvC,MAAM,aAAa,GAAI,IAAa,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC/D,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC;SACnC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACH,YACI,QAAiB,EACjB,QAAgB,MAAM,CAAC,IAAI,EAAE,EAC7B,aAAmC,oBAAoB,CAAC,mBAAmB,EAC3E,SAAkC,IAAI,EACtC,YAAoB,CAAC,EACrB,aAAqB,MAAM,CAAC,MAAM,EAAE,EACpC,eAAuB,MAAM,CAAC,IAAI,EAAE;QAEpC,KAAK,CAAC,UAAU,CAAC,CAAC;QA9GZ,qBAAgB,GAAoC,IAAI,CAAC;QACnE;;WAEG;QACI,iBAAY,GAAG,CAAC,CAAC;QACxB;;;WAGG;QACI,qBAAgB,GAAG,IAAI,UAAU,EAA4B,CAAC;QAE3D,eAAU,GAAY,IAAI,CAAC;QAC3B,YAAO,GAA4B,IAAI,CAAC;QAMxC,cAAS,GAAY,KAAK,CAAC;QA6FjC,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,kBAAkB;QAClB,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,gBAAgB,CAAC,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAEhF,IAAI,CAAC,cAAc,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7E,IAAI,CAAC,cAAc,CAAC,YAAY,GAAG,UAAU,CAAC;QAE9C,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC/E,IAAI,CAAC,gBAAgB,CAAC,YAAY,GAAG,YAAY,CAAC;QAClD,IAAI,CAAC,gBAAgB,CAAC,KAAK,GAAG,GAAG,CAAC;QAElC,wBAAwB;QACxB,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;QACzG,MAAM,QAAQ,GAAG,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QAEtH,mBAAmB;QACnB,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,EAAE,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAa,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,QAAgB,CAAC,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;QAExC,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAChC,MAAM,YAAY,GAAG,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACzC,+DAA+D;QAC/D,IAAI,CAAC,YAAY,GAAG,IAAI,mBAAmB,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpE,IAAI,CAAC,YAAY,CAAC,YAAY,GAAG,KAAK,CAAC;QACvC,IAAI,CAAC,YAAY,CAAC,eAAe,GAAG,KAAK,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC7C,IAAI,IAAI,CAAC,YAAY,EAAE;gBACnB,8DAA8D;gBAC9D,qFAAqF;gBACrF,gDAAgD;gBAEhD,IAAI,aAAa,GAAY,KAAK,CAAC;gBACnC,iBAAiB;gBACjB,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9E,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;wBACvD,IAAK,IAAI,CAAC,YAAoB,CAAC,QAAQ,EAAE;4BACrC,iCAAiC;4BAChC,IAAI,CAAC,YAAoB,CAAC,QAAQ,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;yBACzG;wBAED,oGAAoG;wBACpG,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBACzG,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;wBAChC,aAAa,GAAG,IAAI,CAAC;qBACxB;iBACJ;qBAAM;oBACH,uBAAuB,IAAI,KAAK,CAAC,YAAY,CAAC;oBAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,YAAY,EAAE;wBACvD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;wBACpF,uBAAuB,GAAG,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;wBACtE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAClD,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;wBAElE,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC9E,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;wBACxD,IAAI,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;4BACvD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;4BACvI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;4BAChC,YAAY,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;4BAC/F,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;4BACpD,aAAa,GAAG,IAAI,CAAC;yBACxB;qBACJ;iBACJ;gBACD,IAAI,aAAa,EAAE;oBACf,IAAI,CAAC,cAAc,EAAE,CAAC;iBACzB;aACJ;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE;YAC3C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,UAAU,CAAC,oBAAoB,EAAE,CAAC;QAChD,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC;QAEjG,MAAM,KAAK,GAAmB;YAC1B,WAAW,EAAE,KAAK,CAAC,cAAc,EAAY;YAC7C,cAAc,EAAE,QAAQ,CAAC,cAAc,EAAY;YACnD,QAAQ,EAAE,IAAI,CAAC,gBAAgB;YAC/B,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,MAAM,EAAE,KAAK;YACb,YAAY,EAAE,IAAI,CAAC,YAAY;SAClC,CAAC;QACF,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,QAAgB,EAAE,KAAK,CAAC,CAAC;QAEtD,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;YACzF,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,OAAO;aACV;YACD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAO,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC;gBACvJ,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;aAC3D;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnD,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;QACrG,CAAC,CAAC,CAAC;IACP,CAAC;IAES,oBAAoB,CAAC,KAAqB;QAChD,IAAI,IAAI,CAAC,YAAY,EAAE;YACnB,IAAI,CAAC,YAAY,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;SACpD;IACL,CAAC;IAED;;OAEG;IACH,IAAW,SAAS,CAAC,KAAc;QAC/B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,CAAC,KAAK,EAAE;YACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;SAC5B;aAAM;YACH,IAAI,IAAI,CAAC,OAAO,EAAE;gBACd,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;gBAC9C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC;aACjD;SACJ;IACL,CAAC;IAED,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,OAAO;QACV,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC9B,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACpF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;SAC7B;QACD,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACjF,IAAI,IAAI,EAAE;gBACN,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;QACL,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;CACJ","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TmpVectors } from \"../Maths/math.vector\";\r\n\r\n/**\r\n * Interface for axis drag gizmo\r\n */\r\nexport interface IAxisDragGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis drag gizmo\r\n */\r\nexport class AxisDragGizmo extends Gizmo implements IAxisDragGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreateArrow(scene: Scene, material: StandardMaterial, thickness: number = 1, isCollider = false): TransformNode {\r\n const arrow = new TransformNode(\"arrow\", scene);\r\n const cylinder = CreateCylinder(\r\n \"cylinder\",\r\n {\r\n diameterTop: 0,\r\n height: 0.075,\r\n diameterBottom: 0.0375 * (1 + (thickness - 1) / 4),\r\n tessellation: 96,\r\n },\r\n scene\r\n );\r\n const line = CreateCylinder(\r\n \"cylinder\",\r\n {\r\n diameterTop: 0.005 * thickness,\r\n height: 0.275,\r\n diameterBottom: 0.005 * thickness,\r\n tessellation: 96,\r\n },\r\n scene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n cylinder.parent = arrow;\r\n cylinder.material = material;\r\n cylinder.rotation.x = Math.PI / 2;\r\n cylinder.position.z += 0.3;\r\n\r\n line.parent = arrow;\r\n line.material = material;\r\n line.position.z += 0.275 / 2;\r\n line.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n line.visibility = 0;\r\n cylinder.visibility = 0;\r\n }\r\n return arrow;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreateArrowInstance(scene: Scene, arrow: TransformNode): TransformNode {\r\n const instance = new TransformNode(\"arrow\", scene);\r\n for (const mesh of arrow.getChildMeshes()) {\r\n const childInstance = (mesh as Mesh).createInstance(mesh.name);\r\n childInstance.parent = instance;\r\n }\r\n return instance;\r\n }\r\n\r\n /**\r\n * Creates an AxisDragGizmo\r\n * @param dragAxis The axis which the gizmo will be able to drag on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null,\r\n thickness: number = 1,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build Mesh + Collider\r\n const arrow = AxisDragGizmo._CreateArrow(gizmoLayer.utilityLayerScene, this._coloredMaterial, thickness);\r\n const collider = AxisDragGizmo._CreateArrow(gizmoLayer.utilityLayerScene, this._coloredMaterial, thickness + 4, true);\r\n\r\n // Add to Root Node\r\n this._gizmoMesh = new Mesh(\"\", gizmoLayer.utilityLayerScene);\r\n this._gizmoMesh.addChild(arrow as Mesh);\r\n this._gizmoMesh.addChild(collider as Mesh);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n let currentSnapDragDistance = 0;\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n let matrixChanged: boolean = false;\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].addInPlace(event.delta);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[2])) {\r\n if ((this.attachedNode as any).position) {\r\n // Required for nodes like lights\r\n (this.attachedNode as any).position.addInPlaceFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n }\r\n\r\n // use _worldMatrix to not force a matrix update when calling GetWorldMatrix especially with Cameras\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n this.attachedNode.updateCache();\r\n matrixChanged = true;\r\n }\r\n } else {\r\n currentSnapDragDistance += event.dragDistance;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n const dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n event.delta.normalizeToRef(TmpVectors.Vector3[1]);\r\n TmpVectors.Vector3[1].scaleInPlace(this.snapDistance * dragSteps);\r\n\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].addInPlace(TmpVectors.Vector3[1]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[2])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z);\r\n this.attachedNode.updateCache();\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps * Math.sign(currentSnapDragDistance);\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n matrixChanged = true;\r\n }\r\n }\r\n }\r\n if (matrixChanged) {\r\n this._matrixChanged();\r\n }\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: arrow.getChildMeshes() as Mesh[],\r\n colliderMeshes: collider.getChildMeshes() as Mesh[],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(collider as Mesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? cache.material : cache.disableMaterial);\r\n });\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"axisDragGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisDragGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport type { Vector3 } from \"../Maths/math.vector\";\r\nimport { TransformNode } from \"../Meshes/transformNode\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport type { Scene } from \"../scene\";\r\nimport type { PositionGizmo } from \"./positionGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport { TmpVectors } from \"../Maths/math.vector\";\r\n\r\n/**\r\n * Interface for axis drag gizmo\r\n */\r\nexport interface IAxisDragGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis drag gizmo\r\n */\r\nexport class AxisDragGizmo extends Gizmo implements IAxisDragGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Drag distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<PositionGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreateArrow(scene: Scene, material: StandardMaterial, thickness: number = 1, isCollider = false): TransformNode {\r\n const arrow = new TransformNode(\"arrow\", scene);\r\n const cylinder = CreateCylinder(\r\n \"cylinder\",\r\n {\r\n diameterTop: 0,\r\n height: 0.075,\r\n diameterBottom: 0.0375 * (1 + (thickness - 1) / 4),\r\n tessellation: 96,\r\n },\r\n scene\r\n );\r\n const line = CreateCylinder(\r\n \"cylinder\",\r\n {\r\n diameterTop: 0.005 * thickness,\r\n height: 0.275,\r\n diameterBottom: 0.005 * thickness,\r\n tessellation: 96,\r\n },\r\n scene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n cylinder.parent = arrow;\r\n cylinder.material = material;\r\n cylinder.rotation.x = Math.PI / 2;\r\n cylinder.position.z += 0.3;\r\n\r\n line.parent = arrow;\r\n line.material = material;\r\n line.position.z += 0.275 / 2;\r\n line.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n line.visibility = 0;\r\n cylinder.visibility = 0;\r\n }\r\n return arrow;\r\n }\r\n\r\n /**\r\n * @internal\r\n */\r\n public static _CreateArrowInstance(scene: Scene, arrow: TransformNode): TransformNode {\r\n const instance = new TransformNode(\"arrow\", scene);\r\n for (const mesh of arrow.getChildMeshes()) {\r\n const childInstance = (mesh as Mesh).createInstance(mesh.name);\r\n childInstance.parent = instance;\r\n }\r\n return instance;\r\n }\r\n\r\n /**\r\n * Creates an AxisDragGizmo\r\n * @param dragAxis The axis which the gizmo will be able to drag on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<PositionGizmo> = null,\r\n thickness: number = 1,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build Mesh + Collider\r\n const arrow = AxisDragGizmo._CreateArrow(gizmoLayer.utilityLayerScene, this._coloredMaterial, thickness);\r\n const collider = AxisDragGizmo._CreateArrow(gizmoLayer.utilityLayerScene, this._coloredMaterial, thickness + 4, true);\r\n\r\n // Add to Root Node\r\n this._gizmoMesh = new Mesh(\"\", gizmoLayer.utilityLayerScene);\r\n this._gizmoMesh.addChild(arrow as Mesh);\r\n this._gizmoMesh.addChild(collider as Mesh);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n this._gizmoMesh.parent = this._rootMesh;\r\n\r\n let currentSnapDragDistance = 0;\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Keep world translation and use it to update world transform\r\n // if the node has parent, the local transform properties (position, rotation, scale)\r\n // will be recomputed in _matrixChanged function\r\n\r\n let matrixChanged: boolean = false;\r\n // Snapping logic\r\n if (this.snapDistance == 0) {\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].addInPlace(event.delta);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[2])) {\r\n if ((this.attachedNode as any).position) {\r\n // Required for nodes like lights\r\n (this.attachedNode as any).position.addInPlaceFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n }\r\n\r\n // use _worldMatrix to not force a matrix update when calling GetWorldMatrix especially with Cameras\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(event.delta.x, event.delta.y, event.delta.z);\r\n this.attachedNode.updateCache();\r\n matrixChanged = true;\r\n }\r\n } else {\r\n currentSnapDragDistance += event.dragDistance;\r\n if (Math.abs(currentSnapDragDistance) > this.snapDistance) {\r\n const dragSteps = Math.floor(Math.abs(currentSnapDragDistance) / this.snapDistance);\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n event.delta.normalizeToRef(TmpVectors.Vector3[1]);\r\n TmpVectors.Vector3[1].scaleInPlace(this.snapDistance * dragSteps);\r\n\r\n this.attachedNode.getWorldMatrix().getTranslationToRef(TmpVectors.Vector3[2]);\r\n TmpVectors.Vector3[2].addInPlace(TmpVectors.Vector3[1]);\r\n if (this.dragBehavior.validateDrag(TmpVectors.Vector3[2])) {\r\n this.attachedNode.getWorldMatrix().addTranslationFromFloats(TmpVectors.Vector3[1].x, TmpVectors.Vector3[1].y, TmpVectors.Vector3[1].z);\r\n this.attachedNode.updateCache();\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps * Math.sign(currentSnapDragDistance);\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n matrixChanged = true;\r\n }\r\n }\r\n }\r\n if (matrixChanged) {\r\n this._matrixChanged();\r\n }\r\n }\r\n });\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n });\r\n this.dragBehavior.onDragEndObservable.add(() => {\r\n this._dragging = false;\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes(false));\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: arrow.getChildMeshes() as Mesh[],\r\n colliderMeshes: collider.getChildMeshes() as Mesh[],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(collider as Mesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n this._isHovered = !!(cache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? cache.material : cache.disableMaterial);\r\n });\r\n }\r\n\r\n protected override _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"axisScaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisScaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { ScaleGizmo } from \"./scaleGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\n\r\n/**\r\n * Interface for axis scale gizmo\r\n */\r\nexport interface IAxisScaleGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Incremental snap scaling. When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,... */\r\n incrementalSnap: boolean;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the scaling operation should be done on all axis */\r\n uniformScaling: boolean;\r\n /** Custom sensitivity value for the drag strength */\r\n sensitivity: number;\r\n /** The magnitude of the drag strength (scaling factor) */\r\n dragScale: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis scale gizmo\r\n */\r\nexport class AxisScaleGizmo extends Gizmo implements IAxisScaleGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n /**\r\n * If the scaling operation should be done on all axis (default: false)\r\n */\r\n public uniformScaling = false;\r\n /**\r\n * Custom sensitivity value for the drag strength\r\n */\r\n public sensitivity = 1;\r\n /**\r\n * The magnitude of the drag strength (scaling factor)\r\n */\r\n public dragScale = 1;\r\n\r\n /**\r\n * The minimal absolute scale per component. can be positive or negative but never smaller.\r\n */\r\n public static MinimumAbsoluteScale = Epsilon;\r\n\r\n /**\r\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\r\n */\r\n public incrementalSnap = false;\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<ScaleGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n private _tmpVector = new Vector3(0, 0, 0);\r\n private _incrementalStartupValue = Vector3.Zero();\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * Creates an AxisScaleGizmo\r\n * @param dragAxis The axis which the gizmo will be able to scale on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<ScaleGizmo> = null,\r\n thickness: number = 1,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh + Collider\r\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\r\n const { arrowMesh, arrowTail } = this._createGizmoMesh(this._gizmoMesh, thickness);\r\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n\r\n // Closure of initial prop values for resetting\r\n const nodePosition = arrowMesh.position.clone();\r\n const linePosition = arrowTail.position.clone();\r\n const lineScale = arrowTail.scaling.clone();\r\n\r\n const increaseGizmoMesh = (dragDistance: number) => {\r\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\r\n\r\n arrowMesh.position.z += dragStrength / 3.5;\r\n arrowTail.scaling.y += dragStrength;\r\n this.dragScale = arrowTail.scaling.y;\r\n arrowTail.position.z = arrowMesh.position.z / 2;\r\n };\r\n\r\n const resetGizmoMesh = () => {\r\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\r\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\r\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\r\n this.dragScale = arrowTail.scaling.y;\r\n this._dragging = false;\r\n };\r\n\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n let currentSnapDragDistance = 0;\r\n let currentSnapDragDistanceIncremental = 0;\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\r\n const dragStrength = this.sensitivity * event.dragDistance * ((this.scaleRatio * 3) / this._rootMesh.scaling.length());\r\n const tmpVector = this._tmpVector;\r\n // Snapping logic\r\n let snapped = false;\r\n let dragSteps = 0;\r\n if (this.uniformScaling) {\r\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\r\n } else {\r\n tmpVector.copyFrom(dragAxis);\r\n }\r\n if (this.snapDistance == 0) {\r\n tmpVector.scaleToRef(dragStrength, tmpVector);\r\n } else {\r\n currentSnapDragDistance += dragStrength;\r\n currentSnapDragDistanceIncremental += dragStrength;\r\n const currentSnap = this.incrementalSnap ? currentSnapDragDistanceIncremental : currentSnapDragDistance;\r\n if (Math.abs(currentSnap) > this.snapDistance) {\r\n dragSteps = Math.floor(Math.abs(currentSnap) / this.snapDistance);\r\n\r\n if (currentSnap < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\r\n snapped = true;\r\n } else {\r\n tmpVector.scaleInPlace(0);\r\n }\r\n }\r\n\r\n tmpVector.addInPlaceFromFloats(1, 1, 1);\r\n // can't use Math.sign here because Math.sign(0) is 0 and it needs to be positive\r\n tmpVector.x = Math.abs(tmpVector.x) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.x < 0 ? -1 : 1) : tmpVector.x;\r\n tmpVector.y = Math.abs(tmpVector.y) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.y < 0 ? -1 : 1) : tmpVector.y;\r\n tmpVector.z = Math.abs(tmpVector.z) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.z < 0 ? -1 : 1) : tmpVector.z;\r\n\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n if (Math.abs(this.snapDistance) > 0 && this.incrementalSnap) {\r\n // get current scaling\r\n this.attachedNode.getWorldMatrix().decompose(undefined, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], Gizmo.PreserveScaling ? transformNode : undefined);\r\n // apply incrementaly, without taking care of current scaling value\r\n tmpVector.addInPlace(this._incrementalStartupValue);\r\n tmpVector.addInPlaceFromFloats(-1, -1, -1);\r\n // keep same sign or stretching close to 0 will change orientation at each drag and scaling will oscilate around 0\r\n tmpVector.x = Math.abs(tmpVector.x) * (this._incrementalStartupValue.x > 0 ? 1 : -1);\r\n tmpVector.y = Math.abs(tmpVector.y) * (this._incrementalStartupValue.y > 0 ? 1 : -1);\r\n tmpVector.z = Math.abs(tmpVector.z) * (this._incrementalStartupValue.z > 0 ? 1 : -1);\r\n Matrix.ComposeToRef(tmpVector, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], TmpVectors.Matrix[1]);\r\n } else {\r\n Matrix.ScalingToRef(tmpVector.x, tmpVector.y, tmpVector.z, TmpVectors.Matrix[2]);\r\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\r\n }\r\n\r\n // check scaling are not out of bounds. If not, copy resulting temp matrix to node world matrix\r\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n\r\n const maxScale = 100000;\r\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\r\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\r\n }\r\n\r\n // notify observers\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n // On Drag Listener: to move gizmo mesh with user action\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n this.attachedNode?.getWorldMatrix().decompose(this._incrementalStartupValue, undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n currentSnapDragDistance = 0;\r\n currentSnapDragDistanceIncremental = 0;\r\n });\r\n this.dragBehavior.onDragObservable.add((e) => increaseGizmoMesh(e.dragDistance));\r\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\r\n\r\n // Listeners for Universal Scalar\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragObservable?.add((e) => increaseGizmoMesh(e.delta.y));\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragEndObservable?.add(resetGizmoMesh);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [arrowMesh, arrowTail],\r\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n // axis mesh cache\r\n let meshCache = this._parent?.getAxisCache(this._gizmoMesh);\r\n this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n // uniform mesh cache\r\n meshCache = this._parent?.getAxisCache(this._rootMesh);\r\n this._isHovered ||= !!meshCache && !!(meshCache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\r\n }\r\n\r\n /**\r\n * @internal\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param isCollider\r\n * @returns the gizmo mesh\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, isCollider = false) {\r\n const arrowMesh = CreateBox(\"yPosMesh\", { size: 0.4 * (1 + (thickness - 1) / 4) }, this.gizmoLayer.utilityLayerScene);\r\n const arrowTail = CreateCylinder(\r\n \"cylinder\",\r\n { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n arrowMesh.scaling.scaleInPlace(0.1);\r\n arrowMesh.material = this._coloredMaterial;\r\n arrowMesh.rotation.x = Math.PI / 2;\r\n arrowMesh.position.z += 0.3;\r\n\r\n arrowTail.material = this._coloredMaterial;\r\n arrowTail.position.z += 0.275 / 2;\r\n arrowTail.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n arrowMesh.visibility = 0;\r\n arrowTail.visibility = 0;\r\n }\r\n\r\n parentMesh.addChild(arrowMesh);\r\n parentMesh.addChild(arrowTail);\r\n\r\n return { arrowMesh, arrowTail };\r\n }\r\n\r\n protected _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\r\n */\r\n public setCustomMesh(mesh: Mesh, useGizmoMaterial: boolean = false) {\r\n super.setCustomMesh(mesh);\r\n if (useGizmoMaterial) {\r\n this._rootMesh.getChildMeshes().forEach((m) => {\r\n m.material = this._coloredMaterial;\r\n if ((<LinesMesh>m).color) {\r\n (<LinesMesh>m).color = this._coloredMaterial.diffuseColor;\r\n }\r\n });\r\n this._customMeshSet = false;\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"axisScaleGizmo.js","sourceRoot":"","sources":["../../../../dev/core/src/Gizmos/axisScaleGizmo.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Observer } from \"../Misc/observable\";\r\nimport { Observable } from \"../Misc/observable\";\r\nimport type { Nullable } from \"../types\";\r\nimport type { PointerInfo } from \"../Events/pointerEvents\";\r\nimport { Vector3, Matrix, TmpVectors } from \"../Maths/math.vector\";\r\nimport type { AbstractMesh } from \"../Meshes/abstractMesh\";\r\nimport type { Node } from \"../node\";\r\nimport { Mesh } from \"../Meshes/mesh\";\r\nimport type { LinesMesh } from \"../Meshes/linesMesh\";\r\nimport { CreateBox } from \"../Meshes/Builders/boxBuilder\";\r\nimport { CreateCylinder } from \"../Meshes/Builders/cylinderBuilder\";\r\nimport { StandardMaterial } from \"../Materials/standardMaterial\";\r\nimport { PointerDragBehavior } from \"../Behaviors/Meshes/pointerDragBehavior\";\r\nimport type { GizmoAxisCache, IGizmo } from \"./gizmo\";\r\nimport { Gizmo } from \"./gizmo\";\r\nimport { UtilityLayerRenderer } from \"../Rendering/utilityLayerRenderer\";\r\nimport type { ScaleGizmo } from \"./scaleGizmo\";\r\nimport { Color3 } from \"../Maths/math.color\";\r\nimport type { TransformNode } from \"../Meshes/transformNode\";\r\nimport { Epsilon } from \"../Maths/math.constants\";\r\n\r\n/**\r\n * Interface for axis scale gizmo\r\n */\r\nexport interface IAxisScaleGizmo extends IGizmo {\r\n /** Drag behavior responsible for the gizmos dragging interactions */\r\n dragBehavior: PointerDragBehavior;\r\n /** Drag distance in babylon units that the gizmo will snap to when dragged */\r\n snapDistance: number;\r\n /** Incremental snap scaling. When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,... */\r\n incrementalSnap: boolean;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n onSnapObservable: Observable<{ snapDistance: number }>;\r\n /** If the scaling operation should be done on all axis */\r\n uniformScaling: boolean;\r\n /** Custom sensitivity value for the drag strength */\r\n sensitivity: number;\r\n /** The magnitude of the drag strength (scaling factor) */\r\n dragScale: number;\r\n /** If the gizmo is enabled */\r\n isEnabled: boolean;\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n coloredMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n hoverMaterial: StandardMaterial;\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n disableMaterial: StandardMaterial;\r\n}\r\n\r\n/**\r\n * Single axis scale gizmo\r\n */\r\nexport class AxisScaleGizmo extends Gizmo implements IAxisScaleGizmo {\r\n /**\r\n * Drag behavior responsible for the gizmos dragging interactions\r\n */\r\n public dragBehavior: PointerDragBehavior;\r\n protected _pointerObserver: Nullable<Observer<PointerInfo>> = null;\r\n /**\r\n * Scale distance in babylon units that the gizmo will snap to when dragged (Default: 0)\r\n */\r\n public snapDistance = 0;\r\n /**\r\n * Event that fires each time the gizmo snaps to a new location.\r\n * * snapDistance is the change in distance\r\n */\r\n public onSnapObservable = new Observable<{ snapDistance: number }>();\r\n /**\r\n * If the scaling operation should be done on all axis (default: false)\r\n */\r\n public uniformScaling = false;\r\n /**\r\n * Custom sensitivity value for the drag strength\r\n */\r\n public sensitivity = 1;\r\n /**\r\n * The magnitude of the drag strength (scaling factor)\r\n */\r\n public dragScale = 1;\r\n\r\n /**\r\n * The minimal absolute scale per component. can be positive or negative but never smaller.\r\n */\r\n public static MinimumAbsoluteScale = Epsilon;\r\n\r\n /**\r\n * Incremental snap scaling (default is false). When true, with a snapDistance of 0.1, scaling will be 1.1,1.2,1.3 instead of, when false: 1.1,1.21,1.33,...\r\n */\r\n public incrementalSnap = false;\r\n\r\n protected _isEnabled: boolean = true;\r\n protected _parent: Nullable<ScaleGizmo> = null;\r\n\r\n protected _gizmoMesh: Mesh;\r\n protected _coloredMaterial: StandardMaterial;\r\n protected _hoverMaterial: StandardMaterial;\r\n protected _disableMaterial: StandardMaterial;\r\n protected _dragging: boolean = false;\r\n private _tmpVector = new Vector3(0, 0, 0);\r\n private _incrementalStartupValue = Vector3.Zero();\r\n\r\n /** Default material used to render when gizmo is not disabled or hovered */\r\n public get coloredMaterial() {\r\n return this._coloredMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is hovered with mouse*/\r\n public get hoverMaterial() {\r\n return this._hoverMaterial;\r\n }\r\n\r\n /** Material used to render when gizmo is disabled. typically grey.*/\r\n public get disableMaterial() {\r\n return this._disableMaterial;\r\n }\r\n\r\n /**\r\n * Creates an AxisScaleGizmo\r\n * @param dragAxis The axis which the gizmo will be able to scale on\r\n * @param color The color of the gizmo\r\n * @param gizmoLayer The utility layer the gizmo will be added to\r\n * @param parent\r\n * @param thickness display gizmo axis thickness\r\n * @param hoverColor The color of the gizmo when hovering over and dragging\r\n * @param disableColor The Color of the gizmo when its disabled\r\n */\r\n constructor(\r\n dragAxis: Vector3,\r\n color: Color3 = Color3.Gray(),\r\n gizmoLayer: UtilityLayerRenderer = UtilityLayerRenderer.DefaultUtilityLayer,\r\n parent: Nullable<ScaleGizmo> = null,\r\n thickness: number = 1,\r\n hoverColor: Color3 = Color3.Yellow(),\r\n disableColor: Color3 = Color3.Gray()\r\n ) {\r\n super(gizmoLayer);\r\n this._parent = parent;\r\n // Create Material\r\n this._coloredMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._coloredMaterial.diffuseColor = color;\r\n this._coloredMaterial.specularColor = color.subtract(new Color3(0.1, 0.1, 0.1));\r\n\r\n this._hoverMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._hoverMaterial.diffuseColor = hoverColor;\r\n\r\n this._disableMaterial = new StandardMaterial(\"\", gizmoLayer.utilityLayerScene);\r\n this._disableMaterial.diffuseColor = disableColor;\r\n this._disableMaterial.alpha = 0.4;\r\n\r\n // Build mesh + Collider\r\n this._gizmoMesh = new Mesh(\"axis\", gizmoLayer.utilityLayerScene);\r\n const { arrowMesh, arrowTail } = this._createGizmoMesh(this._gizmoMesh, thickness);\r\n const collider = this._createGizmoMesh(this._gizmoMesh, thickness + 4, true);\r\n\r\n this._gizmoMesh.lookAt(this._rootMesh.position.add(dragAxis));\r\n this._rootMesh.addChild(this._gizmoMesh, Gizmo.PreserveScaling);\r\n this._gizmoMesh.scaling.scaleInPlace(1 / 3);\r\n\r\n // Closure of initial prop values for resetting\r\n const nodePosition = arrowMesh.position.clone();\r\n const linePosition = arrowTail.position.clone();\r\n const lineScale = arrowTail.scaling.clone();\r\n\r\n const increaseGizmoMesh = (dragDistance: number) => {\r\n const dragStrength = dragDistance * (3 / this._rootMesh.scaling.length()) * 6;\r\n\r\n arrowMesh.position.z += dragStrength / 3.5;\r\n arrowTail.scaling.y += dragStrength;\r\n this.dragScale = arrowTail.scaling.y;\r\n arrowTail.position.z = arrowMesh.position.z / 2;\r\n };\r\n\r\n const resetGizmoMesh = () => {\r\n arrowMesh.position.set(nodePosition.x, nodePosition.y, nodePosition.z);\r\n arrowTail.position.set(linePosition.x, linePosition.y, linePosition.z);\r\n arrowTail.scaling.set(lineScale.x, lineScale.y, lineScale.z);\r\n this.dragScale = arrowTail.scaling.y;\r\n this._dragging = false;\r\n };\r\n\r\n // Add drag behavior to handle events when the gizmo is dragged\r\n this.dragBehavior = new PointerDragBehavior({ dragAxis: dragAxis });\r\n this.dragBehavior.moveAttached = false;\r\n this.dragBehavior.updateDragPlane = false;\r\n this._rootMesh.addBehavior(this.dragBehavior);\r\n\r\n let currentSnapDragDistance = 0;\r\n let currentSnapDragDistanceIncremental = 0;\r\n\r\n const tmpSnapEvent = { snapDistance: 0 };\r\n this.dragBehavior.onDragObservable.add((event) => {\r\n if (this.attachedNode) {\r\n // Drag strength is modified by the scale of the gizmo (eg. for small objects like boombox the strength will be increased to match the behavior of larger objects)\r\n const dragStrength = this.sensitivity * event.dragDistance * ((this.scaleRatio * 3) / this._rootMesh.scaling.length());\r\n const tmpVector = this._tmpVector;\r\n // Snapping logic\r\n let snapped = false;\r\n let dragSteps = 0;\r\n if (this.uniformScaling) {\r\n tmpVector.setAll(0.57735); // 1 / sqrt(3)\r\n } else {\r\n tmpVector.copyFrom(dragAxis);\r\n }\r\n if (this.snapDistance == 0) {\r\n tmpVector.scaleToRef(dragStrength, tmpVector);\r\n } else {\r\n currentSnapDragDistance += dragStrength;\r\n currentSnapDragDistanceIncremental += dragStrength;\r\n const currentSnap = this.incrementalSnap ? currentSnapDragDistanceIncremental : currentSnapDragDistance;\r\n if (Math.abs(currentSnap) > this.snapDistance) {\r\n dragSteps = Math.floor(Math.abs(currentSnap) / this.snapDistance);\r\n\r\n if (currentSnap < 0) {\r\n dragSteps *= -1;\r\n }\r\n currentSnapDragDistance = currentSnapDragDistance % this.snapDistance;\r\n tmpVector.scaleToRef(this.snapDistance * dragSteps, tmpVector);\r\n snapped = true;\r\n } else {\r\n tmpVector.scaleInPlace(0);\r\n }\r\n }\r\n\r\n tmpVector.addInPlaceFromFloats(1, 1, 1);\r\n // can't use Math.sign here because Math.sign(0) is 0 and it needs to be positive\r\n tmpVector.x = Math.abs(tmpVector.x) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.x < 0 ? -1 : 1) : tmpVector.x;\r\n tmpVector.y = Math.abs(tmpVector.y) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.y < 0 ? -1 : 1) : tmpVector.y;\r\n tmpVector.z = Math.abs(tmpVector.z) < AxisScaleGizmo.MinimumAbsoluteScale ? AxisScaleGizmo.MinimumAbsoluteScale * (tmpVector.z < 0 ? -1 : 1) : tmpVector.z;\r\n\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n if (Math.abs(this.snapDistance) > 0 && this.incrementalSnap) {\r\n // get current scaling\r\n this.attachedNode.getWorldMatrix().decompose(undefined, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], Gizmo.PreserveScaling ? transformNode : undefined);\r\n // apply incrementaly, without taking care of current scaling value\r\n tmpVector.addInPlace(this._incrementalStartupValue);\r\n tmpVector.addInPlaceFromFloats(-1, -1, -1);\r\n // keep same sign or stretching close to 0 will change orientation at each drag and scaling will oscilate around 0\r\n tmpVector.x = Math.abs(tmpVector.x) * (this._incrementalStartupValue.x > 0 ? 1 : -1);\r\n tmpVector.y = Math.abs(tmpVector.y) * (this._incrementalStartupValue.y > 0 ? 1 : -1);\r\n tmpVector.z = Math.abs(tmpVector.z) * (this._incrementalStartupValue.z > 0 ? 1 : -1);\r\n Matrix.ComposeToRef(tmpVector, TmpVectors.Quaternion[0], TmpVectors.Vector3[2], TmpVectors.Matrix[1]);\r\n } else {\r\n Matrix.ScalingToRef(tmpVector.x, tmpVector.y, tmpVector.z, TmpVectors.Matrix[2]);\r\n TmpVectors.Matrix[2].multiplyToRef(this.attachedNode.getWorldMatrix(), TmpVectors.Matrix[1]);\r\n }\r\n\r\n // check scaling are not out of bounds. If not, copy resulting temp matrix to node world matrix\r\n TmpVectors.Matrix[1].decompose(TmpVectors.Vector3[1], undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n\r\n const maxScale = 100000;\r\n if (Math.abs(TmpVectors.Vector3[1].x) < maxScale && Math.abs(TmpVectors.Vector3[1].y) < maxScale && Math.abs(TmpVectors.Vector3[1].z) < maxScale) {\r\n this.attachedNode.getWorldMatrix().copyFrom(TmpVectors.Matrix[1]);\r\n }\r\n\r\n // notify observers\r\n if (snapped) {\r\n tmpSnapEvent.snapDistance = this.snapDistance * dragSteps;\r\n this.onSnapObservable.notifyObservers(tmpSnapEvent);\r\n }\r\n this._matrixChanged();\r\n }\r\n });\r\n // On Drag Listener: to move gizmo mesh with user action\r\n this.dragBehavior.onDragStartObservable.add(() => {\r\n this._dragging = true;\r\n const transformNode = (<Mesh>this.attachedNode)._isMesh ? (this.attachedNode as TransformNode) : undefined;\r\n this.attachedNode?.getWorldMatrix().decompose(this._incrementalStartupValue, undefined, undefined, Gizmo.PreserveScaling ? transformNode : undefined);\r\n currentSnapDragDistance = 0;\r\n currentSnapDragDistanceIncremental = 0;\r\n });\r\n this.dragBehavior.onDragObservable.add((e) => increaseGizmoMesh(e.dragDistance));\r\n this.dragBehavior.onDragEndObservable.add(resetGizmoMesh);\r\n\r\n // Listeners for Universal Scalar\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragObservable?.add((e) => increaseGizmoMesh(e.delta.y));\r\n parent?.uniformScaleGizmo?.dragBehavior?.onDragEndObservable?.add(resetGizmoMesh);\r\n\r\n const cache: GizmoAxisCache = {\r\n gizmoMeshes: [arrowMesh, arrowTail],\r\n colliderMeshes: [collider.arrowMesh, collider.arrowTail],\r\n material: this._coloredMaterial,\r\n hoverMaterial: this._hoverMaterial,\r\n disableMaterial: this._disableMaterial,\r\n active: false,\r\n dragBehavior: this.dragBehavior,\r\n };\r\n this._parent?.addToAxisCache(this._gizmoMesh, cache);\r\n\r\n this._pointerObserver = gizmoLayer.utilityLayerScene.onPointerObservable.add((pointerInfo) => {\r\n if (this._customMeshSet) {\r\n return;\r\n }\r\n // axis mesh cache\r\n let meshCache = this._parent?.getAxisCache(this._gizmoMesh);\r\n this._isHovered = !!meshCache && !!(meshCache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n // uniform mesh cache\r\n meshCache = this._parent?.getAxisCache(this._rootMesh);\r\n this._isHovered ||= !!meshCache && !!(meshCache.colliderMeshes.indexOf(<Mesh>pointerInfo?.pickInfo?.pickedMesh) != -1);\r\n if (!this._parent) {\r\n const material = this.dragBehavior.enabled ? (this._isHovered || this._dragging ? this._hoverMaterial : this._coloredMaterial) : this._disableMaterial;\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, material);\r\n }\r\n });\r\n\r\n this.dragBehavior.onEnabledObservable.add((newState) => {\r\n this._setGizmoMeshMaterial(cache.gizmoMeshes, newState ? this._coloredMaterial : this._disableMaterial);\r\n });\r\n\r\n const light = gizmoLayer._getSharedGizmoLight();\r\n light.includedOnlyMeshes = light.includedOnlyMeshes.concat(this._rootMesh.getChildMeshes());\r\n }\r\n\r\n /**\r\n * @internal\r\n * Create Geometry for Gizmo\r\n * @param parentMesh\r\n * @param thickness\r\n * @param isCollider\r\n * @returns the gizmo mesh\r\n */\r\n protected _createGizmoMesh(parentMesh: AbstractMesh, thickness: number, isCollider = false) {\r\n const arrowMesh = CreateBox(\"yPosMesh\", { size: 0.4 * (1 + (thickness - 1) / 4) }, this.gizmoLayer.utilityLayerScene);\r\n const arrowTail = CreateCylinder(\r\n \"cylinder\",\r\n { diameterTop: 0.005 * thickness, height: 0.275, diameterBottom: 0.005 * thickness, tessellation: 96 },\r\n this.gizmoLayer.utilityLayerScene\r\n );\r\n\r\n // Position arrow pointing in its drag axis\r\n arrowMesh.scaling.scaleInPlace(0.1);\r\n arrowMesh.material = this._coloredMaterial;\r\n arrowMesh.rotation.x = Math.PI / 2;\r\n arrowMesh.position.z += 0.3;\r\n\r\n arrowTail.material = this._coloredMaterial;\r\n arrowTail.position.z += 0.275 / 2;\r\n arrowTail.rotation.x = Math.PI / 2;\r\n\r\n if (isCollider) {\r\n arrowMesh.visibility = 0;\r\n arrowTail.visibility = 0;\r\n }\r\n\r\n parentMesh.addChild(arrowMesh);\r\n parentMesh.addChild(arrowTail);\r\n\r\n return { arrowMesh, arrowTail };\r\n }\r\n\r\n protected override _attachedNodeChanged(value: Nullable<Node>) {\r\n if (this.dragBehavior) {\r\n this.dragBehavior.enabled = value ? true : false;\r\n }\r\n }\r\n\r\n /**\r\n * If the gizmo is enabled\r\n */\r\n public set isEnabled(value: boolean) {\r\n this._isEnabled = value;\r\n if (!value) {\r\n this.attachedMesh = null;\r\n this.attachedNode = null;\r\n } else {\r\n if (this._parent) {\r\n this.attachedMesh = this._parent.attachedMesh;\r\n this.attachedNode = this._parent.attachedNode;\r\n }\r\n }\r\n }\r\n\r\n public get isEnabled(): boolean {\r\n return this._isEnabled;\r\n }\r\n\r\n /**\r\n * Disposes of the gizmo\r\n */\r\n public override dispose() {\r\n this.onSnapObservable.clear();\r\n this.gizmoLayer.utilityLayerScene.onPointerObservable.remove(this._pointerObserver);\r\n this.dragBehavior.detach();\r\n if (this._gizmoMesh) {\r\n this._gizmoMesh.dispose();\r\n }\r\n [this._coloredMaterial, this._hoverMaterial, this._disableMaterial].forEach((matl) => {\r\n if (matl) {\r\n matl.dispose();\r\n }\r\n });\r\n super.dispose();\r\n }\r\n\r\n /**\r\n * Disposes and replaces the current meshes in the gizmo with the specified mesh\r\n * @param mesh The mesh to replace the default mesh of the gizmo\r\n * @param useGizmoMaterial If the gizmo's default material should be used (default: false)\r\n */\r\n public override setCustomMesh(mesh: Mesh, useGizmoMaterial: boolean = false) {\r\n super.setCustomMesh(mesh);\r\n if (useGizmoMaterial) {\r\n this._rootMesh.getChildMeshes().forEach((m) => {\r\n m.material = this._coloredMaterial;\r\n if ((<LinesMesh>m).color) {\r\n (<LinesMesh>m).color = this._coloredMaterial.diffuseColor;\r\n }\r\n });\r\n this._customMeshSet = false;\r\n }\r\n }\r\n}\r\n"]}