@dcl/ecs 7.22.6-25007982108.commit-83012ab → 7.22.6-25321038582.commit-63ddb3f

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 (279) 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/component-names.gen.js +0 -11
  10. package/dist/components/generated/global.gen.d.ts +0 -22
  11. package/dist/components/generated/global.gen.js +0 -11
  12. package/dist/components/generated/index.gen.d.ts +0 -44
  13. package/dist/components/generated/index.gen.js +0 -55
  14. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
  15. package/dist/components/generated/pb/decentraland/common/texture.gen.js +0 -65
  16. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
  17. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
  18. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
  19. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +1 -151
  20. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
  21. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
  22. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
  23. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +1 -119
  24. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -6
  25. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +0 -4
  26. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
  27. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
  28. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
  29. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +1 -57
  30. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
  31. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +0 -56
  32. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
  33. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +0 -56
  34. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
  35. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +42 -4
  36. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
  37. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
  38. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
  39. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +0 -30
  40. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
  41. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
  42. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
  43. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
  44. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
  45. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +0 -90
  46. package/dist/components/generated/types.gen.d.ts +1 -0
  47. package/dist/components/generated/types.gen.js +1 -0
  48. package/dist/components/index.d.ts +14 -11
  49. package/dist/components/index.js +13 -13
  50. package/dist/components/manual/CreatedBy.d.ts +9 -0
  51. package/dist/components/manual/CreatedBy.js +8 -0
  52. package/dist/components/manual/Transform.d.ts +22 -0
  53. package/dist/components/manual/Transform.js +11 -3
  54. package/dist/components/types.d.ts +3 -3
  55. package/dist/engine/component.d.ts +52 -1
  56. package/dist/engine/entity.js +4 -2
  57. package/dist/engine/grow-only-value-set-component-definition.js +46 -3
  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 +5 -3
  61. package/dist/engine/lww-element-set-component-definition.js +87 -18
  62. package/dist/index.d.ts +5 -2
  63. package/dist/index.js +5 -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/serialization/crdt/authoritativePutComponent.d.ts +15 -0
  74. package/dist/serialization/crdt/authoritativePutComponent.js +47 -0
  75. package/dist/serialization/crdt/index.d.ts +1 -0
  76. package/dist/serialization/crdt/index.js +1 -0
  77. package/dist/serialization/crdt/types.d.ts +25 -3
  78. package/dist/serialization/crdt/types.js +3 -1
  79. package/dist/systems/crdt/index.d.ts +0 -1
  80. package/dist/systems/crdt/index.js +55 -146
  81. package/dist/systems/events.d.ts +25 -59
  82. package/dist/systems/events.js +129 -145
  83. package/dist/systems/physics-force.js +140 -0
  84. package/dist/systems/physics-impulse.d.ts +12 -0
  85. package/dist/systems/physics-impulse.js +85 -0
  86. package/dist/systems/physics.d.ts +77 -0
  87. package/dist/systems/physics.js +18 -0
  88. package/dist/systems/raycast.d.ts +1 -3
  89. package/dist/systems/raycast.js +0 -2
  90. package/dist-cjs/components/extended/MeshCollider.d.ts +0 -8
  91. package/dist-cjs/components/extended/MeshCollider.js +0 -6
  92. package/dist-cjs/components/extended/MeshRenderer.d.ts +0 -8
  93. package/dist-cjs/components/extended/MeshRenderer.js +0 -5
  94. package/dist-cjs/components/extended/ParticleSystem.d.ts +24 -0
  95. package/dist-cjs/components/extended/ParticleSystem.js +28 -0
  96. package/dist-cjs/components/extended/Tween.d.ts +48 -1
  97. package/dist-cjs/components/extended/Tween.js +66 -0
  98. package/dist-cjs/components/generated/component-names.gen.js +0 -11
  99. package/dist-cjs/components/generated/global.gen.d.ts +0 -22
  100. package/dist-cjs/components/generated/global.gen.js +2 -13
  101. package/dist-cjs/components/generated/index.gen.d.ts +0 -44
  102. package/dist-cjs/components/generated/index.gen.js +2 -68
  103. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +0 -20
  104. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +1 -66
  105. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +0 -2
  106. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +1 -10
  107. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +0 -43
  108. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +2 -152
  109. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +0 -2
  110. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +0 -10
  111. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +1 -37
  112. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +2 -120
  113. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +2 -6
  114. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +0 -4
  115. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +0 -19
  116. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +1 -46
  117. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +0 -22
  118. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +2 -58
  119. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +0 -20
  120. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +1 -57
  121. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +3 -21
  122. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +1 -57
  123. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +14 -1
  124. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +43 -5
  125. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +2 -8
  126. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +0 -3
  127. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +0 -13
  128. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +1 -31
  129. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +0 -2
  130. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +0 -10
  131. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +0 -4
  132. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +0 -20
  133. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +0 -35
  134. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +1 -91
  135. package/dist-cjs/components/generated/types.gen.d.ts +1 -0
  136. package/dist-cjs/components/generated/types.gen.js +3 -0
  137. package/dist-cjs/components/index.d.ts +14 -11
  138. package/dist-cjs/components/index.js +17 -17
  139. package/dist-cjs/components/manual/CreatedBy.d.ts +9 -0
  140. package/dist-cjs/components/manual/CreatedBy.js +10 -0
  141. package/dist-cjs/components/manual/Transform.d.ts +22 -0
  142. package/dist-cjs/components/manual/Transform.js +34 -3
  143. package/dist-cjs/components/types.d.ts +3 -3
  144. package/dist-cjs/engine/component.d.ts +52 -1
  145. package/dist-cjs/engine/entity.js +4 -2
  146. package/dist-cjs/engine/grow-only-value-set-component-definition.js +45 -2
  147. package/dist-cjs/engine/input.d.ts +0 -6
  148. package/dist-cjs/engine/input.js +4 -9
  149. package/dist-cjs/engine/lww-element-set-component-definition.d.ts +5 -3
  150. package/dist-cjs/engine/lww-element-set-component-definition.js +90 -19
  151. package/dist-cjs/index.d.ts +5 -2
  152. package/dist-cjs/index.js +6 -2
  153. package/dist-cjs/runtime/globals.d.ts +1 -2
  154. package/dist-cjs/runtime/globals.js +1 -2
  155. package/dist-cjs/runtime/helpers/index.d.ts +1 -0
  156. package/dist-cjs/runtime/helpers/index.js +1 -0
  157. package/dist-cjs/runtime/helpers/tree.d.ts +6 -0
  158. package/dist-cjs/runtime/helpers/tree.js +3 -2
  159. package/dist-cjs/runtime/helpers/vectors.js +39 -0
  160. package/dist-cjs/runtime/initialization/index.d.ts +7 -0
  161. package/dist-cjs/runtime/initialization/index.js +7 -1
  162. package/dist-cjs/serialization/crdt/authoritativePutComponent.d.ts +15 -0
  163. package/dist-cjs/serialization/crdt/authoritativePutComponent.js +50 -0
  164. package/dist-cjs/serialization/crdt/index.d.ts +1 -0
  165. package/dist-cjs/serialization/crdt/index.js +1 -0
  166. package/dist-cjs/serialization/crdt/types.d.ts +25 -3
  167. package/dist-cjs/serialization/crdt/types.js +3 -1
  168. package/dist-cjs/systems/crdt/index.d.ts +0 -1
  169. package/dist-cjs/systems/crdt/index.js +55 -169
  170. package/dist-cjs/systems/events.d.ts +25 -59
  171. package/dist-cjs/systems/events.js +129 -145
  172. package/dist-cjs/systems/physics-force.js +167 -0
  173. package/dist-cjs/systems/physics-impulse.d.ts +12 -0
  174. package/dist-cjs/systems/physics-impulse.js +112 -0
  175. package/dist-cjs/systems/physics.d.ts +77 -0
  176. package/dist-cjs/systems/physics.js +23 -0
  177. package/dist-cjs/systems/raycast.d.ts +1 -3
  178. package/dist-cjs/systems/raycast.js +0 -2
  179. package/package.json +3 -2
  180. package/dist/components/extended/AvatarEquippedData.d.ts +0 -10
  181. package/dist/components/extended/AvatarEquippedData.js +0 -15
  182. package/dist/components/extended/AvatarShape.d.ts +0 -10
  183. package/dist/components/extended/AvatarShape.js +0 -15
  184. package/dist/components/generated/AvatarLocomotionSettings.gen.d.ts +0 -1
  185. package/dist/components/generated/AvatarLocomotionSettings.gen.js +0 -25
  186. package/dist/components/generated/AvatarMovement.gen.d.ts +0 -1
  187. package/dist/components/generated/AvatarMovement.gen.js +0 -25
  188. package/dist/components/generated/AvatarMovementInfo.gen.d.ts +0 -1
  189. package/dist/components/generated/AvatarMovementInfo.gen.js +0 -25
  190. package/dist/components/generated/CameraLayer.gen.d.ts +0 -1
  191. package/dist/components/generated/CameraLayer.gen.js +0 -25
  192. package/dist/components/generated/CameraLayers.gen.d.ts +0 -1
  193. package/dist/components/generated/CameraLayers.gen.js +0 -25
  194. package/dist/components/generated/GlobalLight.gen.d.ts +0 -1
  195. package/dist/components/generated/GlobalLight.gen.js +0 -25
  196. package/dist/components/generated/GltfNode.gen.d.ts +0 -1
  197. package/dist/components/generated/GltfNode.gen.js +0 -25
  198. package/dist/components/generated/GltfNodeState.gen.d.ts +0 -1
  199. package/dist/components/generated/GltfNodeState.gen.js +0 -25
  200. package/dist/components/generated/TextureCamera.gen.d.ts +0 -1
  201. package/dist/components/generated/TextureCamera.gen.js +0 -25
  202. package/dist/components/generated/UiCanvas.gen.d.ts +0 -1
  203. package/dist/components/generated/UiCanvas.gen.js +0 -25
  204. package/dist/components/generated/UiScrollResult.gen.d.ts +0 -1
  205. package/dist/components/generated/UiScrollResult.gen.js +0 -25
  206. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +0 -29
  207. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +0 -93
  208. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
  209. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -69
  210. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
  211. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -126
  212. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
  213. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -104
  214. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
  215. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -50
  216. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
  217. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -61
  218. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
  219. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -41
  220. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
  221. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -59
  222. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
  223. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -191
  224. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
  225. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -60
  226. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
  227. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -42
  228. package/dist/serialization/crdt/network/utils.d.ts +0 -9
  229. package/dist/serialization/crdt/network/utils.js +0 -60
  230. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +0 -10
  231. package/dist-cjs/components/extended/AvatarEquippedData.js +0 -19
  232. package/dist-cjs/components/extended/AvatarShape.d.ts +0 -10
  233. package/dist-cjs/components/extended/AvatarShape.js +0 -19
  234. package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.js +0 -28
  235. package/dist-cjs/components/generated/AvatarMovement.gen.js +0 -28
  236. package/dist-cjs/components/generated/AvatarMovementInfo.gen.js +0 -28
  237. package/dist-cjs/components/generated/CameraLayer.gen.js +0 -28
  238. package/dist-cjs/components/generated/CameraLayers.gen.d.ts +0 -1
  239. package/dist-cjs/components/generated/CameraLayers.gen.js +0 -28
  240. package/dist-cjs/components/generated/GlobalLight.gen.d.ts +0 -1
  241. package/dist-cjs/components/generated/GlobalLight.gen.js +0 -28
  242. package/dist-cjs/components/generated/GltfNode.gen.d.ts +0 -1
  243. package/dist-cjs/components/generated/GltfNode.gen.js +0 -28
  244. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +0 -1
  245. package/dist-cjs/components/generated/GltfNodeState.gen.js +0 -28
  246. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +0 -1
  247. package/dist-cjs/components/generated/TextureCamera.gen.js +0 -28
  248. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +0 -1
  249. package/dist-cjs/components/generated/UiCanvas.gen.js +0 -28
  250. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +0 -1
  251. package/dist-cjs/components/generated/UiScrollResult.gen.js +0 -28
  252. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +0 -29
  253. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +0 -99
  254. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +0 -20
  255. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +0 -75
  256. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +0 -32
  257. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +0 -132
  258. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +0 -30
  259. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +0 -110
  260. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +0 -14
  261. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +0 -56
  262. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +0 -34
  263. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +0 -67
  264. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +0 -50
  265. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +0 -47
  266. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +0 -27
  267. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +0 -65
  268. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +0 -74
  269. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +0 -197
  270. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +0 -19
  271. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +0 -66
  272. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +0 -15
  273. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +0 -48
  274. package/dist-cjs/serialization/crdt/network/utils.d.ts +0 -9
  275. package/dist-cjs/serialization/crdt/network/utils.js +0 -67
  276. /package/{dist-cjs/components/generated/AvatarMovementInfo.gen.d.ts → dist/runtime/helpers/vectors.d.ts} +0 -0
  277. /package/{dist-cjs/components/generated/CameraLayer.gen.d.ts → dist/systems/physics-force.d.ts} +0 -0
  278. /package/dist-cjs/{components/generated/AvatarLocomotionSettings.gen.d.ts → runtime/helpers/vectors.d.ts} +0 -0
  279. /package/dist-cjs/{components/generated/AvatarMovement.gen.d.ts → systems/physics-force.d.ts} +0 -0
