@babylonjs/core 5.0.0-alpha.57 → 5.0.0-alpha.60

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 (273) hide show
  1. package/Buffers/buffer.js +3 -2
  2. package/Buffers/buffer.js.map +1 -1
  3. package/Cameras/Inputs/BaseCameraPointersInput.d.ts +0 -1
  4. package/Cameras/Inputs/BaseCameraPointersInput.js +5 -5
  5. package/Cameras/Inputs/BaseCameraPointersInput.js.map +1 -1
  6. package/Cameras/Inputs/freeCameraMouseInput.d.ts +0 -1
  7. package/Cameras/Inputs/freeCameraMouseInput.js +27 -28
  8. package/Cameras/Inputs/freeCameraMouseInput.js.map +1 -1
  9. package/Cameras/camera.d.ts +4 -0
  10. package/Cameras/camera.js +2 -0
  11. package/Cameras/camera.js.map +1 -1
  12. package/Culling/boundingBox.d.ts +7 -1
  13. package/Culling/boundingBox.js +4 -0
  14. package/Culling/boundingBox.js.map +1 -1
  15. package/DeviceInput/Helpers/eventFactory.js +1 -2
  16. package/DeviceInput/Helpers/eventFactory.js.map +1 -1
  17. package/DeviceInput/Implementations/webDeviceInputSystem.d.ts +1 -0
  18. package/DeviceInput/Implementations/webDeviceInputSystem.js +5 -12
  19. package/DeviceInput/Implementations/webDeviceInputSystem.js.map +1 -1
  20. package/DeviceInput/InputDevices/deviceEnums.d.ts +1 -3
  21. package/DeviceInput/InputDevices/deviceEnums.js +0 -2
  22. package/DeviceInput/InputDevices/deviceEnums.js.map +1 -1
  23. package/Engines/Extensions/engine.alpha.js +6 -6
  24. package/Engines/Extensions/engine.alpha.js.map +1 -1
  25. package/Engines/Extensions/engine.renderTarget.js +1 -1
  26. package/Engines/Extensions/engine.renderTarget.js.map +1 -1
  27. package/Engines/IDrawContext.d.ts +4 -0
  28. package/Engines/IDrawContext.js.map +1 -1
  29. package/Engines/IMaterialContext.d.ts +1 -0
  30. package/Engines/IMaterialContext.js.map +1 -1
  31. package/Engines/WebGPU/Extensions/engine.alpha.js +20 -31
  32. package/Engines/WebGPU/Extensions/engine.alpha.js.map +1 -1
  33. package/Engines/WebGPU/Extensions/engine.renderTarget.js +1 -38
  34. package/Engines/WebGPU/Extensions/engine.renderTarget.js.map +1 -1
  35. package/Engines/WebGPU/Extensions/engine.storageBuffer.js +1 -1
  36. package/Engines/WebGPU/Extensions/engine.storageBuffer.js.map +1 -1
  37. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js +1 -1
  38. package/Engines/WebGPU/Extensions/engine.uniformBuffer.js.map +1 -1
  39. package/Engines/WebGPU/webgpuBufferManager.d.ts +1 -0
  40. package/Engines/WebGPU/webgpuBufferManager.js +3 -0
  41. package/Engines/WebGPU/webgpuBufferManager.js.map +1 -1
  42. package/Engines/WebGPU/webgpuCacheBindGroups.d.ts +3 -2
  43. package/Engines/WebGPU/webgpuCacheBindGroups.js +15 -14
  44. package/Engines/WebGPU/webgpuCacheBindGroups.js.map +1 -1
  45. package/Engines/WebGPU/webgpuCacheRenderPipeline.js +18 -18
  46. package/Engines/WebGPU/webgpuCacheRenderPipeline.js.map +1 -1
  47. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.d.ts +2 -0
  48. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js +17 -0
  49. package/Engines/WebGPU/webgpuCacheRenderPipelineTree.js.map +1 -1
  50. package/Engines/WebGPU/webgpuDrawContext.d.ts +24 -2
  51. package/Engines/WebGPU/webgpuDrawContext.js +75 -1
  52. package/Engines/WebGPU/webgpuDrawContext.js.map +1 -1
  53. package/Engines/WebGPU/webgpuMaterialContext.d.ts +1 -6
  54. package/Engines/WebGPU/webgpuMaterialContext.js +11 -8
  55. package/Engines/WebGPU/webgpuMaterialContext.js.map +1 -1
  56. package/Engines/WebGPU/webgpuShaderProcessor.d.ts +1 -0
  57. package/Engines/WebGPU/webgpuShaderProcessor.js +2 -1
  58. package/Engines/WebGPU/webgpuShaderProcessor.js.map +1 -1
  59. package/Engines/WebGPU/webgpuTextureHelper.d.ts +1 -0
  60. package/Engines/WebGPU/webgpuTextureHelper.js +67 -1
  61. package/Engines/WebGPU/webgpuTextureHelper.js.map +1 -1
  62. package/Engines/constants.d.ts +40 -7
  63. package/Engines/constants.js +40 -7
  64. package/Engines/constants.js.map +1 -1
  65. package/Engines/engine.d.ts +37 -2
  66. package/Engines/engine.js +68 -0
  67. package/Engines/engine.js.map +1 -1
  68. package/Engines/engineFeatures.d.ts +2 -0
  69. package/Engines/engineFeatures.js.map +1 -1
  70. package/Engines/nativeEngine.js +19 -13
  71. package/Engines/nativeEngine.js.map +1 -1
  72. package/Engines/nullEngine.js +1 -0
  73. package/Engines/nullEngine.js.map +1 -1
  74. package/Engines/thinEngine.d.ts +8 -2
  75. package/Engines/thinEngine.js +10 -5
  76. package/Engines/thinEngine.js.map +1 -1
  77. package/Engines/webgpuEngine.d.ts +28 -7
  78. package/Engines/webgpuEngine.js +177 -58
  79. package/Engines/webgpuEngine.js.map +1 -1
  80. package/Inputs/scene.inputManager.js +2 -3
  81. package/Inputs/scene.inputManager.js.map +1 -1
  82. package/Layers/effectLayer.d.ts +0 -2
  83. package/Layers/effectLayer.js +12 -11
  84. package/Layers/effectLayer.js.map +1 -1
  85. package/Layers/effectLayerSceneComponent.js +5 -0
  86. package/Layers/effectLayerSceneComponent.js.map +1 -1
  87. package/Layers/glowLayer.js +2 -0
  88. package/Layers/glowLayer.js.map +1 -1
  89. package/Layers/highlightLayer.js +2 -0
  90. package/Layers/highlightLayer.js.map +1 -1
  91. package/LensFlares/lensFlare.d.ts +3 -0
  92. package/LensFlares/lensFlare.js +5 -0
  93. package/LensFlares/lensFlare.js.map +1 -1
  94. package/LensFlares/lensFlareSystem.d.ts +2 -1
  95. package/LensFlares/lensFlareSystem.js +15 -12
  96. package/LensFlares/lensFlareSystem.js.map +1 -1
  97. package/Lights/Shadows/cascadedShadowGenerator.d.ts +0 -2
  98. package/Lights/Shadows/cascadedShadowGenerator.js +3 -12
  99. package/Lights/Shadows/cascadedShadowGenerator.js.map +1 -1
  100. package/Lights/Shadows/shadowGenerator.d.ts +0 -3
  101. package/Lights/Shadows/shadowGenerator.js +8 -14
  102. package/Lights/Shadows/shadowGenerator.js.map +1 -1
  103. package/Lights/light.js +3 -0
  104. package/Lights/light.js.map +1 -1
  105. package/Loading/Plugins/babylonFileLoader.js +3 -0
  106. package/Loading/Plugins/babylonFileLoader.js.map +1 -1
  107. package/Materials/Background/backgroundMaterial.js +8 -11
  108. package/Materials/Background/backgroundMaterial.js.map +1 -1
  109. package/Materials/Node/Blocks/PBR/reflectionBlock.js +1 -1
  110. package/Materials/Node/Blocks/PBR/reflectionBlock.js.map +1 -1
  111. package/Materials/Node/Blocks/cloudBlock.d.ts +4 -0
  112. package/Materials/Node/Blocks/cloudBlock.js +27 -8
  113. package/Materials/Node/Blocks/cloudBlock.js.map +1 -1
  114. package/Materials/Node/Blocks/colorMergerBlock.d.ts +21 -0
  115. package/Materials/Node/Blocks/colorMergerBlock.js +48 -4
  116. package/Materials/Node/Blocks/colorMergerBlock.js.map +1 -1
  117. package/Materials/Node/Blocks/vectorMergerBlock.d.ts +25 -0
  118. package/Materials/Node/Blocks/vectorMergerBlock.js +93 -23
  119. package/Materials/Node/Blocks/vectorMergerBlock.js.map +1 -1
  120. package/Materials/Node/nodeMaterial.js +4 -4
  121. package/Materials/Node/nodeMaterial.js.map +1 -1
  122. package/Materials/PBR/pbrBaseMaterial.d.ts +1 -0
  123. package/Materials/PBR/pbrBaseMaterial.js +10 -5
  124. package/Materials/PBR/pbrBaseMaterial.js.map +1 -1
  125. package/Materials/PBR/pbrClearCoatConfiguration.js +1 -1
  126. package/Materials/PBR/pbrClearCoatConfiguration.js.map +1 -1
  127. package/Materials/PBR/pbrSheenConfiguration.js +1 -1
  128. package/Materials/PBR/pbrSheenConfiguration.js.map +1 -1
  129. package/Materials/PBR/pbrSubSurfaceConfiguration.js +1 -1
  130. package/Materials/PBR/pbrSubSurfaceConfiguration.js.map +1 -1
  131. package/Materials/Textures/baseTexture.d.ts +2 -0
  132. package/Materials/Textures/baseTexture.js +2 -0
  133. package/Materials/Textures/baseTexture.js.map +1 -1
  134. package/Materials/Textures/renderTargetTexture.d.ts +27 -0
  135. package/Materials/Textures/renderTargetTexture.js +127 -14
  136. package/Materials/Textures/renderTargetTexture.js.map +1 -1
  137. package/Materials/Textures/texture.js +11 -4
  138. package/Materials/Textures/texture.js.map +1 -1
  139. package/Materials/drawWrapper.d.ts +2 -1
  140. package/Materials/drawWrapper.js +10 -1
  141. package/Materials/drawWrapper.js.map +1 -1
  142. package/Materials/material.d.ts +3 -1
  143. package/Materials/material.detailMapConfiguration.d.ts +1 -1
  144. package/Materials/material.detailMapConfiguration.js +2 -2
  145. package/Materials/material.detailMapConfiguration.js.map +1 -1
  146. package/Materials/material.js +18 -9
  147. package/Materials/material.js.map +1 -1
  148. package/Materials/materialHelper.js +3 -1
  149. package/Materials/materialHelper.js.map +1 -1
  150. package/Materials/pushMaterial.js +1 -1
  151. package/Materials/pushMaterial.js.map +1 -1
  152. package/Materials/shaderMaterial.d.ts +0 -1
  153. package/Materials/shaderMaterial.js +3 -4
  154. package/Materials/shaderMaterial.js.map +1 -1
  155. package/Materials/shadowDepthWrapper.d.ts +4 -4
  156. package/Materials/shadowDepthWrapper.js +16 -15
  157. package/Materials/shadowDepthWrapper.js.map +1 -1
  158. package/Materials/standardMaterial.d.ts +1 -0
  159. package/Materials/standardMaterial.js +10 -5
  160. package/Materials/standardMaterial.js.map +1 -1
  161. package/Materials/uniformBuffer.d.ts +10 -2
  162. package/Materials/uniformBuffer.js +17 -11
  163. package/Materials/uniformBuffer.js.map +1 -1
  164. package/Meshes/abstractMesh.d.ts +13 -0
  165. package/Meshes/abstractMesh.js +22 -2
  166. package/Meshes/abstractMesh.js.map +1 -1
  167. package/Meshes/geometry.d.ts +7 -0
  168. package/Meshes/geometry.js +16 -0
  169. package/Meshes/geometry.js.map +1 -1
  170. package/Meshes/linesMesh.js +1 -1
  171. package/Meshes/linesMesh.js.map +1 -1
  172. package/Meshes/mesh.js +15 -0
  173. package/Meshes/mesh.js.map +1 -1
  174. package/Meshes/subMesh.d.ts +10 -9
  175. package/Meshes/subMesh.js +44 -43
  176. package/Meshes/subMesh.js.map +1 -1
  177. package/Misc/basis.d.ts +3 -2
  178. package/Misc/basis.js +16 -15
  179. package/Misc/basis.js.map +1 -1
  180. package/Misc/environmentTextureTools.js +1 -0
  181. package/Misc/environmentTextureTools.js.map +1 -1
  182. package/Misc/rgbdTextureTools.js +1 -0
  183. package/Misc/rgbdTextureTools.js.map +1 -1
  184. package/Misc/sceneSerializer.js +17 -17
  185. package/Misc/sceneSerializer.js.map +1 -1
  186. package/Misc/textureTools.js +2 -0
  187. package/Misc/textureTools.js.map +1 -1
  188. package/Particles/gpuParticleSystem.d.ts +5 -1
  189. package/Particles/gpuParticleSystem.js +31 -5
  190. package/Particles/gpuParticleSystem.js.map +1 -1
  191. package/Particles/particleSystem.d.ts +5 -1
  192. package/Particles/particleSystem.js +35 -5
  193. package/Particles/particleSystem.js.map +1 -1
  194. package/Physics/Plugins/ammoJSPlugin.d.ts +1 -0
  195. package/Physics/Plugins/ammoJSPlugin.js +10 -0
  196. package/Physics/Plugins/ammoJSPlugin.js.map +1 -1
  197. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js +2 -0
  198. package/PostProcesses/RenderPipeline/Pipelines/lensRenderingPipeline.js.map +1 -1
  199. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js +1 -0
  200. package/PostProcesses/RenderPipeline/Pipelines/ssaoRenderingPipeline.js.map +1 -1
  201. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js +1 -0
  202. package/PostProcesses/RenderPipeline/Pipelines/standardRenderingPipeline.js.map +1 -1
  203. package/PostProcesses/bloomMergePostProcess.js +1 -0
  204. package/PostProcesses/bloomMergePostProcess.js.map +1 -1
  205. package/PostProcesses/depthOfFieldBlurPostProcess.js +1 -0
  206. package/PostProcesses/depthOfFieldBlurPostProcess.js.map +1 -1
  207. package/PostProcesses/depthOfFieldMergePostProcess.js +1 -0
  208. package/PostProcesses/depthOfFieldMergePostProcess.js.map +1 -1
  209. package/PostProcesses/extractHighlightsPostProcess.js +1 -0
  210. package/PostProcesses/extractHighlightsPostProcess.js.map +1 -1
  211. package/PostProcesses/postProcess.d.ts +6 -0
  212. package/PostProcesses/postProcess.js +9 -1
  213. package/PostProcesses/postProcess.js.map +1 -1
  214. package/PostProcesses/screenSpaceReflectionPostProcess.js +1 -1
  215. package/PostProcesses/screenSpaceReflectionPostProcess.js.map +1 -1
  216. package/PostProcesses/tonemapPostProcess.d.ts +2 -1
  217. package/PostProcesses/tonemapPostProcess.js +3 -2
  218. package/PostProcesses/tonemapPostProcess.js.map +1 -1
  219. package/Rendering/boundingBoxRenderer.d.ts +5 -3
  220. package/Rendering/boundingBoxRenderer.js +46 -14
  221. package/Rendering/boundingBoxRenderer.js.map +1 -1
  222. package/Rendering/depthPeelingRenderer.d.ts +20 -1
  223. package/Rendering/depthPeelingRenderer.js +125 -32
  224. package/Rendering/depthPeelingRenderer.js.map +1 -1
  225. package/Rendering/depthPeelingSceneComponent.d.ts +2 -0
  226. package/Rendering/depthPeelingSceneComponent.js +16 -0
  227. package/Rendering/depthPeelingSceneComponent.js.map +1 -1
  228. package/Rendering/depthRenderer.d.ts +9 -2
  229. package/Rendering/depthRenderer.js +77 -43
  230. package/Rendering/depthRenderer.js.map +1 -1
  231. package/Rendering/depthRendererSceneComponent.js +0 -1
  232. package/Rendering/depthRendererSceneComponent.js.map +1 -1
  233. package/Rendering/edgesRenderer.d.ts +2 -0
  234. package/Rendering/edgesRenderer.js +11 -0
  235. package/Rendering/edgesRenderer.js.map +1 -1
  236. package/Rendering/geometryBufferRenderer.js +4 -4
  237. package/Rendering/geometryBufferRenderer.js.map +1 -1
  238. package/Rendering/outlineRenderer.d.ts +5 -4
  239. package/Rendering/outlineRenderer.js +24 -19
  240. package/Rendering/outlineRenderer.js.map +1 -1
  241. package/Rendering/prePassRenderer.js +3 -2
  242. package/Rendering/prePassRenderer.js.map +1 -1
  243. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.d.ts +5 -0
  244. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js +7 -0
  245. package/Shaders/ShadersInclude/boundingBoxRendererFragmentDeclaration.js.map +1 -0
  246. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.d.ts +5 -0
  247. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js +7 -0
  248. package/Shaders/ShadersInclude/boundingBoxRendererUboDeclaration.js.map +1 -0
  249. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.d.ts +5 -0
  250. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js +7 -0
  251. package/Shaders/ShadersInclude/boundingBoxRendererVertexDeclaration.js.map +1 -0
  252. package/Shaders/ShadersInclude/oitFragment.js +1 -1
  253. package/Shaders/ShadersInclude/oitFragment.js.map +1 -1
  254. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js +1 -1
  255. package/Shaders/ShadersInclude/shadowsFragmentFunctions.js.map +1 -1
  256. package/Shaders/boundingBoxRenderer.fragment.d.ts +7 -0
  257. package/Shaders/boundingBoxRenderer.fragment.js +9 -0
  258. package/Shaders/boundingBoxRenderer.fragment.js.map +1 -0
  259. package/Shaders/boundingBoxRenderer.vertex.d.ts +7 -0
  260. package/Shaders/boundingBoxRenderer.vertex.js +9 -0
  261. package/Shaders/boundingBoxRenderer.vertex.js.map +1 -0
  262. package/Sprites/spriteManager.d.ts +3 -1
  263. package/Sprites/spriteManager.js +16 -5
  264. package/Sprites/spriteManager.js.map +1 -1
  265. package/Sprites/spriteRenderer.d.ts +2 -0
  266. package/Sprites/spriteRenderer.js +26 -0
  267. package/Sprites/spriteRenderer.js.map +1 -1
  268. package/XR/features/WebXRWalkingLocomotion.js +28 -13
  269. package/XR/features/WebXRWalkingLocomotion.js.map +1 -1
  270. package/package.json +16 -1
  271. package/scene.d.ts +18 -4
  272. package/scene.js +100 -41
  273. package/scene.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"eventFactory.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Helpers/eventFactory.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { EventConstants, IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceInputSystem } from \"../Interfaces/inputInterfaces\";\r\n\r\n/**\r\n * Class to wrap DeviceInputSystem data into an event object\r\n */\r\nexport class DeviceEventFactory {\r\n /**\r\n * Create device input events based on provided type and slot\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object\r\n */\r\n public static CreateDeviceEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): IEvent {\r\n switch (deviceType) {\r\n case DeviceType.Keyboard:\r\n return this._createKeyboardEvent(inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n case DeviceType.Mouse:\r\n if (inputIndex === PointerInput.MouseWheelX || inputIndex === PointerInput.MouseWheelY || inputIndex === PointerInput.MouseWheelZ) {\r\n return this._createWheelEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n }\r\n case DeviceType.Touch:\r\n return this._createPointerEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n default:\r\n throw `Unable to generate event for device ${DeviceType[deviceType]}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates pointer event\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Pointer)\r\n */\r\n private static _createPointerEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.pointerId = deviceType === DeviceType.Mouse ? 1 : deviceSlot;\r\n\r\n if (\r\n inputIndex === PointerInput.Horizontal ||\r\n inputIndex === PointerInput.Vertical ||\r\n inputIndex === PointerInput.DeltaHorizontal ||\r\n inputIndex === PointerInput.DeltaVertical ||\r\n inputIndex === PointerInput.FakeMove\r\n ) {\r\n evt.type = \"pointermove\";\r\n }\r\n else if (inputIndex >= PointerInput.LeftClick && inputIndex <= PointerInput.RightClick) {\r\n evt.type = (currentState === 1) ? \"pointerdown\" : \"pointerup\";\r\n evt.button = inputIndex - 2;\r\n }\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Wheel Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Wheel)\r\n */\r\n private static _createWheelEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.type = \"wheel\";\r\n evt.deltaMode = EventConstants.DOM_DELTA_PIXEL;\r\n evt.deltaX = (inputIndex === PointerInput.MouseWheelX) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelX);\r\n evt.deltaY = (inputIndex === PointerInput.MouseWheelY) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelY);\r\n evt.deltaZ = (inputIndex === PointerInput.MouseWheelZ) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelZ);\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Mouse)\r\n */\r\n private static _createMouseEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n const pointerX = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Horizontal);\r\n const pointerY = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Vertical);\r\n // If dealing with a change to the delta, grab values for event init\r\n const movementX = inputIndex === PointerInput.DeltaHorizontal ? currentState : 0;\r\n const movementY = inputIndex === PointerInput.DeltaVertical ? currentState : 0;\r\n // Get offsets from container\r\n const offsetX = inputIndex === PointerInput.DeltaHorizontal && elementToAttachTo ? movementX! - elementToAttachTo.getBoundingClientRect().x : 0;\r\n const offsetY = inputIndex === PointerInput.DeltaVertical && elementToAttachTo ? movementY! - elementToAttachTo.getBoundingClientRect().y : 0;\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.clientX = pointerX;\r\n evt.clientY = pointerY;\r\n evt.movementX = movementX;\r\n evt.movementY = movementY;\r\n evt.offsetX = offsetX;\r\n evt.offsetY = offsetY;\r\n evt.x = pointerX;\r\n evt.y = pointerY;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Keyboard Event\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Keyboard)\r\n */\r\n private static _createKeyboardEvent(inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.type = currentState === 1 ? \"keydown\" : \"keyup\";\r\n evt.key = String.fromCharCode(inputIndex);\r\n evt.keyCode = inputIndex;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Add parameters for non-character keys (Ctrl, Alt, Meta, Shift)\r\n * @param evt Event object to add parameters to\r\n * @param deviceInputSystem DeviceInputSystem to pull values from\r\n */\r\n private static _checkNonCharacterKeys(evt: any, deviceInputSystem: IDeviceInputSystem): void {\r\n const isKeyboardActive = deviceInputSystem.isDeviceAvailable(DeviceType.Keyboard);\r\n const altKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 18) === 1;\r\n const ctrlKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 17) === 1;\r\n const metaKey =\r\n isKeyboardActive &&\r\n (deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 91) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 92) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 93) === 1);\r\n const shiftKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 16) === 1;\r\n\r\n evt.altKey = altKey;\r\n evt.ctrlKey = ctrlKey;\r\n evt.metaKey = metaKey;\r\n evt.shiftKey = shiftKey;\r\n }\r\n\r\n /**\r\n * Create base event object\r\n * @param elementToAttachTo Value to use as event target\r\n * @returns\r\n */\r\n private static _createEvent(elementToAttachTo: any): any {\r\n const evt: { [k: string]: any } = {};\r\n evt.preventDefault = () => { };\r\n evt.target = elementToAttachTo;\r\n\r\n return evt;\r\n }\r\n}"]}
