@dcl/ecs 7.22.6-25007982108.commit-83012ab → 7.22.6-25375246959.commit-ec25d50

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 (251) hide show
  1. package/dist/components/extended/MeshCollider.d.ts +0 -8
  2. package/dist/components/extended/MeshCollider.js +0 -6
  3. package/dist/components/extended/MeshRenderer.d.ts +0 -8
  4. package/dist/components/extended/MeshRenderer.js +0 -5
  5. package/dist/components/extended/ParticleSystem.d.ts +24 -0
  6. package/dist/components/extended/ParticleSystem.js +23 -0
  7. package/dist/components/extended/Tween.d.ts +48 -1
  8. package/dist/components/extended/Tween.js +66 -0
  9. package/dist/components/generated/{TextureCamera.gen.js → AudioAnalysis.gen.js} +7 -7
  10. package/dist/components/generated/component-names.gen.js +1 -10
  11. package/dist/components/generated/global.gen.d.ts +2 -20
  12. package/dist/components/generated/global.gen.js +1 -10
  13. package/dist/components/generated/index.gen.d.ts +4 -40
  14. package/dist/components/generated/index.gen.js +5 -50
  15. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
  16. package/dist/components/generated/pb/decentraland/common/texture.gen.js +0 -65
  17. package/dist/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.d.ts +37 -0
  18. package/dist/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.js +161 -0
  19. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
  20. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
  21. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
  22. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +1 -151
  23. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
  24. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
  25. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
  26. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +1 -119
  27. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -4
  28. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +1 -3
  29. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
  30. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
  31. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
  32. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +1 -57
  33. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
  34. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +0 -56
  35. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
  36. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +0 -56
  37. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
  38. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +42 -4
  39. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
  40. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
  41. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
  42. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +0 -30
  43. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
  44. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
  45. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
  46. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
  47. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
  48. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +0 -90
  49. package/dist/components/generated/types.gen.d.ts +1 -0
  50. package/dist/components/generated/types.gen.js +1 -0
  51. package/dist/components/index.d.ts +9 -11
  52. package/dist/components/index.js +8 -11
  53. package/dist/components/manual/Transform.d.ts +13 -0
  54. package/dist/components/manual/Transform.js +8 -0
  55. package/dist/components/types.d.ts +2 -3
  56. package/dist/engine/entity.js +4 -2
  57. package/dist/engine/grow-only-value-set-component-definition.js +1 -1
  58. package/dist/engine/input.d.ts +0 -6
  59. package/dist/engine/input.js +4 -9
  60. package/dist/engine/lww-element-set-component-definition.d.ts +2 -2
  61. package/dist/engine/lww-element-set-component-definition.js +24 -7
  62. package/dist/index.d.ts +4 -2
  63. package/dist/index.js +4 -1
  64. package/dist/runtime/globals.d.ts +1 -2
  65. package/dist/runtime/globals.js +1 -2
  66. package/dist/runtime/helpers/index.d.ts +1 -0
  67. package/dist/runtime/helpers/index.js +1 -0
  68. package/dist/runtime/helpers/tree.d.ts +6 -0
  69. package/dist/runtime/helpers/tree.js +2 -2
  70. package/dist/runtime/helpers/vectors.js +36 -0
  71. package/dist/runtime/initialization/index.d.ts +7 -0
  72. package/dist/runtime/initialization/index.js +6 -0
  73. package/dist/systems/crdt/index.js +6 -6
  74. package/dist/systems/events.d.ts +25 -59
  75. package/dist/systems/events.js +129 -145
  76. package/dist/systems/physics-force.js +140 -0
  77. package/dist/systems/physics-impulse.d.ts +12 -0
  78. package/dist/systems/physics-impulse.js +85 -0
  79. package/dist/systems/physics.d.ts +77 -0
  80. package/dist/systems/physics.js +18 -0
  81. package/dist/systems/raycast.d.ts +1 -3
  82. package/dist/systems/raycast.js +0 -2
  83. package/dist-cjs/components/extended/MeshCollider.d.ts +0 -8
  84. package/dist-cjs/components/extended/MeshCollider.js +0 -6
  85. package/dist-cjs/components/extended/MeshRenderer.d.ts +0 -8
  86. package/dist-cjs/components/extended/MeshRenderer.js +0 -5
  87. package/dist-cjs/components/extended/ParticleSystem.d.ts +24 -0
  88. package/dist-cjs/components/extended/ParticleSystem.js +28 -0
  89. package/dist-cjs/components/extended/Tween.d.ts +48 -1
  90. package/dist-cjs/components/extended/Tween.js +66 -0
  91. package/dist-cjs/components/generated/{TextureCamera.gen.js → AudioAnalysis.gen.js} +8 -8
  92. package/dist-cjs/components/generated/component-names.gen.js +1 -10
  93. package/dist-cjs/components/generated/global.gen.d.ts +2 -20
  94. package/dist-cjs/components/generated/global.gen.js +3 -12
  95. package/dist-cjs/components/generated/index.gen.d.ts +4 -40
  96. package/dist-cjs/components/generated/index.gen.js +8 -62
  97. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
  98. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +1 -66
  99. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.d.ts +37 -0
  100. package/dist-cjs/components/generated/pb/decentraland/sdk/components/audio_analysis.gen.js +167 -0
  101. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
  102. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
  103. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
  104. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +2 -152
  105. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
  106. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
  107. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
  108. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +2 -120
  109. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -4
  110. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +1 -3
  111. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
  112. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
  113. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
  114. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +2 -58
  115. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
  116. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +1 -57
  117. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
  118. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +1 -57
  119. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
  120. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +43 -5
  121. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
  122. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
  123. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
  124. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +1 -31
  125. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
  126. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
  127. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
  128. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
  129. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
  130. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +1 -91
  131. package/dist-cjs/components/generated/types.gen.d.ts +1 -0
  132. package/dist-cjs/components/generated/types.gen.js +3 -0
  133. package/dist-cjs/components/index.d.ts +9 -11
  134. package/dist-cjs/components/index.js +11 -15
  135. package/dist-cjs/components/manual/Transform.d.ts +13 -0
  136. package/dist-cjs/components/manual/Transform.js +31 -0
  137. package/dist-cjs/components/types.d.ts +2 -3
  138. package/dist-cjs/engine/entity.js +4 -2
  139. package/dist-cjs/engine/grow-only-value-set-component-definition.js +1 -1
  140. package/dist-cjs/engine/input.d.ts +0 -6
  141. package/dist-cjs/engine/input.js +4 -9
  142. package/dist-cjs/engine/lww-element-set-component-definition.d.ts +2 -2
  143. package/dist-cjs/engine/lww-element-set-component-definition.js +24 -7
  144. package/dist-cjs/index.d.ts +4 -2
  145. package/dist-cjs/index.js +5 -2
  146. package/dist-cjs/runtime/globals.d.ts +1 -2
  147. package/dist-cjs/runtime/globals.js +1 -2
  148. package/dist-cjs/runtime/helpers/index.d.ts +1 -0
  149. package/dist-cjs/runtime/helpers/index.js +1 -0
  150. package/dist-cjs/runtime/helpers/tree.d.ts +6 -0
  151. package/dist-cjs/runtime/helpers/tree.js +3 -2
  152. package/dist-cjs/runtime/helpers/vectors.js +39 -0
  153. package/dist-cjs/runtime/initialization/index.d.ts +7 -0
  154. package/dist-cjs/runtime/initialization/index.js +7 -1
  155. package/dist-cjs/systems/crdt/index.js +6 -6
  156. package/dist-cjs/systems/events.d.ts +25 -59
  157. package/dist-cjs/systems/events.js +129 -145
  158. package/dist-cjs/systems/physics-force.js +167 -0
  159. package/dist-cjs/systems/physics-impulse.d.ts +12 -0
  160. package/dist-cjs/systems/physics-impulse.js +112 -0
  161. package/dist-cjs/systems/physics.d.ts +77 -0
  162. package/dist-cjs/systems/physics.js +23 -0
  163. package/dist-cjs/systems/raycast.d.ts +1 -3
  164. package/dist-cjs/systems/raycast.js +0 -2
  165. package/package.json +3 -2
  166. package/dist/components/extended/AvatarEquippedData.d.ts +0 -10
  167. package/dist/components/extended/AvatarEquippedData.js +0 -15
  168. package/dist/components/extended/AvatarShape.d.ts +0 -10
  169. package/dist/components/extended/AvatarShape.js +0 -15
  170. package/dist/components/generated/AvatarMovement.gen.d.ts +0 -1
  171. package/dist/components/generated/AvatarMovement.gen.js +0 -25
  172. package/dist/components/generated/AvatarMovementInfo.gen.d.ts +0 -1
  173. package/dist/components/generated/AvatarMovementInfo.gen.js +0 -25
  174. package/dist/components/generated/CameraLayer.gen.d.ts +0 -1
  175. package/dist/components/generated/CameraLayer.gen.js +0 -25
  176. package/dist/components/generated/CameraLayers.gen.d.ts +0 -1
  177. package/dist/components/generated/CameraLayers.gen.js +0 -25
  178. package/dist/components/generated/GlobalLight.gen.d.ts +0 -1
  179. package/dist/components/generated/GlobalLight.gen.js +0 -25
  180. package/dist/components/generated/GltfNode.gen.d.ts +0 -1
  181. package/dist/components/generated/GltfNode.gen.js +0 -25
  182. package/dist/components/generated/GltfNodeState.gen.d.ts +0 -1
  183. package/dist/components/generated/GltfNodeState.gen.js +0 -25
  184. package/dist/components/generated/TextureCamera.gen.d.ts +0 -1
  185. package/dist/components/generated/UiCanvas.gen.d.ts +0 -1
  186. package/dist/components/generated/UiCanvas.gen.js +0 -25
  187. package/dist/components/generated/UiScrollResult.gen.d.ts +0 -1
  188. package/dist/components/generated/UiScrollResult.gen.js +0 -25
  189. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
  190. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -69
  191. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
  192. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -126
  193. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
  194. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -104
  195. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
  196. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -50
  197. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
  198. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -61
  199. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
  200. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -41
  201. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
  202. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -59
  203. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
  204. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -191
  205. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
  206. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -60
  207. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
  208. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -42
  209. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +0 -10
  210. package/dist-cjs/components/extended/AvatarEquippedData.js +0 -19
  211. package/dist-cjs/components/extended/AvatarShape.d.ts +0 -10
  212. package/dist-cjs/components/extended/AvatarShape.js +0 -19
  213. package/dist-cjs/components/generated/AvatarMovement.gen.js +0 -28
  214. package/dist-cjs/components/generated/AvatarMovementInfo.gen.js +0 -28
  215. package/dist-cjs/components/generated/CameraLayer.gen.js +0 -28
  216. package/dist-cjs/components/generated/CameraLayers.gen.js +0 -28
  217. package/dist-cjs/components/generated/GlobalLight.gen.js +0 -28
  218. package/dist-cjs/components/generated/GltfNode.gen.js +0 -28
  219. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +0 -1
  220. package/dist-cjs/components/generated/GltfNodeState.gen.js +0 -28
  221. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +0 -1
  222. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +0 -1
  223. package/dist-cjs/components/generated/UiCanvas.gen.js +0 -28
  224. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +0 -1
  225. package/dist-cjs/components/generated/UiScrollResult.gen.js +0 -28
  226. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
  227. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -75
  228. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
  229. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -132
  230. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
  231. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -110
  232. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
  233. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -56
  234. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
  235. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -67
  236. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
  237. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -47
  238. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
  239. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -65
  240. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
  241. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -197
  242. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
  243. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -66
  244. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
  245. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -48
  246. /package/{dist-cjs/components/generated/CameraLayers.gen.d.ts → dist/components/generated/AudioAnalysis.gen.d.ts} +0 -0
  247. /package/{dist-cjs/components/generated/GlobalLight.gen.d.ts → dist/runtime/helpers/vectors.d.ts} +0 -0
  248. /package/{dist-cjs/components/generated/GltfNode.gen.d.ts → dist/systems/physics-force.d.ts} +0 -0
  249. /package/dist-cjs/components/generated/{AvatarMovement.gen.d.ts → AudioAnalysis.gen.d.ts} +0 -0
  250. /package/dist-cjs/{components/generated/AvatarMovementInfo.gen.d.ts → runtime/helpers/vectors.d.ts} +0 -0
  251. /package/dist-cjs/{components/generated/CameraLayer.gen.d.ts → systems/physics-force.d.ts} +0 -0