@@ -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;
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @public
3
+ * Falloff mode for knockback force over distance.
4
+ */
5
+ export declare enum KnockbackFalloff {
6
+ /** Same force at any distance within radius */
7
+ CONSTANT = 0,
8
+ /** Smooth linear decrease to 0 at radius edge: F = magnitude * (1 - distance / radius) */
9
+ LINEAR = 1,
10
+ /** Sharp drop-off, physically realistic: F = magnitude / (distance^2 + 1) */
11
+ INVERSE_SQUARE = 2
12
+ }
@@ -0,0 +1,112 @@
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.createPhysicsImpulseHelper = exports.KnockbackFalloff = void 0;
27
+ const components = __importStar(require("../components"));
28
+ const helpers_1 = require("../runtime/helpers");
29
+ /**
30
+ * @public
31
+ * Falloff mode for knockback force over distance.
32
+ */
33
+ var KnockbackFalloff;
34
+ (function (KnockbackFalloff) {
35
+ /** Same force at any distance within radius */
36
+ KnockbackFalloff[KnockbackFalloff["CONSTANT"] = 0] = "CONSTANT";
37
+ /** Smooth linear decrease to 0 at radius edge: F = magnitude * (1 - distance / radius) */
38
+ KnockbackFalloff[KnockbackFalloff["LINEAR"] = 1] = "LINEAR";
39
+ /** Sharp drop-off, physically realistic: F = magnitude / (distance^2 + 1) */
40
+ KnockbackFalloff[KnockbackFalloff["INVERSE_SQUARE"] = 2] = "INVERSE_SQUARE";
41
+ })(KnockbackFalloff = exports.KnockbackFalloff || (exports.KnockbackFalloff = {}));
42
+ /** @internal */
43
+ function createPhysicsImpulseHelper(engine) {
44
+ const PhysicsCombinedImpulse = components.PhysicsCombinedImpulse(engine);
45
+ const Transform = components.Transform(engine);
46
+ const EngineInfo = components.EngineInfo(engine);
47
+ let impulseEventId = 0;
48
+ let lastWrittenEventId = 0;
49
+ let lastWrittenTick = -1;
50
+ function applyImpulseToPlayer(vector, magnitude) {
51
+ let finalVector;
52
+ if (typeof magnitude === 'number') {
53
+ if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
54
+ return;
55
+ finalVector = helpers_1.Vector3.scale(helpers_1.Vector3.normalize(vector), magnitude);
56
+ }
57
+ else {
58
+ if (helpers_1.Vector3.equalsToFloats(vector, 0, 0, 0))
59
+ return;
60
+ finalVector = vector;
61
+ }
62
+ const currentTick = EngineInfo.getOrNull(engine.RootEntity)?.tickNumber ?? 0;
63
+ const existing = PhysicsCombinedImpulse.getOrNull(engine.PlayerEntity);
64
+ if (existing && existing.eventId !== lastWrittenEventId && lastWrittenEventId !== 0) {
65
+ throw new Error('PBPhysicsCombinedImpulse was modified outside Physics helper. ' +
66
+ 'Do not mix direct component access with Physics.applyImpulseToPlayer().');
67
+ }
68
+ if (lastWrittenTick === currentTick && existing) {
69
+ finalVector = helpers_1.Vector3.add(existing.vector ?? { x: 0, y: 0, z: 0 }, finalVector);
70
+ }
71
+ else {
72
+ lastWrittenEventId = ++impulseEventId;
73
+ }
74
+ lastWrittenTick = currentTick;
75
+ PhysicsCombinedImpulse.createOrReplace(engine.PlayerEntity, {
76
+ vector: finalVector,
77
+ eventId: lastWrittenEventId
78
+ });
79
+ }
80
+ function applyKnockbackToPlayer(fromPosition, magnitude, radius = Infinity, falloff = KnockbackFalloff.CONSTANT) {
81
+ const diff = helpers_1.Vector3.subtract(Transform.get(engine.PlayerEntity).position, fromPosition);
82
+ if (helpers_1.Vector3.equalsToFloats(diff, 0, 0, 0)) {
83
+ applyImpulseToPlayer({ x: 0, y: magnitude, z: 0 });
84
+ return;
85
+ }
86
+ // Fast path: default params — no need to compute distance
87
+ if (radius === Infinity && falloff === KnockbackFalloff.CONSTANT) {
88
+ applyImpulseToPlayer(helpers_1.Vector3.scale(helpers_1.Vector3.normalize(diff), magnitude));
89
+ return;
90
+ }
91
+ const distance = helpers_1.Vector3.length(diff);
92
+ if (distance > radius)
93
+ return;
94
+ let effectiveMagnitude;
95
+ switch (falloff) {
96
+ case KnockbackFalloff.LINEAR:
97
+ effectiveMagnitude = magnitude * (1 - distance / radius);
98
+ break;
99
+ case KnockbackFalloff.INVERSE_SQUARE:
100
+ effectiveMagnitude = magnitude / (distance * distance + 1);
101
+ break;
102
+ case KnockbackFalloff.CONSTANT:
103
+ default:
104
+ effectiveMagnitude = magnitude;
105
+ break;
106
+ }
107
+ // normalize(diff) * effectiveMagnitude in one step
108
+ applyImpulseToPlayer(helpers_1.Vector3.scale(diff, effectiveMagnitude / distance));
109
+ }
110
+ return { applyImpulseToPlayer, applyKnockbackToPlayer };
111
+ }
112
+ exports.createPhysicsImpulseHelper = createPhysicsImpulseHelper;