1
+ {"version":3,"file":"eventFactory.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Helpers/eventFactory.ts"],"names":[],"mappings":"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","sourcesContent":["\r\nimport { EventConstants, IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceInputSystem } from \"../Interfaces/inputInterfaces\";\r\n\r\n/**\r\n * Class to wrap DeviceInputSystem data into an event object\r\n */\r\nexport class DeviceEventFactory {\r\n /**\r\n * Create device input events based on provided type and slot\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object\r\n */\r\n public static CreateDeviceEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): IEvent {\r\n switch (deviceType) {\r\n case DeviceType.Keyboard:\r\n return this._createKeyboardEvent(inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n case DeviceType.Mouse:\r\n if (inputIndex === PointerInput.MouseWheelX || inputIndex === PointerInput.MouseWheelY || inputIndex === PointerInput.MouseWheelZ) {\r\n return this._createWheelEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n }\r\n case DeviceType.Touch:\r\n return this._createPointerEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n default:\r\n throw `Unable to generate event for device ${DeviceType[deviceType]}`;\r\n }\r\n }\r\n\r\n /**\r\n * Creates pointer event\r\n *\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Pointer)\r\n */\r\n private static _createPointerEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.pointerId = deviceType === DeviceType.Mouse ? 1 : deviceSlot;\r\n\r\n if (\r\n inputIndex === PointerInput.Horizontal ||\r\n inputIndex === PointerInput.Vertical ||\r\n inputIndex === PointerInput.DeltaHorizontal ||\r\n inputIndex === PointerInput.DeltaVertical\r\n ) {\r\n evt.type = \"pointermove\";\r\n }\r\n else if (inputIndex >= PointerInput.LeftClick && inputIndex <= PointerInput.RightClick) {\r\n evt.type = (currentState === 1) ? \"pointerdown\" : \"pointerup\";\r\n evt.button = inputIndex - 2;\r\n }\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Wheel Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Wheel)\r\n */\r\n private static _createWheelEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo: any): any {\r\n const evt = this._createMouseEvent(deviceType, deviceSlot, inputIndex, currentState, deviceInputSystem, elementToAttachTo);\r\n\r\n evt.type = \"wheel\";\r\n evt.deltaMode = EventConstants.DOM_DELTA_PIXEL;\r\n evt.deltaX = (inputIndex === PointerInput.MouseWheelX) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelX);\r\n evt.deltaY = (inputIndex === PointerInput.MouseWheelY) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelY);\r\n evt.deltaZ = (inputIndex === PointerInput.MouseWheelZ) ? currentState : deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.MouseWheelZ);\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Mouse Event\r\n * @param deviceType Type of device\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Mouse)\r\n */\r\n private static _createMouseEvent(deviceType: DeviceType, deviceSlot: number, inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n const pointerX = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Horizontal);\r\n const pointerY = deviceInputSystem.pollInput(deviceType, deviceSlot, PointerInput.Vertical);\r\n // If dealing with a change to the delta, grab values for event init\r\n const movementX = inputIndex === PointerInput.DeltaHorizontal ? currentState : 0;\r\n const movementY = inputIndex === PointerInput.DeltaVertical ? currentState : 0;\r\n // Get offsets from container\r\n const offsetX = inputIndex === PointerInput.DeltaHorizontal && elementToAttachTo ? movementX! - elementToAttachTo.getBoundingClientRect().x : 0;\r\n const offsetY = inputIndex === PointerInput.DeltaVertical && elementToAttachTo ? movementY! - elementToAttachTo.getBoundingClientRect().y : 0;\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.clientX = pointerX;\r\n evt.clientY = pointerY;\r\n evt.movementX = movementX;\r\n evt.movementY = movementY;\r\n evt.offsetX = offsetX;\r\n evt.offsetY = offsetY;\r\n evt.x = pointerX;\r\n evt.y = pointerY;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Create Keyboard Event\r\n * @param inputIndex Id of input to be checked\r\n * @param currentState Current value for given input\r\n * @param deviceInputSystem Reference to DeviceInputSystem\r\n * @param elementToAttachTo HTMLElement to reference as target for inputs\r\n * @returns IEvent object (Keyboard)\r\n */\r\n private static _createKeyboardEvent(inputIndex: number, currentState: Nullable<number>, deviceInputSystem: IDeviceInputSystem, elementToAttachTo?: any): any {\r\n const evt = this._createEvent(elementToAttachTo);\r\n this._checkNonCharacterKeys(evt, deviceInputSystem);\r\n\r\n evt.type = currentState === 1 ? \"keydown\" : \"keyup\";\r\n evt.key = String.fromCharCode(inputIndex);\r\n evt.keyCode = inputIndex;\r\n\r\n return evt;\r\n }\r\n\r\n /**\r\n * Add parameters for non-character keys (Ctrl, Alt, Meta, Shift)\r\n * @param evt Event object to add parameters to\r\n * @param deviceInputSystem DeviceInputSystem to pull values from\r\n */\r\n private static _checkNonCharacterKeys(evt: any, deviceInputSystem: IDeviceInputSystem): void {\r\n const isKeyboardActive = deviceInputSystem.isDeviceAvailable(DeviceType.Keyboard);\r\n const altKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 18) === 1;\r\n const ctrlKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 17) === 1;\r\n const metaKey =\r\n isKeyboardActive &&\r\n (deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 91) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 92) === 1 ||\r\n deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 93) === 1);\r\n const shiftKey = isKeyboardActive && deviceInputSystem.pollInput(DeviceType.Keyboard, 0, 16) === 1;\r\n\r\n evt.altKey = altKey;\r\n evt.ctrlKey = ctrlKey;\r\n evt.metaKey = metaKey;\r\n evt.shiftKey = shiftKey;\r\n }\r\n\r\n /**\r\n * Create base event object\r\n * @param elementToAttachTo Value to use as event target\r\n * @returns\r\n */\r\n private static _createEvent(elementToAttachTo: any): any {\r\n const evt: { [k: string]: any } = {};\r\n evt.preventDefault = () => { };\r\n evt.target = elementToAttachTo;\r\n\r\n return evt;\r\n }\r\n}"]}
@@ -28,6 +28,7 @@ export declare class WebDeviceInputSystem implements IDeviceInputSystem {
28
28
  private _pointerActive;
29
29
  private _elementToAttachTo;
30
30
  private _engine;
31
+ private _usingSafari;
31
32
  private _keyboardDownEvent;
32
33
  private _keyboardUpEvent;
33
34
  private _keyboardBlurEvent;
@@ -10,6 +10,7 @@ var WebDeviceInputSystem = /** @class */ (function () {
10
10
  this._inputs = [];
11
11
  this._keyboardActive = false;
12
12
  this._pointerActive = false;
13
+ this._usingSafari = Tools.IsSafari();
13
14
  this._keyboardDownEvent = function (evt) { };
14
15
  this._keyboardUpEvent = function (evt) { };
15
16
  this._keyboardBlurEvent = function (evt) { };
@@ -283,44 +284,36 @@ var WebDeviceInputSystem = /** @class */ (function () {
283
284
  // The browser might use a move event in case
284
285
  // of simultaneous mouse buttons click for instance. So
285
286
  // in this case we stil need to propagate it.
286
- var fireFakeMove = true;
287
287
  if (previousHorizontal !== evt.clientX) {
288
288
  deviceEvent.inputIndex = PointerInput.Horizontal;
289
289
  deviceEvent.previousState = previousHorizontal;
290
290
  deviceEvent.currentState = pointer[PointerInput.Horizontal];
291
291
  _this.onInputChangedObservable.notifyObservers(deviceEvent);
292
- fireFakeMove = false;
293
292
  }
294
293
  if (previousVertical !== evt.clientY) {
295
294
  deviceEvent.inputIndex = PointerInput.Vertical;
296
295
  deviceEvent.previousState = previousVertical;
297
296
  deviceEvent.currentState = pointer[PointerInput.Vertical];
298
297
  _this.onInputChangedObservable.notifyObservers(deviceEvent);
299
- fireFakeMove = false;
300
298
  }
301
299
  if (pointer[PointerInput.DeltaHorizontal] !== 0) {
302
300
  deviceEvent.inputIndex = PointerInput.DeltaHorizontal;
303
301
  deviceEvent.previousState = previousDeltaHorizontal;
304
302
  deviceEvent.currentState = pointer[PointerInput.DeltaHorizontal];
305
303
  _this.onInputChangedObservable.notifyObservers(deviceEvent);
306
- fireFakeMove = false;
307
304
  }
308
305
  if (pointer[PointerInput.DeltaVertical] !== 0) {
309
306
  deviceEvent.inputIndex = PointerInput.DeltaVertical;
310
307
  deviceEvent.previousState = previousDeltaVertical;
311
308
  deviceEvent.currentState = pointer[PointerInput.DeltaVertical];
312
309
  _this.onInputChangedObservable.notifyObservers(deviceEvent);
313
- fireFakeMove = false;
314
310
  }
315
311
  // Lets Propagate the event for move with same position.
316
- if (fireFakeMove && evt.button !== -1) {
317
- deviceEvent.inputIndex = PointerInput.FakeMove;
318
- deviceEvent.previousState = 0;
319
- deviceEvent.currentState = 0;
320
- // The pointer buttons in PointerInput are in the same order as they are used for the MouseEvent button property, just offset by 2.
321
- // eg. PointerInput.LeftClick = 2 vs MouseEvent.button = Left Click = 0
322
- // Because of this, we need to offset our indices by two when storing in our inputs array.
312
+ if (!_this._usingSafari && evt.button !== -1) {
313
+ deviceEvent.inputIndex = evt.button + 2;
314
+ deviceEvent.previousState = pointer[evt.button + 2];
323
315
  pointer[evt.button + 2] = (pointer[evt.button + 2] ? 0 : 1); // Reverse state of button if evt.button has value
316
+ deviceEvent.currentState = pointer[evt.button + 2];
324
317
  _this.onInputChangedObservable.notifyObservers(deviceEvent);
325
318
  }
326
319
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webDeviceInputSystem.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Implementations/webDeviceInputSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../../Engines/engine\";\r\nimport { IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Observable, Observer } from \"../../Misc/observable\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceEventFactory } from \"../Helpers/eventFactory\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceEvent, IDeviceInputSystem } from \"../Interfaces/inputInterfaces\";\r\n\r\n/** @hidden */\r\nexport class WebDeviceInputSystem implements IDeviceInputSystem {\r\n /**\r\n * Observable for devices being connected\r\n */\r\n public readonly onDeviceConnectedObservable: Observable<{ deviceType: DeviceType; deviceSlot: number; }>;\r\n /**\r\n * Observable for devices being disconnected\r\n */\r\n public readonly onDeviceDisconnectedObservable: Observable<{ deviceType: DeviceType; deviceSlot: number; }>;\r\n /**\r\n * Observable for changes to device input\r\n */\r\n public readonly onInputChangedObservable: Observable<IDeviceEvent>;\r\n\r\n // Private Members\r\n private _inputs: Array<{ [deviceSlot: number]: Array<number> }> = [];\r\n private _gamepads: Array<DeviceType>;\r\n private _keyboardActive: boolean = false;\r\n private _pointerActive: boolean = false;\r\n private _elementToAttachTo: HTMLElement;\r\n private _engine: Engine;\r\n\r\n private _keyboardDownEvent = (evt: any) => { };\r\n private _keyboardUpEvent = (evt: any) => { };\r\n private _keyboardBlurEvent = (evt: any) => { };\r\n\r\n private _pointerMoveEvent = (evt: any) => { };\r\n private _pointerDownEvent = (evt: any) => { };\r\n private _pointerUpEvent = (evt: any) => { };\r\n private _pointerWheelEvent = (evt: any) => { };\r\n private _pointerBlurEvent = (evt: any) => { };\r\n private _wheelEventName: string;\r\n\r\n private _mouseId = -1;\r\n private _isUsingFirefox = navigator.userAgent.indexOf(\"Firefox\") !== -1;\r\n\r\n // Array to store active Pointer ID values; prevents issues with negative pointerIds\r\n private _activeTouchIds: Array<number> = [];\r\n private _rollingTouchId: number = 0; // Rolling ID number to assign; emulates Chrome assignment\r\n\r\n private _pointerInputClearObserver: Nullable<Observer<Engine>> = null;\r\n\r\n private _gamepadConnectedEvent = (evt: any) => { };\r\n private _gamepadDisconnectedEvent = (evt: any) => { };\r\n\r\n /** Max number of keycodes */\r\n public static MAX_KEYCODES: number = 255;\r\n /** Max number of pointer inputs */\r\n public static MAX_POINTER_INPUTS: number = Object.keys(PointerInput).length / 2;\r\n\r\n private _eventPrefix: string;\r\n\r\n constructor(engine: Engine) {\r\n this._eventPrefix = Tools.GetPointerPrefix(engine);\r\n this._engine = engine;\r\n\r\n this.onDeviceConnectedObservable = new Observable((observer) => {\r\n // Iterate through each active device and rerun new callback\r\n for (let deviceType = 0; deviceType < this._inputs.length; deviceType++) {\r\n const inputs = this._inputs[deviceType];\r\n if (inputs) {\r\n for (const deviceSlotKey in inputs) {\r\n const deviceSlot = +deviceSlotKey;\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n this.onDeviceConnectedObservable.notifyObserver(observer, { deviceType, deviceSlot });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.onDeviceDisconnectedObservable = new Observable();\r\n this.onInputChangedObservable = new Observable();\r\n\r\n this.configureEvents();\r\n }\r\n\r\n /**\r\n * Configures events to work with an engine's active element\r\n */\r\n public configureEvents() {\r\n const inputElement = this._engine.getInputElement();\r\n if (inputElement && this._elementToAttachTo !== inputElement) {\r\n // If the engine's input element has changed, unregister events from previous element\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n }\r\n\r\n this._elementToAttachTo = inputElement;\r\n // Set tab index for the inputElement to the engine's canvasTabIndex, if and only if the element's tab index is -1\r\n this._elementToAttachTo.tabIndex = (this._elementToAttachTo.tabIndex !== -1) ? this._elementToAttachTo.tabIndex : this._engine.canvasTabIndex;\r\n this._handleKeyActions();\r\n this._handlePointerActions();\r\n this._handleGamepadActions();\r\n\r\n // Check for devices that are already connected but aren't registered. Currently, only checks for gamepads and mouse\r\n this._checkForConnectedDevices();\r\n }\r\n }\r\n\r\n // Public functions\r\n /**\r\n * Checks for current device input value, given an id and input index. Throws exception if requested device not initialized.\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @returns Current value of input\r\n */\r\n public pollInput(deviceType: DeviceType, deviceSlot: number, inputIndex: number): number {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (!device) {\r\n throw `Unable to find device ${DeviceType[deviceType]}`;\r\n }\r\n\r\n if (deviceType >= DeviceType.Xbox && deviceType <= DeviceType.Switch && navigator.getGamepads) {\r\n this._updateDevice(deviceType, deviceSlot, inputIndex);\r\n }\r\n\r\n const currentValue = device[inputIndex];\r\n if (currentValue === undefined) {\r\n throw `Unable to find input ${inputIndex} for device ${DeviceType[deviceType]} in slot ${deviceSlot}`;\r\n }\r\n\r\n return currentValue;\r\n }\r\n\r\n /**\r\n * Check for a specific device in the DeviceInputSystem\r\n * @param deviceType Type of device to check for\r\n * @returns bool with status of device's existence\r\n */\r\n public isDeviceAvailable(deviceType: DeviceType) {\r\n return (this._inputs[deviceType] !== undefined);\r\n }\r\n\r\n /**\r\n * Dispose of all the eventlisteners\r\n */\r\n public dispose(): void {\r\n // Observables\r\n this.onDeviceConnectedObservable.clear();\r\n this.onDeviceDisconnectedObservable.clear();\r\n this.onInputChangedObservable.clear();\r\n\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n\r\n // Gamepad Events\r\n window.removeEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.removeEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n }\r\n\r\n /**\r\n * Checks for existing connections to devices and register them, if necessary\r\n * Currently handles gamepads and mouse\r\n */\r\n private _checkForConnectedDevices() {\r\n if (navigator.getGamepads) {\r\n const gamepads = navigator.getGamepads();\r\n\r\n for (const gamepad of gamepads) {\r\n if (gamepad) {\r\n this._addGamePad(gamepad);\r\n }\r\n }\r\n }\r\n\r\n // If the device in use has mouse capabilities, pre-register mouse\r\n if (matchMedia('(pointer:fine)').matches) {\r\n // This will provide a dummy value for the cursor position and is expected to be overriden when the first mouse event happens.\r\n // There isn't any good way to get the current position outside of a pointer event so that's why this was done.\r\n this._addPointerDevice(DeviceType.Mouse, 0, 0, 0);\r\n }\r\n }\r\n\r\n // Private functions\r\n /**\r\n * Add a gamepad to the DeviceInputSystem\r\n * @param gamepad A single DOM Gamepad object\r\n */\r\n private _addGamePad(gamepad: any) {\r\n const deviceType = this._getGamepadDeviceType(gamepad.id);\r\n const deviceSlot = gamepad.index;\r\n\r\n this._registerDevice(deviceType, deviceSlot, gamepad.buttons.length + gamepad.axes.length);\r\n this._gamepads = this._gamepads || new Array<DeviceType>(gamepad.index + 1);\r\n this._gamepads[deviceSlot] = deviceType;\r\n }\r\n\r\n /**\r\n * Add pointer device to DeviceInputSystem\r\n * @param deviceType Type of Pointer to add\r\n * @param deviceSlot Pointer ID (0 for mouse, pointerId for Touch)\r\n * @param currentX Current X at point of adding\r\n * @param currentY Current Y at point of adding\r\n */\r\n private _addPointerDevice(deviceType: DeviceType, deviceSlot: number, currentX: number, currentY: number) {\r\n this._pointerActive = true;\r\n this._registerDevice(deviceType, deviceSlot, WebDeviceInputSystem.MAX_POINTER_INPUTS);\r\n const pointer = this._inputs[deviceType][deviceSlot]; /* initialize our pointer position immediately after registration */\r\n pointer[0] = currentX;\r\n pointer[1] = currentY;\r\n }\r\n\r\n /**\r\n * Add device and inputs to device array\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param numberOfInputs Number of input entries to create for given device\r\n */\r\n private _registerDevice(deviceType: DeviceType, deviceSlot: number, numberOfInputs: number) {\r\n if (deviceSlot === undefined) {\r\n throw `Unable to register device ${DeviceType[deviceType]} to undefined slot.`;\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n const device = new Array<number>(numberOfInputs);\r\n\r\n for (let i = 0; i < numberOfInputs; i++) {\r\n device[i] = 0; /* set device input as unpressed */\r\n }\r\n\r\n this._inputs[deviceType][deviceSlot] = device;\r\n this.onDeviceConnectedObservable.notifyObservers({ deviceType, deviceSlot });\r\n }\r\n }\r\n\r\n /**\r\n * Given a specific device name, remove that device from the device map\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n */\r\n private _unregisterDevice(deviceType: DeviceType, deviceSlot: number) {\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n delete this._inputs[deviceType][deviceSlot];\r\n this.onDeviceDisconnectedObservable.notifyObservers({ deviceType, deviceSlot });\r\n }\r\n }\r\n\r\n /**\r\n * Handle all actions that come from keyboard interaction\r\n */\r\n private _handleKeyActions() {\r\n this._keyboardDownEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, WebDeviceInputSystem.MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 0;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardUpEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, WebDeviceInputSystem.MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 1;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardBlurEvent = ((evt) => {\r\n if (this._keyboardActive) {\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n\r\n for (let i = 0; i < kbKey.length; i++) {\r\n if (kbKey[i] !== 0) {\r\n kbKey[i] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Keyboard, 0, i, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i;\r\n deviceEvent.currentState = 0;\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.addEventListener(\"keyup\", this._keyboardUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._keyboardBlurEvent);\r\n }\r\n\r\n /**\r\n * Handle all actions that come from pointer interaction\r\n */\r\n private _handlePointerActions() {\r\n this._pointerMoveEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousDeltaHorizontal = pointer[PointerInput.DeltaHorizontal];\r\n const previousDeltaVertical = pointer[PointerInput.DeltaVertical];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[PointerInput.DeltaHorizontal] = evt.movementX;\r\n pointer[PointerInput.DeltaVertical] = evt.movementY;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n // The browser might use a move event in case\r\n // of simultaneous mouse buttons click for instance. So\r\n // in this case we stil need to propagate it.\r\n let fireFakeMove = true;\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n fireFakeMove = false;\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n fireFakeMove = false;\r\n }\r\n if (pointer[PointerInput.DeltaHorizontal] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaHorizontal;\r\n deviceEvent.previousState = previousDeltaHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaHorizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n fireFakeMove = false;\r\n }\r\n if (pointer[PointerInput.DeltaVertical] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaVertical;\r\n deviceEvent.previousState = previousDeltaVertical;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaVertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n fireFakeMove = false;\r\n }\r\n // Lets Propagate the event for move with same position.\r\n if (fireFakeMove && evt.button !== -1) {\r\n deviceEvent.inputIndex = PointerInput.FakeMove;\r\n deviceEvent.previousState = 0;\r\n deviceEvent.currentState = 0;\r\n // The pointer buttons in PointerInput are in the same order as they are used for the MouseEvent button property, just offset by 2.\r\n // eg. PointerInput.LeftClick = 2 vs MouseEvent.button = Left Click = 0\r\n // Because of this, we need to offset our indices by two when storing in our inputs array.\r\n pointer[evt.button + 2] = (pointer[evt.button + 2] ? 0 : 1); // Reverse state of button if evt.button has value\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._pointerDownEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n let deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : evt.pointerId;\r\n\r\n if (deviceType === DeviceType.Touch) {\r\n deviceSlot = this._rollingTouchId++;\r\n this._activeTouchIds[deviceSlot] = evt.pointerId;\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n if (deviceType === DeviceType.Mouse) { // Mouse; Among supported browsers, value is either 1 or 0 for mouse\r\n if (this._mouseId === -1) {\r\n if (evt.pointerId === undefined) { // If there is no pointerId (eg. manually dispatched MouseEvent)\r\n this._mouseId = this._isUsingFirefox ? 0 : 1;\r\n }\r\n else {\r\n this._mouseId = evt.pointerId;\r\n }\r\n }\r\n\r\n if (!document.pointerLockElement) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(this._mouseId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n else { // Touch; Since touches are dynamically assigned, only set capture if we have an id\r\n if (evt.pointerId && !document.pointerLockElement) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(evt.pointerId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._pointerUpEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n const pointer = this._inputs[deviceType]?.[deviceSlot];\r\n if (pointer && pointer[evt.button + 2] !== 0) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n\r\n if (deviceType === DeviceType.Mouse && this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n else if (evt.pointerId && this._elementToAttachTo.hasPointerCapture(evt.pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(evt.pointerId);\r\n }\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n\r\n // We don't want to unregister the mouse because we may miss input data when a mouse is moving after a click\r\n if (deviceType !== DeviceType.Mouse) {\r\n let idToRemove = this._activeTouchIds.indexOf(evt.pointerId);\r\n delete this._activeTouchIds[idToRemove];\r\n this._unregisterDevice(deviceType, deviceSlot);\r\n }\r\n }\r\n });\r\n\r\n // Set Wheel Event Name, code originally from scene.inputManager\r\n this._wheelEventName = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\r\n (<any>document).onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\r\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\r\n\r\n // Code originally in scene.inputManager.ts\r\n // Chrome reports warning in console if wheel listener doesn't set an explicit passive option.\r\n // IE11 only supports captureEvent:boolean, not options:object, and it defaults to false.\r\n // Feature detection technique copied from: https://github.com/github/eventlistener-polyfill (MIT license)\r\n let passiveSupported = false;\r\n const noop = function () { };\r\n\r\n try {\r\n const options: object = {\r\n passive: {\r\n get: function () {\r\n passiveSupported = true;\r\n }\r\n }\r\n };\r\n\r\n this._elementToAttachTo.addEventListener(\"test\", noop, options);\r\n this._elementToAttachTo.removeEventListener(\"test\", noop, options);\r\n }\r\n catch (e) {\r\n /* */\r\n }\r\n\r\n this._pointerBlurEvent = ((evt) => {\r\n // Handle mouse buttons\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n\r\n if (this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n\r\n for (let i = 0; i <= PointerInput.BrowserForward; i++) {\r\n if (pointer[i + 2] === 1) {\r\n pointer[i + 2] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Mouse, 0, i + 2, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Mouse;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i + 2;\r\n deviceEvent.currentState = pointer[i + 2];\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n }\r\n\r\n // Handle Active Touches\r\n if (this.isDeviceAvailable(DeviceType.Touch)) {\r\n const pointer = this._inputs[DeviceType.Touch];\r\n\r\n // Get list of active touch ids and clear each one in the inputs array\r\n for (const deviceSlotKey in Object.keys(this._activeTouchIds)) {\r\n const deviceSlot = +deviceSlotKey;\r\n const pointerId = this._activeTouchIds[deviceSlot];\r\n\r\n if (this._elementToAttachTo.hasPointerCapture(pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(pointerId);\r\n }\r\n\r\n if (pointer[deviceSlot]?.[PointerInput.LeftClick] === 1) {\r\n pointer[deviceSlot][PointerInput.LeftClick] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Touch, pointerId, PointerInput.LeftClick, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Mouse;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n deviceEvent.inputIndex = PointerInput.LeftClick;\r\n deviceEvent.currentState = pointer[deviceSlot][PointerInput.LeftClick];\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n\r\n this._unregisterDevice(DeviceType.Touch, deviceSlot);\r\n }\r\n }\r\n // Clear all active touches\r\n while (this._activeTouchIds.pop() !== undefined) { }\r\n }\r\n });\r\n\r\n this._pointerWheelEvent = ((evt) => {\r\n const deviceType = DeviceType.Mouse;\r\n const deviceSlot = 0;\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = [];\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._pointerActive = true;\r\n this._registerDevice(deviceType, deviceSlot, WebDeviceInputSystem.MAX_POINTER_INPUTS);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n let previousWheelScrollX = pointer[PointerInput.MouseWheelX];\r\n let previousWheelScrollY = pointer[PointerInput.MouseWheelY];\r\n let previousWheelScrollZ = pointer[PointerInput.MouseWheelZ];\r\n\r\n pointer[PointerInput.MouseWheelX] = evt.deltaX || 0;\r\n pointer[PointerInput.MouseWheelY] = evt.deltaY || evt.wheelDelta || 0;\r\n pointer[PointerInput.MouseWheelZ] = evt.deltaZ || 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (pointer[PointerInput.MouseWheelX] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelX;\r\n deviceEvent.previousState = previousWheelScrollX;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelX];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelY] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelY;\r\n deviceEvent.previousState = previousWheelScrollY;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelY];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelZ] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelZ;\r\n deviceEvent.previousState = previousWheelScrollZ;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelZ];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._pointerBlurEvent);\r\n this._elementToAttachTo.addEventListener(this._wheelEventName, this._pointerWheelEvent, passiveSupported ? { passive: false } : false);\r\n\r\n // Since there's no up or down event for mouse wheel or delta x/y, clear mouse values at end of frame\r\n this._pointerInputClearObserver = this._engine.onEndFrameObservable.add(() => {\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n pointer[PointerInput.MouseWheelX] = 0;\r\n pointer[PointerInput.MouseWheelY] = 0;\r\n pointer[PointerInput.MouseWheelZ] = 0;\r\n pointer[PointerInput.DeltaHorizontal] = 0;\r\n pointer[PointerInput.DeltaVertical] = 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle all actions that come from gamepad interaction\r\n */\r\n private _handleGamepadActions() {\r\n this._gamepadConnectedEvent = ((evt: any) => {\r\n this._addGamePad(evt.gamepad);\r\n });\r\n\r\n this._gamepadDisconnectedEvent = ((evt: any) => {\r\n if (this._gamepads) {\r\n const deviceType = this._getGamepadDeviceType(evt.gamepad.id);\r\n const deviceSlot = evt.gamepad.index;\r\n\r\n this._unregisterDevice(deviceType, deviceSlot);\r\n delete this._gamepads[deviceSlot];\r\n }\r\n });\r\n\r\n window.addEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.addEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n\r\n /**\r\n * Update all non-event based devices with each frame\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n */\r\n private _updateDevice(deviceType: DeviceType, deviceSlot: number, inputIndex: number) {\r\n // Gamepads\r\n const gp = navigator.getGamepads()[deviceSlot];\r\n\r\n if (gp && deviceType === this._gamepads[deviceSlot]) {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (inputIndex >= gp.buttons.length) {\r\n device[inputIndex] = gp.axes[inputIndex - gp.buttons.length].valueOf();\r\n }\r\n else {\r\n device[inputIndex] = gp.buttons[inputIndex].value;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets DeviceType from the device name\r\n * @param deviceName Name of Device from DeviceInputSystem\r\n * @returns DeviceType enum value\r\n */\r\n private _getGamepadDeviceType(deviceName: string): DeviceType {\r\n if (deviceName.indexOf(\"054c\") !== -1 && deviceName.indexOf(\"0ce6\") === -1) { // DualShock 4 Gamepad\r\n return DeviceType.DualShock;\r\n }\r\n else if (deviceName.indexOf(\"Xbox One\") !== -1 || deviceName.search(\"Xbox 360\") !== -1 || deviceName.search(\"xinput\") !== -1) { // Xbox Gamepad\r\n return DeviceType.Xbox;\r\n }\r\n else if (deviceName.indexOf(\"057e\") !== -1) { // Switch Gamepad\r\n return DeviceType.Switch;\r\n }\r\n\r\n return DeviceType.Generic;\r\n }\r\n\r\n /**\r\n * Get DeviceType from a given pointer/mouse/touch event.\r\n * @param evt PointerEvent to evaluate\r\n * @returns DeviceType interpreted from event\r\n */\r\n private _getPointerType(evt: any): DeviceType {\r\n let deviceType = DeviceType.Mouse;\r\n\r\n if (evt.pointerType === \"touch\" || evt.pointerType === \"pen\" || evt.touches) {\r\n deviceType = DeviceType.Touch;\r\n }\r\n\r\n return deviceType;\r\n }\r\n\r\n /**\r\n * Remove events from active input element\r\n */\r\n private _removeEvents() {\r\n // Blur Events\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._keyboardBlurEvent);\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._pointerBlurEvent);\r\n\r\n // Keyboard Events\r\n if (this._keyboardActive) {\r\n this._elementToAttachTo.removeEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.removeEventListener(\"keyup\", this._keyboardUpEvent);\r\n }\r\n\r\n // Pointer Events\r\n if (this._pointerActive) {\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.removeEventListener(this._wheelEventName, this._pointerWheelEvent);\r\n\r\n if (this._pointerInputClearObserver) {\r\n this._engine.onEndFrameObservable.remove(this._pointerInputClearObserver);\r\n }\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"webDeviceInputSystem.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/Implementations/webDeviceInputSystem.ts"],"names":[],"mappings":"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","sourcesContent":["import { Engine } from \"../../Engines/engine\";\r\nimport { IEvent } from \"../../Events/deviceInputEvents\";\r\nimport { Observable, Observer } from \"../../Misc/observable\";\r\nimport { Tools } from \"../../Misc/tools\";\r\nimport { Nullable } from \"../../types\";\r\nimport { DeviceEventFactory } from \"../Helpers/eventFactory\";\r\nimport { DeviceType, PointerInput } from \"../InputDevices/deviceEnums\";\r\nimport { IDeviceEvent, IDeviceInputSystem } from \"../Interfaces/inputInterfaces\";\r\n\r\n/** @hidden */\r\nexport class WebDeviceInputSystem implements IDeviceInputSystem {\r\n /**\r\n * Observable for devices being connected\r\n */\r\n public readonly onDeviceConnectedObservable: Observable<{ deviceType: DeviceType; deviceSlot: number; }>;\r\n /**\r\n * Observable for devices being disconnected\r\n */\r\n public readonly onDeviceDisconnectedObservable: Observable<{ deviceType: DeviceType; deviceSlot: number; }>;\r\n /**\r\n * Observable for changes to device input\r\n */\r\n public readonly onInputChangedObservable: Observable<IDeviceEvent>;\r\n\r\n // Private Members\r\n private _inputs: Array<{ [deviceSlot: number]: Array<number> }> = [];\r\n private _gamepads: Array<DeviceType>;\r\n private _keyboardActive: boolean = false;\r\n private _pointerActive: boolean = false;\r\n private _elementToAttachTo: HTMLElement;\r\n private _engine: Engine;\r\n private _usingSafari: boolean = Tools.IsSafari();\r\n\r\n private _keyboardDownEvent = (evt: any) => { };\r\n private _keyboardUpEvent = (evt: any) => { };\r\n private _keyboardBlurEvent = (evt: any) => { };\r\n\r\n private _pointerMoveEvent = (evt: any) => { };\r\n private _pointerDownEvent = (evt: any) => { };\r\n private _pointerUpEvent = (evt: any) => { };\r\n private _pointerWheelEvent = (evt: any) => { };\r\n private _pointerBlurEvent = (evt: any) => { };\r\n private _wheelEventName: string;\r\n\r\n private _mouseId = -1;\r\n private _isUsingFirefox = navigator.userAgent.indexOf(\"Firefox\") !== -1;\r\n\r\n // Array to store active Pointer ID values; prevents issues with negative pointerIds\r\n private _activeTouchIds: Array<number> = [];\r\n private _rollingTouchId: number = 0; // Rolling ID number to assign; emulates Chrome assignment\r\n\r\n private _pointerInputClearObserver: Nullable<Observer<Engine>> = null;\r\n\r\n private _gamepadConnectedEvent = (evt: any) => { };\r\n private _gamepadDisconnectedEvent = (evt: any) => { };\r\n\r\n /** Max number of keycodes */\r\n public static MAX_KEYCODES: number = 255;\r\n /** Max number of pointer inputs */\r\n public static MAX_POINTER_INPUTS: number = Object.keys(PointerInput).length / 2;\r\n\r\n private _eventPrefix: string;\r\n\r\n constructor(engine: Engine) {\r\n this._eventPrefix = Tools.GetPointerPrefix(engine);\r\n this._engine = engine;\r\n\r\n this.onDeviceConnectedObservable = new Observable((observer) => {\r\n // Iterate through each active device and rerun new callback\r\n for (let deviceType = 0; deviceType < this._inputs.length; deviceType++) {\r\n const inputs = this._inputs[deviceType];\r\n if (inputs) {\r\n for (const deviceSlotKey in inputs) {\r\n const deviceSlot = +deviceSlotKey;\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n this.onDeviceConnectedObservable.notifyObserver(observer, { deviceType, deviceSlot });\r\n }\r\n }\r\n }\r\n }\r\n });\r\n\r\n this.onDeviceDisconnectedObservable = new Observable();\r\n this.onInputChangedObservable = new Observable();\r\n\r\n this.configureEvents();\r\n }\r\n\r\n /**\r\n * Configures events to work with an engine's active element\r\n */\r\n public configureEvents() {\r\n const inputElement = this._engine.getInputElement();\r\n if (inputElement && this._elementToAttachTo !== inputElement) {\r\n // If the engine's input element has changed, unregister events from previous element\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n }\r\n\r\n this._elementToAttachTo = inputElement;\r\n // Set tab index for the inputElement to the engine's canvasTabIndex, if and only if the element's tab index is -1\r\n this._elementToAttachTo.tabIndex = (this._elementToAttachTo.tabIndex !== -1) ? this._elementToAttachTo.tabIndex : this._engine.canvasTabIndex;\r\n this._handleKeyActions();\r\n this._handlePointerActions();\r\n this._handleGamepadActions();\r\n\r\n // Check for devices that are already connected but aren't registered. Currently, only checks for gamepads and mouse\r\n this._checkForConnectedDevices();\r\n }\r\n }\r\n\r\n // Public functions\r\n /**\r\n * Checks for current device input value, given an id and input index. Throws exception if requested device not initialized.\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n * @returns Current value of input\r\n */\r\n public pollInput(deviceType: DeviceType, deviceSlot: number, inputIndex: number): number {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (!device) {\r\n throw `Unable to find device ${DeviceType[deviceType]}`;\r\n }\r\n\r\n if (deviceType >= DeviceType.Xbox && deviceType <= DeviceType.Switch && navigator.getGamepads) {\r\n this._updateDevice(deviceType, deviceSlot, inputIndex);\r\n }\r\n\r\n const currentValue = device[inputIndex];\r\n if (currentValue === undefined) {\r\n throw `Unable to find input ${inputIndex} for device ${DeviceType[deviceType]} in slot ${deviceSlot}`;\r\n }\r\n\r\n return currentValue;\r\n }\r\n\r\n /**\r\n * Check for a specific device in the DeviceInputSystem\r\n * @param deviceType Type of device to check for\r\n * @returns bool with status of device's existence\r\n */\r\n public isDeviceAvailable(deviceType: DeviceType) {\r\n return (this._inputs[deviceType] !== undefined);\r\n }\r\n\r\n /**\r\n * Dispose of all the eventlisteners\r\n */\r\n public dispose(): void {\r\n // Observables\r\n this.onDeviceConnectedObservable.clear();\r\n this.onDeviceDisconnectedObservable.clear();\r\n this.onInputChangedObservable.clear();\r\n\r\n if (this._elementToAttachTo) {\r\n this._removeEvents();\r\n\r\n // Gamepad Events\r\n window.removeEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.removeEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n }\r\n\r\n /**\r\n * Checks for existing connections to devices and register them, if necessary\r\n * Currently handles gamepads and mouse\r\n */\r\n private _checkForConnectedDevices() {\r\n if (navigator.getGamepads) {\r\n const gamepads = navigator.getGamepads();\r\n\r\n for (const gamepad of gamepads) {\r\n if (gamepad) {\r\n this._addGamePad(gamepad);\r\n }\r\n }\r\n }\r\n\r\n // If the device in use has mouse capabilities, pre-register mouse\r\n if (matchMedia('(pointer:fine)').matches) {\r\n // This will provide a dummy value for the cursor position and is expected to be overriden when the first mouse event happens.\r\n // There isn't any good way to get the current position outside of a pointer event so that's why this was done.\r\n this._addPointerDevice(DeviceType.Mouse, 0, 0, 0);\r\n }\r\n }\r\n\r\n // Private functions\r\n /**\r\n * Add a gamepad to the DeviceInputSystem\r\n * @param gamepad A single DOM Gamepad object\r\n */\r\n private _addGamePad(gamepad: any) {\r\n const deviceType = this._getGamepadDeviceType(gamepad.id);\r\n const deviceSlot = gamepad.index;\r\n\r\n this._registerDevice(deviceType, deviceSlot, gamepad.buttons.length + gamepad.axes.length);\r\n this._gamepads = this._gamepads || new Array<DeviceType>(gamepad.index + 1);\r\n this._gamepads[deviceSlot] = deviceType;\r\n }\r\n\r\n /**\r\n * Add pointer device to DeviceInputSystem\r\n * @param deviceType Type of Pointer to add\r\n * @param deviceSlot Pointer ID (0 for mouse, pointerId for Touch)\r\n * @param currentX Current X at point of adding\r\n * @param currentY Current Y at point of adding\r\n */\r\n private _addPointerDevice(deviceType: DeviceType, deviceSlot: number, currentX: number, currentY: number) {\r\n this._pointerActive = true;\r\n this._registerDevice(deviceType, deviceSlot, WebDeviceInputSystem.MAX_POINTER_INPUTS);\r\n const pointer = this._inputs[deviceType][deviceSlot]; /* initialize our pointer position immediately after registration */\r\n pointer[0] = currentX;\r\n pointer[1] = currentY;\r\n }\r\n\r\n /**\r\n * Add device and inputs to device array\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param numberOfInputs Number of input entries to create for given device\r\n */\r\n private _registerDevice(deviceType: DeviceType, deviceSlot: number, numberOfInputs: number) {\r\n if (deviceSlot === undefined) {\r\n throw `Unable to register device ${DeviceType[deviceType]} to undefined slot.`;\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n const device = new Array<number>(numberOfInputs);\r\n\r\n for (let i = 0; i < numberOfInputs; i++) {\r\n device[i] = 0; /* set device input as unpressed */\r\n }\r\n\r\n this._inputs[deviceType][deviceSlot] = device;\r\n this.onDeviceConnectedObservable.notifyObservers({ deviceType, deviceSlot });\r\n }\r\n }\r\n\r\n /**\r\n * Given a specific device name, remove that device from the device map\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n */\r\n private _unregisterDevice(deviceType: DeviceType, deviceSlot: number) {\r\n if (this._inputs[deviceType][deviceSlot]) {\r\n delete this._inputs[deviceType][deviceSlot];\r\n this.onDeviceDisconnectedObservable.notifyObservers({ deviceType, deviceSlot });\r\n }\r\n }\r\n\r\n /**\r\n * Handle all actions that come from keyboard interaction\r\n */\r\n private _handleKeyActions() {\r\n this._keyboardDownEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, WebDeviceInputSystem.MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 0;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardUpEvent = ((evt) => {\r\n if (!this._keyboardActive) {\r\n this._keyboardActive = true;\r\n this._registerDevice(DeviceType.Keyboard, 0, WebDeviceInputSystem.MAX_KEYCODES);\r\n }\r\n\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n if (kbKey) {\r\n kbKey[evt.keyCode] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = evt.keyCode;\r\n deviceEvent.previousState = 1;\r\n deviceEvent.currentState = kbKey[evt.keyCode];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._keyboardBlurEvent = ((evt) => {\r\n if (this._keyboardActive) {\r\n const kbKey = this._inputs[DeviceType.Keyboard][0];\r\n\r\n for (let i = 0; i < kbKey.length; i++) {\r\n if (kbKey[i] !== 0) {\r\n kbKey[i] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Keyboard, 0, i, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Keyboard;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i;\r\n deviceEvent.currentState = 0;\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.addEventListener(\"keyup\", this._keyboardUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._keyboardBlurEvent);\r\n }\r\n\r\n /**\r\n * Handle all actions that come from pointer interaction\r\n */\r\n private _handlePointerActions() {\r\n this._pointerMoveEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousDeltaHorizontal = pointer[PointerInput.DeltaHorizontal];\r\n const previousDeltaVertical = pointer[PointerInput.DeltaVertical];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[PointerInput.DeltaHorizontal] = evt.movementX;\r\n pointer[PointerInput.DeltaVertical] = evt.movementY;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n // The browser might use a move event in case\r\n // of simultaneous mouse buttons click for instance. So\r\n // in this case we stil need to propagate it.\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.DeltaHorizontal] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaHorizontal;\r\n deviceEvent.previousState = previousDeltaHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaHorizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.DeltaVertical] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.DeltaVertical;\r\n deviceEvent.previousState = previousDeltaVertical;\r\n deviceEvent.currentState = pointer[PointerInput.DeltaVertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n // Lets Propagate the event for move with same position.\r\n if (!this._usingSafari && evt.button !== -1) {\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = pointer[evt.button + 2];\r\n pointer[evt.button + 2] = (pointer[evt.button + 2] ? 0 : 1); // Reverse state of button if evt.button has value\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._pointerDownEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n let deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : evt.pointerId;\r\n\r\n if (deviceType === DeviceType.Touch) {\r\n deviceSlot = this._rollingTouchId++;\r\n this._activeTouchIds[deviceSlot] = evt.pointerId;\r\n }\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = {};\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._addPointerDevice(deviceType, deviceSlot, evt.clientX, evt.clientY);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n if (deviceType === DeviceType.Mouse) { // Mouse; Among supported browsers, value is either 1 or 0 for mouse\r\n if (this._mouseId === -1) {\r\n if (evt.pointerId === undefined) { // If there is no pointerId (eg. manually dispatched MouseEvent)\r\n this._mouseId = this._isUsingFirefox ? 0 : 1;\r\n }\r\n else {\r\n this._mouseId = evt.pointerId;\r\n }\r\n }\r\n\r\n if (!document.pointerLockElement) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(this._mouseId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n else { // Touch; Since touches are dynamically assigned, only set capture if we have an id\r\n if (evt.pointerId && !document.pointerLockElement) {\r\n try {\r\n this._elementToAttachTo.setPointerCapture(evt.pointerId);\r\n }\r\n catch (e) {\r\n // DO NOTHING\r\n }\r\n }\r\n }\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 1;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n });\r\n\r\n this._pointerUpEvent = ((evt) => {\r\n const deviceType = this._getPointerType(evt);\r\n const deviceSlot = (deviceType === DeviceType.Mouse) ? 0 : this._activeTouchIds.indexOf(evt.pointerId);\r\n\r\n const pointer = this._inputs[deviceType]?.[deviceSlot];\r\n if (pointer && pointer[evt.button + 2] !== 0) {\r\n const previousHorizontal = pointer[PointerInput.Horizontal];\r\n const previousVertical = pointer[PointerInput.Vertical];\r\n const previousButton = pointer[evt.button + 2];\r\n\r\n pointer[PointerInput.Horizontal] = evt.clientX;\r\n pointer[PointerInput.Vertical] = evt.clientY;\r\n pointer[evt.button + 2] = 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (previousHorizontal !== evt.clientX) {\r\n deviceEvent.inputIndex = PointerInput.Horizontal;\r\n deviceEvent.previousState = previousHorizontal;\r\n deviceEvent.currentState = pointer[PointerInput.Horizontal];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (previousVertical !== evt.clientY) {\r\n deviceEvent.inputIndex = PointerInput.Vertical;\r\n deviceEvent.previousState = previousVertical;\r\n deviceEvent.currentState = pointer[PointerInput.Vertical];\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n\r\n deviceEvent.inputIndex = evt.button + 2;\r\n deviceEvent.previousState = previousButton;\r\n deviceEvent.currentState = pointer[evt.button + 2];\r\n\r\n if (deviceType === DeviceType.Mouse && this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n else if (evt.pointerId && this._elementToAttachTo.hasPointerCapture(evt.pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(evt.pointerId);\r\n }\r\n\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n\r\n // We don't want to unregister the mouse because we may miss input data when a mouse is moving after a click\r\n if (deviceType !== DeviceType.Mouse) {\r\n let idToRemove = this._activeTouchIds.indexOf(evt.pointerId);\r\n delete this._activeTouchIds[idToRemove];\r\n this._unregisterDevice(deviceType, deviceSlot);\r\n }\r\n }\r\n });\r\n\r\n // Set Wheel Event Name, code originally from scene.inputManager\r\n this._wheelEventName = \"onwheel\" in document.createElement(\"div\") ? \"wheel\" : // Modern browsers support \"wheel\"\r\n (<any>document).onmousewheel !== undefined ? \"mousewheel\" : // Webkit and IE support at least \"mousewheel\"\r\n \"DOMMouseScroll\"; // let's assume that remaining browsers are older Firefox\r\n\r\n // Code originally in scene.inputManager.ts\r\n // Chrome reports warning in console if wheel listener doesn't set an explicit passive option.\r\n // IE11 only supports captureEvent:boolean, not options:object, and it defaults to false.\r\n // Feature detection technique copied from: https://github.com/github/eventlistener-polyfill (MIT license)\r\n let passiveSupported = false;\r\n const noop = function () { };\r\n\r\n try {\r\n const options: object = {\r\n passive: {\r\n get: function () {\r\n passiveSupported = true;\r\n }\r\n }\r\n };\r\n\r\n this._elementToAttachTo.addEventListener(\"test\", noop, options);\r\n this._elementToAttachTo.removeEventListener(\"test\", noop, options);\r\n }\r\n catch (e) {\r\n /* */\r\n }\r\n\r\n this._pointerBlurEvent = ((evt) => {\r\n // Handle mouse buttons\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n\r\n if (this._mouseId >= 0 && this._elementToAttachTo.hasPointerCapture(this._mouseId)) {\r\n this._elementToAttachTo.releasePointerCapture(this._mouseId);\r\n }\r\n\r\n for (let i = 0; i <= PointerInput.BrowserForward; i++) {\r\n if (pointer[i + 2] === 1) {\r\n pointer[i + 2] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Mouse, 0, i + 2, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Mouse;\r\n deviceEvent.deviceSlot = 0;\r\n deviceEvent.inputIndex = i + 2;\r\n deviceEvent.currentState = pointer[i + 2];\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n }\r\n\r\n // Handle Active Touches\r\n if (this.isDeviceAvailable(DeviceType.Touch)) {\r\n const pointer = this._inputs[DeviceType.Touch];\r\n\r\n // Get list of active touch ids and clear each one in the inputs array\r\n for (const deviceSlotKey in Object.keys(this._activeTouchIds)) {\r\n const deviceSlot = +deviceSlotKey;\r\n const pointerId = this._activeTouchIds[deviceSlot];\r\n\r\n if (this._elementToAttachTo.hasPointerCapture(pointerId)) {\r\n this._elementToAttachTo.releasePointerCapture(pointerId);\r\n }\r\n\r\n if (pointer[deviceSlot]?.[PointerInput.LeftClick] === 1) {\r\n pointer[deviceSlot][PointerInput.LeftClick] = 0;\r\n\r\n const evt: IEvent = DeviceEventFactory.CreateDeviceEvent(DeviceType.Touch, pointerId, PointerInput.LeftClick, 1, this, this._elementToAttachTo);\r\n const deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = DeviceType.Mouse;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n deviceEvent.inputIndex = PointerInput.LeftClick;\r\n deviceEvent.currentState = pointer[deviceSlot][PointerInput.LeftClick];\r\n deviceEvent.previousState = 1;\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n\r\n this._unregisterDevice(DeviceType.Touch, deviceSlot);\r\n }\r\n }\r\n // Clear all active touches\r\n while (this._activeTouchIds.pop() !== undefined) { }\r\n }\r\n });\r\n\r\n this._pointerWheelEvent = ((evt) => {\r\n const deviceType = DeviceType.Mouse;\r\n const deviceSlot = 0;\r\n\r\n if (!this._inputs[deviceType]) {\r\n this._inputs[deviceType] = [];\r\n }\r\n\r\n if (!this._inputs[deviceType][deviceSlot]) {\r\n this._pointerActive = true;\r\n this._registerDevice(deviceType, deviceSlot, WebDeviceInputSystem.MAX_POINTER_INPUTS);\r\n }\r\n\r\n const pointer = this._inputs[deviceType][deviceSlot];\r\n if (pointer) {\r\n // Store previous values for event\r\n let previousWheelScrollX = pointer[PointerInput.MouseWheelX];\r\n let previousWheelScrollY = pointer[PointerInput.MouseWheelY];\r\n let previousWheelScrollZ = pointer[PointerInput.MouseWheelZ];\r\n\r\n pointer[PointerInput.MouseWheelX] = evt.deltaX || 0;\r\n pointer[PointerInput.MouseWheelY] = evt.deltaY || evt.wheelDelta || 0;\r\n pointer[PointerInput.MouseWheelZ] = evt.deltaZ || 0;\r\n\r\n let deviceEvent = evt as IDeviceEvent;\r\n deviceEvent.deviceType = deviceType;\r\n deviceEvent.deviceSlot = deviceSlot;\r\n\r\n if (pointer[PointerInput.MouseWheelX] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelX;\r\n deviceEvent.previousState = previousWheelScrollX;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelX];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelY] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelY;\r\n deviceEvent.previousState = previousWheelScrollY;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelY];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n if (pointer[PointerInput.MouseWheelZ] !== 0) {\r\n deviceEvent.inputIndex = PointerInput.MouseWheelZ;\r\n deviceEvent.previousState = previousWheelScrollZ;\r\n deviceEvent.currentState = pointer[PointerInput.MouseWheelZ];\r\n this.onInputChangedObservable.notifyObservers(deviceEvent);\r\n }\r\n }\r\n });\r\n\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.addEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.addEventListener(\"blur\", this._pointerBlurEvent);\r\n this._elementToAttachTo.addEventListener(this._wheelEventName, this._pointerWheelEvent, passiveSupported ? { passive: false } : false);\r\n\r\n // Since there's no up or down event for mouse wheel or delta x/y, clear mouse values at end of frame\r\n this._pointerInputClearObserver = this._engine.onEndFrameObservable.add(() => {\r\n if (this.isDeviceAvailable(DeviceType.Mouse)) {\r\n const pointer = this._inputs[DeviceType.Mouse][0];\r\n pointer[PointerInput.MouseWheelX] = 0;\r\n pointer[PointerInput.MouseWheelY] = 0;\r\n pointer[PointerInput.MouseWheelZ] = 0;\r\n pointer[PointerInput.DeltaHorizontal] = 0;\r\n pointer[PointerInput.DeltaVertical] = 0;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Handle all actions that come from gamepad interaction\r\n */\r\n private _handleGamepadActions() {\r\n this._gamepadConnectedEvent = ((evt: any) => {\r\n this._addGamePad(evt.gamepad);\r\n });\r\n\r\n this._gamepadDisconnectedEvent = ((evt: any) => {\r\n if (this._gamepads) {\r\n const deviceType = this._getGamepadDeviceType(evt.gamepad.id);\r\n const deviceSlot = evt.gamepad.index;\r\n\r\n this._unregisterDevice(deviceType, deviceSlot);\r\n delete this._gamepads[deviceSlot];\r\n }\r\n });\r\n\r\n window.addEventListener(\"gamepadconnected\", this._gamepadConnectedEvent);\r\n window.addEventListener(\"gamepaddisconnected\", this._gamepadDisconnectedEvent);\r\n }\r\n\r\n /**\r\n * Update all non-event based devices with each frame\r\n * @param deviceType Enum specifiying device type\r\n * @param deviceSlot \"Slot\" or index that device is referenced in\r\n * @param inputIndex Id of input to be checked\r\n */\r\n private _updateDevice(deviceType: DeviceType, deviceSlot: number, inputIndex: number) {\r\n // Gamepads\r\n const gp = navigator.getGamepads()[deviceSlot];\r\n\r\n if (gp && deviceType === this._gamepads[deviceSlot]) {\r\n const device = this._inputs[deviceType][deviceSlot];\r\n\r\n if (inputIndex >= gp.buttons.length) {\r\n device[inputIndex] = gp.axes[inputIndex - gp.buttons.length].valueOf();\r\n }\r\n else {\r\n device[inputIndex] = gp.buttons[inputIndex].value;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets DeviceType from the device name\r\n * @param deviceName Name of Device from DeviceInputSystem\r\n * @returns DeviceType enum value\r\n */\r\n private _getGamepadDeviceType(deviceName: string): DeviceType {\r\n if (deviceName.indexOf(\"054c\") !== -1 && deviceName.indexOf(\"0ce6\") === -1) { // DualShock 4 Gamepad\r\n return DeviceType.DualShock;\r\n }\r\n else if (deviceName.indexOf(\"Xbox One\") !== -1 || deviceName.search(\"Xbox 360\") !== -1 || deviceName.search(\"xinput\") !== -1) { // Xbox Gamepad\r\n return DeviceType.Xbox;\r\n }\r\n else if (deviceName.indexOf(\"057e\") !== -1) { // Switch Gamepad\r\n return DeviceType.Switch;\r\n }\r\n\r\n return DeviceType.Generic;\r\n }\r\n\r\n /**\r\n * Get DeviceType from a given pointer/mouse/touch event.\r\n * @param evt PointerEvent to evaluate\r\n * @returns DeviceType interpreted from event\r\n */\r\n private _getPointerType(evt: any): DeviceType {\r\n let deviceType = DeviceType.Mouse;\r\n\r\n if (evt.pointerType === \"touch\" || evt.pointerType === \"pen\" || evt.touches) {\r\n deviceType = DeviceType.Touch;\r\n }\r\n\r\n return deviceType;\r\n }\r\n\r\n /**\r\n * Remove events from active input element\r\n */\r\n private _removeEvents() {\r\n // Blur Events\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._keyboardBlurEvent);\r\n this._elementToAttachTo.removeEventListener(\"blur\", this._pointerBlurEvent);\r\n\r\n // Keyboard Events\r\n if (this._keyboardActive) {\r\n this._elementToAttachTo.removeEventListener(\"keydown\", this._keyboardDownEvent);\r\n this._elementToAttachTo.removeEventListener(\"keyup\", this._keyboardUpEvent);\r\n }\r\n\r\n // Pointer Events\r\n if (this._pointerActive) {\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"move\", this._pointerMoveEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"down\", this._pointerDownEvent);\r\n this._elementToAttachTo.removeEventListener(this._eventPrefix + \"up\", this._pointerUpEvent);\r\n this._elementToAttachTo.removeEventListener(this._wheelEventName, this._pointerWheelEvent);\r\n\r\n if (this._pointerInputClearObserver) {\r\n this._engine.onEndFrameObservable.remove(this._pointerInputClearObserver);\r\n }\r\n }\r\n }\r\n}\r\n"]}
@@ -44,9 +44,7 @@ export declare enum PointerInput {
44
44
  /** Delta X */
45
45
  DeltaHorizontal = 10,
46
46
  /** Delta Y */
47
- DeltaVertical = 11,
48
- /** MoveBeing Hijack for simultaneous buttons pressed for instance */
49
- FakeMove = 12
47
+ DeltaVertical = 11
50
48
  }
51
49
  /**
52
50
  * Enum for Dual Shock Gamepad
@@ -48,8 +48,6 @@ export var PointerInput;
48
48
  PointerInput[PointerInput["DeltaHorizontal"] = 10] = "DeltaHorizontal";
49
49
  /** Delta Y */
50
50
  PointerInput[PointerInput["DeltaVertical"] = 11] = "DeltaVertical";
51
- /** MoveBeing Hijack for simultaneous buttons pressed for instance */
52
- PointerInput[PointerInput["FakeMove"] = 12] = "FakeMove";
53
51
  })(PointerInput || (PointerInput = {}));
54
52
  /**
55
53
  * Enum for Dual Shock Gamepad
@@ -1 +1 @@
1
- {"version":3,"file":"deviceEnums.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/InputDevices/deviceEnums.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAN,IAAY,UAeX;AAfD,WAAY,UAAU;IAClB,cAAc;IACd,iDAAW,CAAA;IACX,eAAe;IACf,mDAAY,CAAA;IACZ,YAAY;IACZ,6CAAS,CAAA;IACT,qBAAqB;IACrB,6CAAS,CAAA;IACT,qBAAqB;IACrB,qDAAa,CAAA;IACb,WAAW;IACX,2CAAQ,CAAA;IACR,wBAAwB;IACxB,+CAAU,CAAA;AACd,CAAC,EAfW,UAAU,KAAV,UAAU,QAerB;AAED,eAAe;AACf;;GAEG;AACH,MAAM,CAAN,IAAY,YA2BX;AA3BD,WAAY,YAAY;IACpB,sBAAsB;IACtB,2DAAc,CAAA;IACd,oBAAoB;IACpB,uDAAY,CAAA;IACZ,0BAA0B;IAC1B,yDAAa,CAAA;IACb,mBAAmB;IACnB,6DAAe,CAAA;IACf,kBAAkB;IAClB,2DAAc,CAAA;IACd,mBAAmB;IACnB,6DAAe,CAAA;IACf,sBAAsB;IACtB,mEAAkB,CAAA;IAClB,oBAAoB;IACpB,6DAAe,CAAA;IACf,oBAAoB;IACpB,6DAAe,CAAA;IACf,oBAAoB;IACpB,6DAAe,CAAA;IACf,cAAc;IACd,sEAAoB,CAAA;IACpB,cAAc;IACd,kEAAkB,CAAA;IAClB,qEAAqE;IACrE,wDAAa,CAAA;AACjB,CAAC,EA3BW,YAAY,KAAZ,YAAY,QA2BvB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,cA6CX;AA7CD,WAAY,cAAc;IACtB,YAAY;IACZ,qDAAS,CAAA;IACT,aAAa;IACb,uDAAU,CAAA;IACV,aAAa;IACb,uDAAU,CAAA;IACV,eAAe;IACf,2DAAY,CAAA;IACZ,SAAS;IACT,+CAAM,CAAA;IACN,SAAS;IACT,+CAAM,CAAA;IACN,SAAS;IACT,+CAAM,CAAA;IACN,SAAS;IACT,+CAAM,CAAA;IACN,YAAY;IACZ,qDAAS,CAAA;IACT,cAAc;IACd,yDAAW,CAAA;IACX,SAAS;IACT,gDAAO,CAAA;IACP,SAAS;IACT,gDAAO,CAAA;IACP,aAAa;IACb,wDAAW,CAAA;IACX,eAAe;IACf,4DAAa,CAAA;IACb,eAAe;IACf,4DAAa,CAAA;IACb,aAAa;IACb,8DAAc,CAAA;IACd,WAAW;IACX,oDAAS,CAAA;IACT,eAAe;IACf,4DAAa,CAAA;IACb,kBAAkB;IAClB,kEAAgB,CAAA;IAChB,kBAAkB;IAClB,kEAAgB,CAAA;IAChB,kBAAkB;IAClB,kEAAgB,CAAA;IAChB,kBAAkB;IAClB,kEAAgB,CAAA;AACpB,CAAC,EA7CW,cAAc,KAAd,cAAc,QA6CzB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SA2CX;AA3CD,WAAY,SAAS;IACjB,QAAQ;IACR,mCAAK,CAAA;IACL,QAAQ;IACR,mCAAK,CAAA;IACL,QAAQ;IACR,mCAAK,CAAA;IACL,QAAQ;IACR,mCAAK,CAAA;IACL,SAAS;IACT,qCAAM,CAAA;IACN,SAAS;IACT,qCAAM,CAAA;IACN,SAAS;IACT,qCAAM,CAAA;IACN,SAAS;IACT,qCAAM,CAAA;IACN,WAAW;IACX,yCAAQ,CAAA;IACR,YAAY;IACZ,2CAAS,CAAA;IACT,SAAS;IACT,sCAAO,CAAA;IACP,SAAS;IACT,sCAAO,CAAA;IACP,aAAa;IACb,8CAAW,CAAA;IACX,eAAe;IACf,kDAAa,CAAA;IACb,eAAe;IACf,kDAAa,CAAA;IACb,aAAa;IACb,oDAAc,CAAA;IACd,WAAW;IACX,0CAAS,CAAA;IACT,kBAAkB;IAClB,wDAAgB,CAAA;IAChB,kBAAkB;IAClB,wDAAgB,CAAA;IAChB,kBAAkB;IAClB,wDAAgB,CAAA;IAChB,kBAAkB;IAClB,wDAAgB,CAAA;AACpB,CAAC,EA3CW,SAAS,KAAT,SAAS,QA2CpB;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,WA6CX;AA7CD,WAAY,WAAW;IACnB,QAAQ;IACR,uCAAK,CAAA;IACL,QAAQ;IACR,uCAAK,CAAA;IACL,QAAQ;IACR,uCAAK,CAAA;IACL,QAAQ;IACR,uCAAK,CAAA;IACL,QAAQ;IACR,uCAAK,CAAA;IACL,QAAQ;IACR,uCAAK,CAAA;IACL,SAAS;IACT,yCAAM,CAAA;IACN,SAAS;IACT,yCAAM,CAAA;IACN,YAAY;IACZ,+CAAS,CAAA;IACT,WAAW;IACX,6CAAQ,CAAA;IACR,SAAS;IACT,0CAAO,CAAA;IACP,SAAS;IACT,0CAAO,CAAA;IACP,aAAa;IACb,kDAAW,CAAA;IACX,eAAe;IACf,sDAAa,CAAA;IACb,eAAe;IACf,sDAAa,CAAA;IACb,aAAa;IACb,wDAAc,CAAA;IACd,WAAW;IACX,8CAAS,CAAA;IACT,cAAc;IACd,oDAAY,CAAA;IACZ,kBAAkB;IAClB,4DAAgB,CAAA;IAChB,kBAAkB;IAClB,4DAAgB,CAAA;IAChB,kBAAkB;IAClB,4DAAgB,CAAA;IAChB,kBAAkB;IAClB,4DAAgB,CAAA;AACpB,CAAC,EA7CW,WAAW,KAAX,WAAW,QA6CtB","sourcesContent":["/**\r\n * Enum for Device Types\r\n */\r\nexport enum DeviceType {\r\n /** Generic */\r\n Generic = 0,\r\n /** Keyboard */\r\n Keyboard = 1,\r\n /** Mouse */\r\n Mouse = 2,\r\n /** Touch Pointers */\r\n Touch = 3,\r\n /** PS4 Dual Shock */\r\n DualShock = 4,\r\n /** Xbox */\r\n Xbox = 5,\r\n /** Switch Controller */\r\n Switch = 6\r\n}\r\n\r\n// Device Enums\r\n/**\r\n * Enum for All Pointers (Touch/Mouse)\r\n */\r\nexport enum PointerInput {\r\n /** Horizontal Axis */\r\n Horizontal = 0,\r\n /** Vertical Axis */\r\n Vertical = 1,\r\n /** Left Click or Touch */\r\n LeftClick = 2,\r\n /** Middle Click */\r\n MiddleClick = 3,\r\n /** Right Click */\r\n RightClick = 4,\r\n /** Browser Back */\r\n BrowserBack = 5,\r\n /** Browser Forward */\r\n BrowserForward = 6,\r\n /** Mouse Wheel X */\r\n MouseWheelX = 7,\r\n /** Mouse Wheel Y */\r\n MouseWheelY = 8,\r\n /** Mouse Wheel Z */\r\n MouseWheelZ = 9,\r\n /** Delta X */\r\n DeltaHorizontal = 10,\r\n /** Delta Y */\r\n DeltaVertical = 11,\r\n /** MoveBeing Hijack for simultaneous buttons pressed for instance */\r\n FakeMove = 12,\r\n}\r\n\r\n/**\r\n * Enum for Dual Shock Gamepad\r\n */\r\nexport enum DualShockInput {\r\n /** Cross */\r\n Cross = 0,\r\n /** Circle */\r\n Circle = 1,\r\n /** Square */\r\n Square = 2,\r\n /** Triangle */\r\n Triangle = 3,\r\n /** L1 */\r\n L1 = 4,\r\n /** R1 */\r\n R1 = 5,\r\n /** L2 */\r\n L2 = 6,\r\n /** R2 */\r\n R2 = 7,\r\n /** Share */\r\n Share = 8,\r\n /** Options */\r\n Options = 9,\r\n /** L3 */\r\n L3 = 10,\r\n /** R3 */\r\n R3 = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** TouchPad */\r\n TouchPad = 17,\r\n /** LStickXAxis */\r\n LStickXAxis = 18,\r\n /** LStickYAxis */\r\n LStickYAxis = 19,\r\n /** RStickXAxis */\r\n RStickXAxis = 20,\r\n /** RStickYAxis */\r\n RStickYAxis = 21\r\n}\r\n\r\n/**\r\n * Enum for Xbox Gamepad\r\n */\r\nexport enum XboxInput {\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 /** LB */\r\n LB = 4,\r\n /** RB */\r\n RB = 5,\r\n /** LT */\r\n LT = 6,\r\n /** RT */\r\n RT = 7,\r\n /** Back */\r\n Back = 8,\r\n /** Start */\r\n Start = 9,\r\n /** LS */\r\n LS = 10,\r\n /** RS */\r\n RS = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** LStickXAxis */\r\n LStickXAxis = 17,\r\n /** LStickYAxis */\r\n LStickYAxis = 18,\r\n /** RStickXAxis */\r\n RStickXAxis = 19,\r\n /** RStickYAxis */\r\n RStickYAxis = 20\r\n}\r\n\r\n/**\r\n * Enum for Switch (Pro/JoyCon L+R) Gamepad\r\n */\r\nexport enum SwitchInput {\r\n /** B */\r\n B = 0,\r\n /** A */\r\n A = 1,\r\n /** Y */\r\n Y = 2,\r\n /** X */\r\n X = 3,\r\n /** L */\r\n L = 4,\r\n /** R */\r\n R = 5,\r\n /** ZL */\r\n ZL = 6,\r\n /** ZR */\r\n ZR = 7,\r\n /** Minus */\r\n Minus = 8,\r\n /** Plus */\r\n Plus = 9,\r\n /** LS */\r\n LS = 10,\r\n /** RS */\r\n RS = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** Capture */\r\n Capture = 17,\r\n /** LStickXAxis */\r\n LStickXAxis = 18,\r\n /** LStickYAxis */\r\n LStickYAxis = 19,\r\n /** RStickXAxis */\r\n RStickXAxis = 20,\r\n /** RStickYAxis */\r\n RStickYAxis = 21\r\n}"]}
1
+ {"version":3,"file":"deviceEnums.js","sourceRoot":"","sources":["../../../../sourceES6/core/DeviceInput/InputDevices/deviceEnums.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Enum for Device Types\r\n */\r\nexport enum DeviceType {\r\n /** Generic */\r\n Generic = 0,\r\n /** Keyboard */\r\n Keyboard = 1,\r\n /** Mouse */\r\n Mouse = 2,\r\n /** Touch Pointers */\r\n Touch = 3,\r\n /** PS4 Dual Shock */\r\n DualShock = 4,\r\n /** Xbox */\r\n Xbox = 5,\r\n /** Switch Controller */\r\n Switch = 6\r\n}\r\n\r\n// Device Enums\r\n/**\r\n * Enum for All Pointers (Touch/Mouse)\r\n */\r\nexport enum PointerInput {\r\n /** Horizontal Axis */\r\n Horizontal = 0,\r\n /** Vertical Axis */\r\n Vertical = 1,\r\n /** Left Click or Touch */\r\n LeftClick = 2,\r\n /** Middle Click */\r\n MiddleClick = 3,\r\n /** Right Click */\r\n RightClick = 4,\r\n /** Browser Back */\r\n BrowserBack = 5,\r\n /** Browser Forward */\r\n BrowserForward = 6,\r\n /** Mouse Wheel X */\r\n MouseWheelX = 7,\r\n /** Mouse Wheel Y */\r\n MouseWheelY = 8,\r\n /** Mouse Wheel Z */\r\n MouseWheelZ = 9,\r\n /** Delta X */\r\n DeltaHorizontal = 10,\r\n /** Delta Y */\r\n DeltaVertical = 11,\r\n}\r\n\r\n/**\r\n * Enum for Dual Shock Gamepad\r\n */\r\nexport enum DualShockInput {\r\n /** Cross */\r\n Cross = 0,\r\n /** Circle */\r\n Circle = 1,\r\n /** Square */\r\n Square = 2,\r\n /** Triangle */\r\n Triangle = 3,\r\n /** L1 */\r\n L1 = 4,\r\n /** R1 */\r\n R1 = 5,\r\n /** L2 */\r\n L2 = 6,\r\n /** R2 */\r\n R2 = 7,\r\n /** Share */\r\n Share = 8,\r\n /** Options */\r\n Options = 9,\r\n /** L3 */\r\n L3 = 10,\r\n /** R3 */\r\n R3 = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** TouchPad */\r\n TouchPad = 17,\r\n /** LStickXAxis */\r\n LStickXAxis = 18,\r\n /** LStickYAxis */\r\n LStickYAxis = 19,\r\n /** RStickXAxis */\r\n RStickXAxis = 20,\r\n /** RStickYAxis */\r\n RStickYAxis = 21\r\n}\r\n\r\n/**\r\n * Enum for Xbox Gamepad\r\n */\r\nexport enum XboxInput {\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 /** LB */\r\n LB = 4,\r\n /** RB */\r\n RB = 5,\r\n /** LT */\r\n LT = 6,\r\n /** RT */\r\n RT = 7,\r\n /** Back */\r\n Back = 8,\r\n /** Start */\r\n Start = 9,\r\n /** LS */\r\n LS = 10,\r\n /** RS */\r\n RS = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** LStickXAxis */\r\n LStickXAxis = 17,\r\n /** LStickYAxis */\r\n LStickYAxis = 18,\r\n /** RStickXAxis */\r\n RStickXAxis = 19,\r\n /** RStickYAxis */\r\n RStickYAxis = 20\r\n}\r\n\r\n/**\r\n * Enum for Switch (Pro/JoyCon L+R) Gamepad\r\n */\r\nexport enum SwitchInput {\r\n /** B */\r\n B = 0,\r\n /** A */\r\n A = 1,\r\n /** Y */\r\n Y = 2,\r\n /** X */\r\n X = 3,\r\n /** L */\r\n L = 4,\r\n /** R */\r\n R = 5,\r\n /** ZL */\r\n ZL = 6,\r\n /** ZR */\r\n ZR = 7,\r\n /** Minus */\r\n Minus = 8,\r\n /** Plus */\r\n Plus = 9,\r\n /** LS */\r\n LS = 10,\r\n /** RS */\r\n RS = 11,\r\n /** DPadUp */\r\n DPadUp = 12,\r\n /** DPadDown */\r\n DPadDown = 13,\r\n /** DPadLeft */\r\n DPadLeft = 14,\r\n /** DRight */\r\n DPadRight = 15,\r\n /** Home */\r\n Home = 16,\r\n /** Capture */\r\n Capture = 17,\r\n /** LStickXAxis */\r\n LStickXAxis = 18,\r\n /** LStickYAxis */\r\n LStickYAxis = 19,\r\n /** RStickXAxis */\r\n RStickXAxis = 20,\r\n /** RStickYAxis */\r\n RStickYAxis = 21\r\n}"]}
@@ -95,22 +95,22 @@ ThinEngine.prototype.setAlphaEquation = function (equation) {
95
95
  }
96
96
  switch (equation) {
97
97
  case 0:
98
- this._alphaState.setAlphaEquationParameters(this._gl.FUNC_ADD, this._gl.FUNC_ADD);
98
+ this._alphaState.setAlphaEquationParameters(32774, 32774);
99
99
  break;
100
100
  case 1:
101
- this._alphaState.setAlphaEquationParameters(this._gl.FUNC_SUBTRACT, this._gl.FUNC_SUBTRACT);
101
+ this._alphaState.setAlphaEquationParameters(32778, 32778);
102
102
  break;
103
103
  case 2:
104
- this._alphaState.setAlphaEquationParameters(this._gl.FUNC_REVERSE_SUBTRACT, this._gl.FUNC_REVERSE_SUBTRACT);
104
+ this._alphaState.setAlphaEquationParameters(32779, 32779);
105
105
  break;
106
106
  case 3:
107
- this._alphaState.setAlphaEquationParameters(this._gl.MAX, this._gl.MAX);
107
+ this._alphaState.setAlphaEquationParameters(32776, 32776);
108
108
  break;
109
109
  case 4:
110
- this._alphaState.setAlphaEquationParameters(this._gl.MIN, this._gl.MIN);
110
+ this._alphaState.setAlphaEquationParameters(32775, 32775);
111
111
  break;
112
112
  case 5:
113
- this._alphaState.setAlphaEquationParameters(this._gl.MIN, this._gl.FUNC_ADD);
113
+ this._alphaState.setAlphaEquationParameters(32775, 32774);
114
114
  break;
115
115
  }
116
116
  this._alphaEquation = equation;
@@ -1 +1 @@
1
- {"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Extensions/engine.alpha.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\n\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Sets alpha constants used by some alpha blending modes\r\n * @param r defines the red component\r\n * @param g defines the green component\r\n * @param b defines the blue component\r\n * @param a defines the alpha component\r\n */\r\n setAlphaConstants(r: number, g: number, b: number, a: number): void;\r\n\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n */\r\n setAlphaMode(mode: number, noDepthWriteChange?: boolean): void;\r\n\r\n /**\r\n * Gets the current alpha mode\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n * @returns the current alpha mode\r\n */\r\n getAlphaMode(): number;\r\n\r\n /**\r\n * Sets the current alpha equation\r\n * @param equation defines the equation to use (one of the Engine.ALPHA_EQUATION_XXX)\r\n */\r\n setAlphaEquation(equation: number): void;\r\n\r\n /**\r\n * Gets the current alpha equation.\r\n * @returns the current alpha equation\r\n */\r\n getAlphaEquation(): number;\r\n }\r\n}\r\n\r\nThinEngine.prototype.setAlphaConstants = function (r: number, g: number, b: number, a: number) {\r\n this._alphaState.setAlphaBlendConstants(r, g, b, a);\r\n};\r\n\r\nThinEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode) {\r\n return;\r\n }\r\n\r\n switch (mode) {\r\n case 0:\r\n this._alphaState.alphaBlend = false;\r\n break;\r\n case 7:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 8:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 2:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 6:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 1:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 3:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 4:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 5:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 9:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.CONSTANT_COLOR, this._gl.ONE_MINUS_CONSTANT_COLOR, this._gl.CONSTANT_ALPHA, this._gl.ONE_MINUS_CONSTANT_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 10:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 11:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 12:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 13:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE_MINUS_DST_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 14:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 15:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 16:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 17:\r\n // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n }\r\n if (!noDepthWriteChange) {\r\n this.depthCullingState.depthMask = (mode === 0);\r\n }\r\n this._alphaMode = mode;\r\n};\r\n\r\nThinEngine.prototype.getAlphaMode = function (): number {\r\n return this._alphaMode;\r\n};\r\n\r\nThinEngine.prototype.setAlphaEquation = function (equation: number): void {\r\n if (this._alphaEquation === equation) {\r\n return;\r\n }\r\n\r\n switch (equation) {\r\n case 0:\r\n this._alphaState.setAlphaEquationParameters(this._gl.FUNC_ADD, this._gl.FUNC_ADD);\r\n break;\r\n case 1:\r\n this._alphaState.setAlphaEquationParameters(this._gl.FUNC_SUBTRACT, this._gl.FUNC_SUBTRACT);\r\n break;\r\n case 2:\r\n this._alphaState.setAlphaEquationParameters(this._gl.FUNC_REVERSE_SUBTRACT, this._gl.FUNC_REVERSE_SUBTRACT);\r\n break;\r\n case 3:\r\n this._alphaState.setAlphaEquationParameters(this._gl.MAX, this._gl.MAX);\r\n break;\r\n case 4:\r\n this._alphaState.setAlphaEquationParameters(this._gl.MIN, this._gl.MIN);\r\n break;\r\n case 5:\r\n this._alphaState.setAlphaEquationParameters(this._gl.MIN, this._gl.FUNC_ADD);\r\n break;\r\n }\r\n this._alphaEquation = equation;\r\n};\r\n\r\nThinEngine.prototype.getAlphaEquation = function () {\r\n return this._alphaEquation;\r\n};"]}
1
+ {"version":3,"file":"engine.alpha.js","sourceRoot":"","sources":["../../../../sourceES6/core/Engines/Extensions/engine.alpha.ts"],"names":[],"mappings":"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","sourcesContent":["import { ThinEngine } from \"../../Engines/thinEngine\";\r\n\r\n\r\ndeclare module \"../../Engines/thinEngine\" {\r\n export interface ThinEngine {\r\n /**\r\n * Sets alpha constants used by some alpha blending modes\r\n * @param r defines the red component\r\n * @param g defines the green component\r\n * @param b defines the blue component\r\n * @param a defines the alpha component\r\n */\r\n setAlphaConstants(r: number, g: number, b: number, a: number): void;\r\n\r\n /**\r\n * Sets the current alpha mode\r\n * @param mode defines the mode to use (one of the Engine.ALPHA_XXX)\r\n * @param noDepthWriteChange defines if depth writing state should remains unchanged (false by default)\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n */\r\n setAlphaMode(mode: number, noDepthWriteChange?: boolean): void;\r\n\r\n /**\r\n * Gets the current alpha mode\r\n * @see https://doc.babylonjs.com/resources/transparency_and_how_meshes_are_rendered\r\n * @returns the current alpha mode\r\n */\r\n getAlphaMode(): number;\r\n\r\n /**\r\n * Sets the current alpha equation\r\n * @param equation defines the equation to use (one of the Engine.ALPHA_EQUATION_XXX)\r\n */\r\n setAlphaEquation(equation: number): void;\r\n\r\n /**\r\n * Gets the current alpha equation.\r\n * @returns the current alpha equation\r\n */\r\n getAlphaEquation(): number;\r\n }\r\n}\r\n\r\nThinEngine.prototype.setAlphaConstants = function (r: number, g: number, b: number, a: number) {\r\n this._alphaState.setAlphaBlendConstants(r, g, b, a);\r\n};\r\n\r\nThinEngine.prototype.setAlphaMode = function (mode: number, noDepthWriteChange: boolean = false): void {\r\n if (this._alphaMode === mode) {\r\n return;\r\n }\r\n\r\n switch (mode) {\r\n case 0:\r\n this._alphaState.alphaBlend = false;\r\n break;\r\n case 7:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 8:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 2:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 6:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 1:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 3:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ZERO, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 4:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_COLOR, this._gl.ZERO, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 5:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 9:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.CONSTANT_COLOR, this._gl.ONE_MINUS_CONSTANT_COLOR, this._gl.CONSTANT_ALPHA, this._gl.ONE_MINUS_CONSTANT_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 10:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 11:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 12:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.DST_ALPHA, this._gl.ONE, this._gl.ZERO, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 13:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ONE_MINUS_DST_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 14:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 15:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE, this._gl.ONE, this._gl.ONE, this._gl.ZERO);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 16:\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.ONE_MINUS_DST_COLOR, this._gl.ONE_MINUS_SRC_COLOR, this._gl.ZERO, this._gl.ONE);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n case 17:\r\n // Same as ALPHA_COMBINE but accumulates (1 - alpha) values in the alpha channel for a later readout in order independant transparency\r\n this._alphaState.setAlphaBlendFunctionParameters(this._gl.SRC_ALPHA, this._gl.ONE_MINUS_SRC_ALPHA, this._gl.ONE, this._gl.ONE_MINUS_SRC_ALPHA);\r\n this._alphaState.alphaBlend = true;\r\n break;\r\n }\r\n if (!noDepthWriteChange) {\r\n this.depthCullingState.depthMask = (mode === 0);\r\n }\r\n this._alphaMode = mode;\r\n};\r\n\r\nThinEngine.prototype.getAlphaMode = function (): number {\r\n return this._alphaMode;\r\n};\r\n\r\nThinEngine.prototype.setAlphaEquation = function (equation: number): void {\r\n if (this._alphaEquation === equation) {\r\n return;\r\n }\r\n\r\n switch (equation) {\r\n case 0:\r\n this._alphaState.setAlphaEquationParameters(32774, 32774);\r\n break;\r\n case 1:\r\n this._alphaState.setAlphaEquationParameters(32778, 32778);\r\n break;\r\n case 2:\r\n this._alphaState.setAlphaEquationParameters(32779, 32779);\r\n break;\r\n case 3:\r\n this._alphaState.setAlphaEquationParameters(32776, 32776);\r\n break;\r\n case 4:\r\n this._alphaState.setAlphaEquationParameters(32775, 32775);\r\n break;\r\n case 5:\r\n this._alphaState.setAlphaEquationParameters(32775, 32774);\r\n break;\r\n }\r\n this._alphaEquation = equation;\r\n};\r\n\r\nThinEngine.prototype.getAlphaEquation = function () {\r\n return this._alphaEquation;\r\n};"]}