@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
@@ -30,7 +30,7 @@ export function createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, d
30
30
  }
31
31
  };
32
32
  }
33
- export function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
33
+ export function createUpdateLwwFromCrdt(componentId, timestamps, schema, data, lastSentData) {
34
34
  /**
35
35
  * Process the received message only if the lamport number recieved is higher
36
36
  * than the stored one. If its lower, we spread it to the network to correct the peer.
@@ -96,9 +96,11 @@ export function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
96
96
  if (msg.type === CrdtMessageType.PUT_COMPONENT || msg.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {
97
97
  const buf = new ReadWriteByteBuffer(msg.data);
98
98
  data.set(entity, schema.deserialize(buf));
99
+ lastSentData.set(entity, new Uint8Array(msg.data));
99
100
  }
100
101
  else {
101
102
  data.delete(entity);
103
+ lastSentData.delete(entity);
102
104
  }
103
105
  return [null, data.get(entity)];
104
106
  }
@@ -134,23 +136,34 @@ export function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
134
136
  return [null, data.get(entity)];
135
137
  };
136
138
  }
137
- export function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data) {
139
+ export function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data, lastSentData) {
138
140
  return function* () {
141
+ const writeBuffer = new ReadWriteByteBuffer();
139
142
  for (const entity of dirtyIterator) {
140
- const newTimestamp = incrementTimestamp(entity, timestamps);
141
143
  if (data.has(entity)) {
142
- const writeBuffer = new ReadWriteByteBuffer();
144
+ writeBuffer.resetBuffer();
143
145
  schema.serialize(data.get(entity), writeBuffer);
146
+ // Compare against last-sent snapshot using the zero-copy subarray view.
147
+ // Only allocate a copy when bytes actually differ.
148
+ const previousBytes = lastSentData.get(entity);
149
+ if (previousBytes && dataCompare(writeBuffer.toBinary(), previousBytes) === 0) {
150
+ continue;
151
+ }
152
+ const currentBytes = writeBuffer.toCopiedBinary();
153
+ const newTimestamp = incrementTimestamp(entity, timestamps);
154
+ lastSentData.set(entity, currentBytes);
144
155
  const msg = {
145
156
  type: CrdtMessageType.PUT_COMPONENT,
146
157
  componentId,
147
158
  entityId: entity,
148
- data: writeBuffer.toBinary(),
159
+ data: currentBytes,
149
160
  timestamp: newTimestamp
150
161
  };
151
162
  yield msg;
152
163
  }
153
164
  else {
165
+ lastSentData.delete(entity);
166
+ const newTimestamp = incrementTimestamp(entity, timestamps);
154
167
  const msg = {
155
168
  type: CrdtMessageType.DELETE_COMPONENT,
156
169
  componentId,
@@ -170,6 +183,7 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
170
183
  const data = new Map();
171
184
  const dirtyIterator = new Set();
172
185
  const timestamps = new Map();
186
+ const lastSentData = new Map();
173
187
  const onChangeCallbacks = new Map();
174
188
  return {
175
189
  get componentId() {
@@ -191,12 +205,14 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
191
205
  if (data.delete(entity) && markAsDirty) {
192
206
  dirtyIterator.add(entity);
193
207
  }
208
+ lastSentData.delete(entity);
194
209
  return component || null;
195
210
  },
196
211
  entityDeleted(entity, markAsDirty) {
197
212
  if (data.delete(entity) && markAsDirty) {
198
213
  dirtyIterator.add(entity);
199
214
  }
215
+ lastSentData.delete(entity);
200
216
  },
201
217
  getOrNull(entity) {
202
218
  const component = data.get(entity);
@@ -223,6 +239,7 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
223
239
  const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;
224
240
  data.set(entity, usedValue);
225
241
  dirtyIterator.add(entity);
242
+ lastSentData.delete(entity);
226
243
  return usedValue;
227
244
  },
228
245
  getMutableOrNull(entity) {
@@ -260,8 +277,8 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
260
277
  yield entity;
261
278
  }
262
279
  },
263
- getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data),
264
- updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data),
280
+ getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data, lastSentData),
281
+ updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data, lastSentData),
265
282
  dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data),
266
283
  onChange(entity, cb) {
267
284
  const cbs = onChangeCallbacks.get(entity) ?? [];
package/dist/index.d.ts CHANGED
@@ -1,9 +1,9 @@
1
1
  export * from './engine';
2
2
  export * from './schemas';
3
+ export * from './runtime/globals';
3
4
  export * from './runtime/initialization';
4
5
  export * from './runtime/types';
5
6
  export * from './runtime/helpers';
6
- export * from './runtime/globals';
7
7
  export { cyclicParentingChecker } from './systems/cyclicParentingChecker';
8
8
  export * from './systems/events';
9
9
  export * from './systems/raycast';
@@ -12,9 +12,10 @@ export * from './systems/assetLoad';
12
12
  export * from './systems/async-task';
13
13
  export * from './systems/tween';
14
14
  export * from './systems/triggerArea';
15
+ export * from './systems/physics';
15
16
  export * from './engine/entity';
16
17
  export * from './components/types';
17
- import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended } from './components/types';
18
+ import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended, ParticleSystemComponentDefinitionExtended } from './components/types';
18
19
  import { NameComponent } from './components/manual/Name';
19
20
  import { TagsComponentDefinitionExtended } from './components/manual/Tags';
20
21
  export declare const Transform: TransformComponentExtended;
@@ -31,6 +32,7 @@ export declare const VirtualCamera: VirtualCameraComponentDefinitionExtended;
31
32
  export declare const InputModifier: InputModifierComponentDefinitionExtended;
32
33
  export declare const LightSource: LightSourceComponentDefinitionExtended;
33
34
  export declare const TriggerArea: TriggerAreaComponentDefinitionExtended;
35
+ export declare const ParticleSystem: ParticleSystemComponentDefinitionExtended;
34
36
  /**
35
37
  * @alpha
36
38
  * This is going to be used for sync components through a server.
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
1
  // The order of the following imports matters. Please do not auto-sort
2
2
  export * from './engine';
3
3
  export * from './schemas';
4
+ export * from './runtime/globals';
4
5
  export * from './runtime/initialization';
5
6
  export * from './runtime/types';
6
7
  export * from './runtime/helpers';
7
- export * from './runtime/globals';
8
8
  export { cyclicParentingChecker } from './systems/cyclicParentingChecker';
9
9
  export * from './systems/events';
10
10
  export * from './systems/raycast';
@@ -13,6 +13,7 @@ export * from './systems/assetLoad';
13
13
  export * from './systems/async-task';
14
14
  export * from './systems/tween';
15
15
  export * from './systems/triggerArea';
16
+ export * from './systems/physics';
16
17
  export * from './engine/entity';
17
18
  export * from './components/types';
18
19
  // @internal
@@ -35,6 +36,8 @@ export const VirtualCamera = /* @__PURE__*/ components.VirtualCamera(engine);
35
36
  export const InputModifier = /* @__PURE__*/ components.InputModifier(engine);
36
37
  export const LightSource = /* @__PURE__*/ components.LightSource(engine);
37
38
  export const TriggerArea = /* @__PURE__*/ components.TriggerArea(engine);
39
+ export const ParticleSystem =
40
+ /* @__PURE__*/ components.ParticleSystem(engine);
38
41
  /**
39
42
  * @alpha
40
43
  * This is going to be used for sync components through a server.
@@ -1,6 +1,5 @@
1
1
  /**
2
- * Utilities for standardized globalThis access.
3
- * @public
2
+ * Internal utilities for standardized globalThis access.
4
3
  */
5
4
  /**
6
5
  * Type-safe globalThis property access.
@@ -1,6 +1,5 @@
1
1
  /**
2
- * Utilities for standardized globalThis access.
3
- * @public
2
+ * Internal utilities for standardized globalThis access.
4
3
  */
5
4
  /**
6
5
  * Type-safe globalThis property access.
@@ -1,3 +1,4 @@
1
1
  export * from './coordinates';
2
2
  export * from './tree';
3
+ export * from './vectors';
3
4
  export { createTimers, Timers, TimerId, TimerCallback } from './timers';
@@ -1,3 +1,4 @@
1
1
  export * from './coordinates';
2
2
  export * from './tree';
3
+ export * from './vectors';
3
4
  export { createTimers } from './timers';
@@ -2,6 +2,12 @@ import { Entity } from '../../engine/entity';
2
2
  import { ComponentDefinition, IEngine } from '../../engine';
3
3
  import { Vector3Type } from '../../schemas/custom/Vector3';
4
4
  import { QuaternionType } from '../../schemas/custom/Quaternion';
5
+ /**
6
+ * @public
7
+ * Rotate a vector by a quaternion
8
+ * Uses the formula: v' = q * v * q^(-1), optimized version
9
+ */
10
+ export declare function rotateVectorByQuaternion(v: Vector3Type, q: QuaternionType): Vector3Type;
5
11
  /**
6
12
  * Get an iterator of entities that follow a tree structure for a component
7
13
  * @public
@@ -35,11 +35,11 @@ function multiplyQuaternions(q1, q2) {
35
35
  };
36
36
  }
37
37
  /**
38
- * @internal
38
+ * @public
39
39
  * Rotate a vector by a quaternion
40
40
  * Uses the formula: v' = q * v * q^(-1), optimized version
41
41
  */
42
- function rotateVectorByQuaternion(v, q) {
42
+ export function rotateVectorByQuaternion(v, q) {
43
43
  // Extract quaternion components
44
44
  const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
45
45
  // Calculate cross product terms (q.xyz × v) * 2
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Lightweight Vector3 math utilities for internal use.
3
+ * Mirrors the subset of @dcl/ecs-math Vector3 API used by the physics helpers.
4
+ *
5
+ * TEMPORARY WORKAROUND: @dcl/ecs-math ships ESM-only, which breaks the dist-cjs build.
6
+ * The proper fix is to add a CJS build to @dcl/ecs-math upstream, then replace this
7
+ * file with `import { Vector3 } from '@dcl/ecs-math'`.
8
+ *
9
+ * @internal
10
+ */
11
+ export const Vector3 = {
12
+ add(a, b) {
13
+ return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
14
+ },
15
+ subtract(a, b) {
16
+ return { x: a.x - b.x, y: a.y - b.y, z: a.z - b.z };
17
+ },
18
+ scale(v, s) {
19
+ return { x: v.x * s, y: v.y * s, z: v.z * s };
20
+ },
21
+ length(v) {
22
+ return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
23
+ },
24
+ normalize(v) {
25
+ const len = Vector3.length(v);
26
+ if (len === 0)
27
+ return { x: 0, y: 0, z: 0 };
28
+ return { x: v.x / len, y: v.y / len, z: v.z / len };
29
+ },
30
+ equals(a, b) {
31
+ return a.x === b.x && a.y === b.y && a.z === b.z;
32
+ },
33
+ equalsToFloats(v, x, y, z) {
34
+ return v.x === x && v.y === y && v.z === z;
35
+ }
36
+ };
@@ -12,6 +12,7 @@ import { AssetLoadLoadingStateSystem } from '../../systems/assetLoad';
12
12
  import { TweenSystem } from '../../systems/tween';
13
13
  import { TriggerAreaEventsSystem } from '../../systems/triggerArea';
14
14
  import { createTimers, Timers } from '../helpers/timers';
15
+ import { PhysicsSystem } from '../../systems/physics';
15
16
  /**
16
17
  * @public
17
18
  * The engine is the part of the scene that sits in the middle and manages all of the other parts.
@@ -77,6 +78,12 @@ export { TriggerAreaEventsSystem };
77
78
  */
78
79
  export declare const timers: Timers;
79
80
  export { Timers, createTimers };
81
+ /**
82
+ * @public
83
+ * Physics helpers for applying impulses and forces to the player.
84
+ */
85
+ export declare const Physics: PhysicsSystem;
86
+ export { PhysicsSystem };
80
87
  /**
81
88
  * @public
82
89
  * Runs an async function
@@ -14,6 +14,7 @@ import { pointerEventColliderChecker } from '../../systems/pointer-event-collide
14
14
  import { createTriggerAreaEventsSystem } from '../../systems/triggerArea';
15
15
  import { createTimers } from '../helpers/timers';
16
16
  import { setGlobalPolyfill } from '../globals';
17
+ import { createPhysicsSystem } from '../../systems/physics';
17
18
  /**
18
19
  * @public
19
20
  * The engine is the part of the scene that sits in the middle and manages all of the other parts.
@@ -77,6 +78,11 @@ setGlobalPolyfill('setTimeout', timers.setTimeout);
77
78
  setGlobalPolyfill('clearTimeout', timers.clearTimeout);
78
79
  setGlobalPolyfill('setInterval', timers.setInterval);
79
80
  setGlobalPolyfill('clearInterval', timers.clearInterval);
81
+ /**
82
+ * @public
83
+ * Physics helpers for applying impulses and forces to the player.
84
+ */
85
+ export const Physics = /* @__PURE__ */ createPhysicsSystem(engine);
80
86
  /**
81
87
  * Adds pointer event collider system only in DEV env
82
88
  */
@@ -218,6 +218,12 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
218
218
  const buffer = new ReadWriteByteBuffer();
219
219
  // Then we send all the new crdtMessages that the transport needs to process
220
220
  for (const message of crdtMessages) {
221
+ // Avoid echo messages
222
+ if (message.transportId === transportIndex)
223
+ continue;
224
+ // Redundant message for the transport
225
+ if (!transport.filter(message))
226
+ continue;
221
227
  // Check if adding this message would exceed the size limit
222
228
  const currentBufferSize = transportBuffer.toBinary().byteLength;
223
229
  const messageSize = message.messageBuffer.byteLength;
@@ -234,12 +240,6 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
234
240
  continue;
235
241
  }
236
242
  }
237
- // Avoid echo messages
238
- if (message.transportId === transportIndex)
239
- continue;
240
- // Redundant message for the transport
241
- if (!transport.filter(message))
242
- continue;
243
243
  const { entityId } = findNetworkId(message);
244
244
  const transformNeedsFix = 'componentId' in message &&
245
245
  message.componentId === Transform.componentId &&
@@ -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;