@@ -17,12 +17,7 @@ export type EventSystemOptions = {
17
17
  showFeedback?: boolean;
18
18
  showHighlight?: boolean;
19
19
  maxPlayerDistance?: number;
20
- };
21
- /**
22
- * @public
23
- */
24
- export type EventSystemOptionsCallback = EventSystemOptions & {
25
- cb: EventSystemCallback;
20
+ priority?: number;
26
21
  };
27
22
  export declare const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
28
23
  /**
@@ -55,35 +50,33 @@ export interface PointerEventsSystem {
55
50
  removeOnPointerHoverLeave(entity: Entity): void;
56
51
  /**
57
52
  * @public
58
- * Remove the callback for onPointerDrag event
53
+ * Remove the callback for onProximityDown event
59
54
  * @param entity - Entity where the callback was attached
60
55
  */
61
- removeOnPointerDrag(entity: Entity): void;
56
+ removeOnProximityDown(entity: Entity): void;
62
57
  /**
63
58
  * @public
64
- * Remove the callback for onPointerDragLocked event
59
+ * Remove the callback for onProximityUp event
65
60
  * @param entity - Entity where the callback was attached
66
61
  */
67
- removeOnPointerDragLocked(entity: Entity): void;
62
+ removeOnProximityUp(entity: Entity): void;
68
63
  /**
69
64
  * @public
70
- * Remove the callback for onPointerDragEnd event
65
+ * Remove the callback for onProximityEnter event
71
66
  * @param entity - Entity where the callback was attached
72
67
  */
73
- removeOnPointerDragEnd(entity: Entity): void;
68
+ removeOnProximityEnter(entity: Entity): void;
74
69
  /**
75
70
  * @public
76
- * Execute callbacks when the user presses one of the InputButtons pointing at the entity
77
- * @param pointerData - Entity to attach the callbacks, list of options to trigger Feedback, Button, and Callback
71
+ * Remove the callback for onProximityLeave event
72
+ * @param entity - Entity where the callback was attached
78
73
  */
79
- onPointerDown(pointerData: {
80
- entity: Entity;
81
- optsList: EventSystemOptionsCallback[];
82
- }): void;
74
+ removeOnProximityLeave(entity: Entity): void;
83
75
  /**
84
76
  * @public
85
77
  * Execute callback when the user press the InputButton pointing at the entity
86
78
  * @param pointerData - Entity to attach the callback, Opts to trigger Feedback and Button
79
+ * @param cb - Function to execute when click fires
87
80
  */
88
81
  onPointerDown(pointerData: {
89
82
  entity: Entity;
@@ -96,15 +89,6 @@ export interface PointerEventsSystem {
96
89
  * @param opts - Opts to trigger Feedback and Button
97
90
  */
98
91
  onPointerDown(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void;
99
- /**
100
- * @public
101
- * Execute callbacks when the user releases one of the InputButtons pointing at the entity
102
- * @param pointerData - Entity to attach the callbacks, list of options to trigger Feedback, Button, and Callback
103
- */
104
- onPointerUp(pointerData: {
105
- entity: Entity;
106
- optsList: EventSystemOptionsCallback[];
107
- }): void;
108
92
  /**
109
93
  * @public
110
94
  * Execute callback when the user releases the InputButton pointing at the entity
@@ -144,59 +128,41 @@ export interface PointerEventsSystem {
144
128
  }, cb: EventSystemCallback): void;
145
129
  /**
146
130
  * @public
147
- * Execute callbacks when the user drags the pointer from inside the entity
148
- * @param pointerData - Entity to attach the callbacks, list of options to trigger Feedback, Button, and Callback
149
- */
150
- onPointerDrag(pointerData: {
151
- entity: Entity;
152
- optsList: EventSystemOptionsCallback[];
153
- }): void;
154
- /**
155
- * @public
156
- * Execute callback when the user clicks and drags the pointer from inside the entity
131
+ * Execute callback when the user presses the proximity button on the entity
157
132
  * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
158
133
  * @param cb - Function to execute when click fires
159
134
  */
160
- onPointerDrag(pointerData: {
135
+ onProximityDown(pointerData: {
161
136
  entity: Entity;
162
137
  opts?: Partial<EventSystemOptions>;
163
138
  }, cb: EventSystemCallback): void;
164
139
  /**
165
140
  * @public
166
- * Execute callbacks when the user drags the pointer from inside the entity, locking the cursor in place.
167
- * @param pointerData - Entity to attach the callbacks, list of options to trigger Feedback, Button, and Callback
168
- */
169
- onPointerDragLocked(pointerData: {
170
- entity: Entity;
171
- optsList: EventSystemOptionsCallback[];
172
- }): void;
173
- /**
174
- * @public
175
- * Execute callback when the user clicks and drags the pointer from inside the entity,
176
- * locking the cursor in place
141
+ * Execute callback when the user releases the proximity button on the entity
177
142
  * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
178
- * @param cb - Function to execute when click fires
143
+ * @param cb - Function to execute when event fires
179
144
  */
180
- onPointerDragLocked(pointerData: {
145
+ onProximityUp(pointerData: {
181
146
  entity: Entity;
182
147
  opts?: Partial<EventSystemOptions>;
183
148
  }, cb: EventSystemCallback): void;
184
149
  /**
185
150
  * @public
186
- * Execute callbacks when the user releases a button after a drag
187
- * @param pointerData - Entity to attach the callbacks, list of options to trigger Feedback, Button, and Callback
151
+ * Execute callback when the entity enters the proximity zone of the user
152
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153
+ * @param cb - Function to execute when event fires
188
154
  */
189
- onPointerDragEnd(pointerData: {
155
+ onProximityEnter(pointerData: {
190
156
  entity: Entity;
191
- optsList: EventSystemOptionsCallback[];
192
- }): void;
157
+ opts?: Partial<EventSystemOptions>;
158
+ }, cb: EventSystemCallback): void;
193
159
  /**
194
160
  * @public
195
- * Execute callback when the user releases the button after a drag
161
+ * Execute callback when the entity leaves the proximity zone of the user
196
162
  * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
197
- * @param cb - Function to execute when click fires
163
+ * @param cb - Function to execute when event fires
198
164
  */
199
- onPointerDragEnd(pointerData: {
165
+ onProximityLeave(pointerData: {
200
166
  entity: Entity;
201
167
  opts?: Partial<EventSystemOptions>;
202
168
  }, cb: EventSystemCallback): void;
@@ -45,15 +45,14 @@ function createPointerEventsSystem(engine, inputSystem) {
45
45
  EventType[EventType["Up"] = 2] = "Up";
46
46
  EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
47
47
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
48
- EventType[EventType["Drag"] = 5] = "Drag";
49
- EventType[EventType["DragLocked"] = 6] = "DragLocked";
50
- EventType[EventType["DragEnd"] = 7] = "DragEnd";
48
+ EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
49
+ EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
51
50
  })(EventType || (EventType = {}));
52
51
  const eventsMap = new Map();
53
52
  function getEvent(entity) {
54
53
  return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
55
54
  }
56
- function setPointerEvent(entity, type, opts) {
55
+ function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
57
56
  const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
58
57
  pointerEvent.pointerEvents.push({
59
58
  eventType: type,
@@ -63,15 +62,19 @@ function createPointerEventsSystem(engine, inputSystem) {
63
62
  showHighlight: opts.showHighlight,
64
63
  hoverText: opts.hoverText,
65
64
  maxDistance: opts.maxDistance,
66
- maxPlayerDistance: opts.maxPlayerDistance
67
- }
65
+ maxPlayerDistance: opts.maxPlayerDistance,
66
+ priority: opts.priority
67
+ },
68
+ interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
68
69
  });
69
70
  }
70
- function removePointerEvent(entity, type, button) {
71
+ function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
71
72
  const pointerEvent = PointerEvents.getMutableOrNull(entity);
72
73
  if (!pointerEvent)
73
74
  return;
74
- pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button && pointer.eventType === type));
75
+ pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
76
+ pointer.eventType === type &&
77
+ pointer.interactionType === interactionType));
75
78
  }
76
79
  function getPointerEvent(eventType) {
77
80
  if (eventType === EventType.Up) {
@@ -83,148 +86,117 @@ function createPointerEventsSystem(engine, inputSystem) {
83
86
  else if (eventType === EventType.HoverEnter) {
84
87
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
85
88
  }
86
- else if (eventType === EventType.Drag) {
87
- return 7 /* PointerEventType.PET_DRAG */;
88
- }
89
- else if (eventType === EventType.DragLocked) {
90
- return 6 /* PointerEventType.PET_DRAG_LOCKED */;
89
+ else if (eventType === EventType.ProximityEnter) {
90
+ return 4 /* PointerEventType.PET_PROXIMITY_ENTER */;
91
91
  }
92
- else if (eventType === EventType.DragEnd) {
93
- return 8 /* PointerEventType.PET_DRAG_END */;
92
+ else if (eventType === EventType.ProximityLeave) {
93
+ return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
94
94
  }
95
95
  return 1 /* PointerEventType.PET_DOWN */;
96
96
  }
97
- function getEventType(pet) {
98
- if (pet === 0 /* PointerEventType.PET_UP */) {
99
- return EventType.Up;
100
- }
101
- else if (pet === 2 /* PointerEventType.PET_HOVER_ENTER */) {
102
- return EventType.HoverEnter;
103
- }
104
- else if (pet === 3 /* PointerEventType.PET_HOVER_LEAVE */) {
105
- return EventType.HoverLeave;
106
- }
107
- else if (pet === 7 /* PointerEventType.PET_DRAG */) {
108
- return EventType.Drag;
109
- }
110
- else if (pet === 6 /* PointerEventType.PET_DRAG_LOCKED */) {
111
- return EventType.DragLocked;
112
- }
113
- else if (pet === 8 /* PointerEventType.PET_DRAG_END */) {
114
- return EventType.DragEnd;
115
- }
116
- else {
117
- return EventType.Down;
118
- }
119
- }
120
- function removeEvent(entity, type) {
97
+ function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
121
98
  const event = getEvent(entity);
122
- const pointerEventList = event.get(type);
123
- if (pointerEventList === undefined) {
124
- return;
125
- }
126
- for (const button of pointerEventList.keys()) {
127
- removePointerEvent(entity, getPointerEvent(type), button);
99
+ const pointerEvent = event.get(type);
100
+ if (pointerEvent?.opts.hoverText) {
101
+ removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
128
102
  }
129
103
  event.delete(type);
130
104
  }
131
105
  engine.addSystem(function EventSystem() {
132
- if (eventsMap.size === 0) {
133
- return;
134
- }
135
- for (const entity of eventsMap.keys()) {
106
+ for (const [entity, event] of eventsMap) {
136
107
  if (engine.getEntityState(entity) === entity_1.EntityState.Removed) {
137
108
  eventsMap.delete(entity);
138
- }
139
- }
140
- for (const command of inputSystem.getInputCommands()) {
141
- const entity = command.hit?.entityId;
142
- if (entity === undefined) {
143
- continue;
144
- }
145
- const entityMap = eventsMap.get(entity);
146
- if (entityMap === undefined) {
147
109
  continue;
148
110
  }
149
- const typeMap = entityMap.get(getEventType(command.state));
150
- if (typeMap) {
151
- const data = typeMap.get(command.button);
152
- if (data) {
153
- (0, invariant_1.checkNotThenable)(data.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
111
+ for (const [eventType, { cb, opts }] of event) {
112
+ if (eventType === EventType.Click) {
113
+ const command = inputSystem.getClick(opts.button, entity);
114
+ if (command)
115
+ (0, invariant_1.checkNotThenable)(cb(command.up), 'Click event returned a thenable. Only synchronous functions are allowed');
154
116
  }
155
- const anyData = typeMap.get(3 /* InputAction.IA_ANY */);
156
- if (anyData) {
157
- (0, invariant_1.checkNotThenable)(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
158
- }
159
- }
160
- // check clicks separately
161
- if (command.state === 0 /* PointerEventType.PET_UP */) {
162
- const clickMap = entityMap.get(EventType.Click);
163
- if (clickMap) {
164
- const data = clickMap.get(command.button);
165
- if (data && inputSystem.getClick(command.button, entity)) {
166
- (0, invariant_1.checkNotThenable)(data.cb(command), 'Click event returned a thenable. Only synchronous functions are allowed');
167
- }
168
- const anyData = clickMap.get(3 /* InputAction.IA_ANY */);
169
- if (anyData && inputSystem.getClick(command.button, entity)) {
170
- (0, invariant_1.checkNotThenable)(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
117
+ if (eventType === EventType.Down ||
118
+ eventType === EventType.Up ||
119
+ eventType === EventType.HoverEnter ||
120
+ eventType === EventType.HoverLeave ||
121
+ eventType === EventType.ProximityEnter ||
122
+ eventType === EventType.ProximityLeave) {
123
+ const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
124
+ if (command) {
125
+ (0, invariant_1.checkNotThenable)(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
171
126
  }
172
127
  }
173
128
  }
174
129
  }
175
130
  });
176
- // return a function with the correct event type.
177
- // we use onPointerDown as the "archetype" for the returned function, but it fits with
178
- // all the onPointer* declarations
179
- const onPointerFunction = (ty) => {
180
- return (arg0, arg1, arg2) => {
181
- let entity;
182
- let optsList;
183
- if (typeof arg0 === 'number') {
184
- // called as onPointerDown(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void
185
- entity = arg0;
186
- const cb = arg1;
187
- const opts = arg2;
188
- optsList = [{ cb, ...(0, exports.getDefaultOpts)(opts) }];
189
- }
190
- else if (typeof arg1 === 'function') {
191
- // called as onPointerDown(pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> }, cb: EventSystemCallback): void
192
- const { entity: e, opts } = arg0;
193
- const cb = arg1;
194
- entity = e;
195
- optsList = [{ cb, ...(0, exports.getDefaultOpts)(opts) }];
196
- }
197
- else {
198
- // called as onPointerDown(pointerData: { entity: Entity; optsList: EventSystemOptionsCallback[] }): void
199
- const { entity: e, optsList: o } = arg0;
200
- entity = e;
201
- optsList = o;
202
- }
203
- const previous = getEvent(entity).get(ty) ?? new Map();
204
- const callbacks = new Map();
205
- for (const opts of optsList) {
206
- const prevOpts = previous.get(opts.button);
207
- if (prevOpts !== undefined) {
208
- if (prevOpts.hoverText !== opts.hoverText ||
209
- prevOpts.maxDistance !== opts.maxDistance ||
210
- prevOpts.showFeedback !== opts.showFeedback ||
211
- prevOpts.showHighlight !== opts.showHighlight) {
212
- removePointerEvent(entity, getPointerEvent(ty), opts.button);
213
- setPointerEvent(entity, getPointerEvent(ty), opts);
214
- }
215
- }
216
- else {
217
- setPointerEvent(entity, getPointerEvent(ty), opts);
218
- }
219
- callbacks.set(opts.button, opts);
220
- }
221
- for (const button of previous.keys()) {
222
- if (!callbacks.has(button)) {
223
- removePointerEvent(entity, getPointerEvent(ty), button);
224
- }
225
- }
226
- getEvent(entity).set(ty, callbacks);
227
- };
131
+ const onPointerDown = (...args) => {
132
+ const [data, cb, maybeOpts] = args;
133
+ if (typeof data === 'number') {
134
+ return onPointerDown({ entity: data, opts: maybeOpts ?? {} }, cb);
135
+ }
136
+ const { entity, opts } = data;
137
+ const options = (0, exports.getDefaultOpts)(opts);
138
+ removeEvent(entity, EventType.Down);
139
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
140
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
141
+ };
142
+ const onPointerUp = (...args) => {
143
+ const [data, cb, maybeOpts] = args;
144
+ if (typeof data === 'number') {
145
+ return onPointerUp({ entity: data, opts: maybeOpts ?? {} }, cb);
146
+ }
147
+ const { entity, opts } = data;
148
+ const options = (0, exports.getDefaultOpts)(opts);
149
+ removeEvent(entity, EventType.Up);
150
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
151
+ setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options);
152
+ };
153
+ const onPointerHoverEnter = (...args) => {
154
+ const [data, cb] = args;
155
+ const { entity, opts } = data;
156
+ const options = (0, exports.getDefaultOpts)(opts);
157
+ removeEvent(entity, EventType.HoverEnter);
158
+ getEvent(entity).set(EventType.HoverEnter, { cb, opts: options });
159
+ setPointerEvent(entity, 2 /* PointerEventType.PET_HOVER_ENTER */, options);
160
+ };
161
+ const onPointerHoverLeave = (...args) => {
162
+ const [data, cb] = args;
163
+ const { entity, opts } = data;
164
+ const options = (0, exports.getDefaultOpts)(opts);
165
+ removeEvent(entity, EventType.HoverLeave);
166
+ getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
167
+ setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
168
+ };
169
+ const onProximityDown = (...args) => {
170
+ const [data, cb] = args;
171
+ const { entity, opts } = data;
172
+ const options = (0, exports.getDefaultOpts)(opts);
173
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
174
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
175
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
176
+ };
177
+ const onProximityUp = (...args) => {
178
+ const [data, cb] = args;
179
+ const { entity, opts } = data;
180
+ const options = (0, exports.getDefaultOpts)(opts);
181
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
182
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
183
+ setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
184
+ };
185
+ const onProximityEnter = (...args) => {
186
+ const [data, cb] = args;
187
+ const { entity, opts } = data;
188
+ const options = (0, exports.getDefaultOpts)(opts);
189
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
190
+ getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
191
+ setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
192
+ };
193
+ const onProximityLeave = (...args) => {
194
+ const [data, cb] = args;
195
+ const { entity, opts } = data;
196
+ const options = (0, exports.getDefaultOpts)(opts);
197
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
198
+ getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
199
+ setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
228
200
  };
229
201
  return {
230
202
  removeOnClick(entity) {
@@ -242,23 +214,35 @@ function createPointerEventsSystem(engine, inputSystem) {
242
214
  removeOnPointerHoverLeave(entity) {
243
215
  removeEvent(entity, EventType.HoverLeave);
244
216
  },
245
- removeOnPointerDrag(entity) {
246
- removeEvent(entity, EventType.Drag);
217
+ removeOnProximityDown(entity) {
218
+ removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
219
+ },
220
+ removeOnProximityUp(entity) {
221
+ removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
247
222
  },
248
- removeOnPointerDragLocked(entity) {
249
- removeEvent(entity, EventType.DragLocked);
223
+ removeOnProximityEnter(entity) {
224
+ removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
250
225
  },
251
- removeOnPointerDragEnd(entity) {
252
- removeEvent(entity, EventType.DragEnd);
226
+ removeOnProximityLeave(entity) {
227
+ removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
228
+ },
229
+ onClick(value, cb) {
230
+ const { entity } = value;
231
+ const options = (0, exports.getDefaultOpts)(value.opts);
232
+ // Clear previous event with over feedback included
233
+ removeEvent(entity, EventType.Click);
234
+ // Set new event
235
+ getEvent(entity).set(EventType.Click, { cb, opts: options });
236
+ setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
253
237
  },
254
- onClick: onPointerFunction(EventType.Click),
255
- onPointerDown: onPointerFunction(EventType.Down),
256
- onPointerUp: onPointerFunction(EventType.Up),
257
- onPointerHoverEnter: onPointerFunction(EventType.HoverEnter),
258
- onPointerHoverLeave: onPointerFunction(EventType.HoverLeave),
259
- onPointerDrag: onPointerFunction(EventType.Drag),
260
- onPointerDragLocked: onPointerFunction(EventType.DragLocked),
261
- onPointerDragEnd: onPointerFunction(EventType.DragEnd)
238
+ onPointerDown,
239
+ onPointerUp,
240
+ onPointerHoverEnter,
241
+ onPointerHoverLeave,
242
+ onProximityDown,
243
+ onProximityUp,
244
+ onProximityEnter,
245
+ onProximityLeave
262
246
  };
263
247
  }
264
248
  exports.createPointerEventsSystem = createPointerEventsSystem;
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.createPhysicsForceHelper = void 0;
27
+ const components = __importStar(require("../components"));
28
+ const helpers_1 = require("../runtime/helpers");
29
+ const physics_impulse_1 = require("./physics-impulse");
30
+ /** @internal */
31
+ function createPhysicsForceHelper(engine) {
32
+ const PhysicsCombinedForce = components.PhysicsCombinedForce(engine);
33
+ const Transform = components.Transform(engine);
34
+ const timers = (0, helpers_1.createTimers)(engine);
35
+ const durationTimers = new Map();
36
+ // Key = source entity producing the force (not the target); all forces target PlayerEntity.
37
+ const forceSources = new Map();
38
+ const repulsionSources = new Map();
39
+ let lastWrittenForceVector = null;
40
+ function recalcForce() {
41
+ if (forceSources.size === 0) {
42
+ if (PhysicsCombinedForce.has(engine.PlayerEntity)) {
43
+ PhysicsCombinedForce.deleteFrom(engine.PlayerEntity);
44
+ }
45
+ lastWrittenForceVector = null;
46
+ return;
47
+ }
48
+ const current = PhysicsCombinedForce.getOrNull(engine.PlayerEntity);
49
+ if (current && lastWrittenForceVector && current.vector) {
50
+ if (!helpers_1.Vector3.equals(current.vector, lastWrittenForceVector)) {
51
+ console.error('PBPhysicsCombinedForce was modified externally.', 'Expected:', lastWrittenForceVector, 'Found:', current.vector, '-- overwriting with local state.');
52
+ }
53
+ }
54
+ let sum = { x: 0, y: 0, z: 0 };
55
+ for (const v of forceSources.values()) {
56
+ sum = helpers_1.Vector3.add(sum, v);
57
+ }
58
+ PhysicsCombinedForce.createOrReplace(engine.PlayerEntity, { vector: sum });
59
+ lastWrittenForceVector = sum;
60
+ }
61
+ function applyForceToPlayer(source, vector, magnitude) {
62
+ let finalVector;
63
+ if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
64
+ return;
65
+ if (typeof magnitude === 'number') {
66
+ finalVector = helpers_1.Vector3.scale(helpers_1.Vector3.normalize(vector), magnitude);
67
+ }
68
+ else {
69
+ finalVector = vector;
70
+ }
71
+ forceSources.set(source, finalVector);
72
+ recalcForce();
73
+ }
74
+ function removeForceFromPlayer(source) {
75
+ repulsionSources.delete(source);
76
+ const timerId = durationTimers.get(source);
77
+ if (timerId !== undefined) {
78
+ timers.clearTimeout(timerId);
79
+ durationTimers.delete(source);
80
+ }
81
+ if (!forceSources.has(source))
82
+ return;
83
+ forceSources.delete(source);
84
+ recalcForce();
85
+ }
86
+ function scheduleForceDuration(source, seconds) {
87
+ const existing = durationTimers.get(source);
88
+ if (existing !== undefined) {
89
+ timers.clearTimeout(existing);
90
+ }
91
+ const timerId = timers.setTimeout(() => {
92
+ durationTimers.delete(source);
93
+ removeForceFromPlayer(source);
94
+ }, seconds * 1000);
95
+ durationTimers.set(source, timerId);
96
+ }
97
+ function applyForceToPlayerForDuration(source, duration, vector, magnitude) {
98
+ applyForceToPlayer(source, vector, magnitude);
99
+ scheduleForceDuration(source, duration);
100
+ }
101
+ function computeRepulsionVector(fromPosition, magnitude, radius, falloff) {
102
+ const diff = helpers_1.Vector3.subtract(Transform.get(engine.PlayerEntity).position, fromPosition);
103
+ if (helpers_1.Vector3.equalsToFloats(diff, 0, 0, 0))
104
+ return { x: 0, y: magnitude, z: 0 };
105
+ // Fast path: default params — no need to compute distance
106
+ if (radius === Infinity && falloff === physics_impulse_1.KnockbackFalloff.CONSTANT) {
107
+ return helpers_1.Vector3.scale(helpers_1.Vector3.normalize(diff), magnitude);
108
+ }
109
+ const distance = helpers_1.Vector3.length(diff);
110
+ if (distance > radius)
111
+ return null;
112
+ let effectiveMagnitude;
113
+ switch (falloff) {
114
+ case physics_impulse_1.KnockbackFalloff.LINEAR:
115
+ effectiveMagnitude = magnitude * (1 - distance / radius);
116
+ break;
117
+ case physics_impulse_1.KnockbackFalloff.INVERSE_SQUARE:
118
+ effectiveMagnitude = magnitude / (distance * distance + 1);
119
+ break;
120
+ case physics_impulse_1.KnockbackFalloff.CONSTANT:
121
+ default:
122
+ effectiveMagnitude = magnitude;
123
+ break;
124
+ }
125
+ if (effectiveMagnitude === 0)
126
+ return null;
127
+ // normalize(diff) * effectiveMagnitude in one step
128
+ return helpers_1.Vector3.scale(diff, effectiveMagnitude / distance);
129
+ }
130
+ function applyRepulsionForceToPlayer(source, fromPosition, magnitude, radius = Infinity, falloff = physics_impulse_1.KnockbackFalloff.CONSTANT) {
131
+ repulsionSources.set(source, { fromPosition, magnitude, radius, falloff });
132
+ const vector = computeRepulsionVector(fromPosition, magnitude, radius, falloff);
133
+ if (vector) {
134
+ forceSources.set(source, vector);
135
+ }
136
+ else {
137
+ forceSources.delete(source);
138
+ }
139
+ recalcForce();
140
+ }
141
+ // Background system: recalculate repulsion vectors and clean up stale forces every tick.
142
+ // Stale forces can appear when CRDT sync from another client writes PhysicsCombinedForce
143
+ // externally (entity-1 ambiguity: each client interprets entity 1 as its own player).
144
+ engine.addSystem(() => {
145
+ // Repulsion forces need per-tick direction recalculation as the player moves
146
+ if (repulsionSources.size > 0) {
147
+ for (const [source, { fromPosition, magnitude, radius, falloff }] of repulsionSources) {
148
+ const vector = computeRepulsionVector(fromPosition, magnitude, radius, falloff);
149
+ if (vector) {
150
+ forceSources.set(source, vector);
151
+ }
152
+ else {
153
+ forceSources.delete(source);
154
+ }
155
+ }
156
+ recalcForce();
157
+ return;
158
+ }
159
+ // No local sources — clean up any externally-created component (e.g. from CRDT sync)
160
+ if (forceSources.size === 0 && PhysicsCombinedForce.has(engine.PlayerEntity)) {
161
+ PhysicsCombinedForce.deleteFrom(engine.PlayerEntity);
162
+ lastWrittenForceVector = null;
163
+ }
164
+ });
165
+ return { applyForceToPlayer, removeForceFromPlayer, applyForceToPlayerForDuration, applyRepulsionForceToPlayer };
166
+ }
167
+ exports.createPhysicsForceHelper = createPhysicsForceHelper;