@dcl/ecs 7.29.1-35861881691.commit-e4e55e9 → 7.29.1-35901015152.commit-d1b7b96

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 (209) hide show
  1. package/dist/components/extended/AvatarEquippedData.d.ts +15 -0
  2. package/dist/components/extended/AvatarEquippedData.js +10 -0
  3. package/dist/components/extended/AvatarShape.d.ts +15 -0
  4. package/dist/components/extended/AvatarShape.js +10 -0
  5. package/dist/components/extended/MeshCollider.d.ts +9 -0
  6. package/dist/components/extended/MeshCollider.js +6 -0
  7. package/dist/components/extended/MeshRenderer.d.ts +8 -0
  8. package/dist/components/extended/MeshRenderer.js +5 -0
  9. package/dist/components/generated/AvatarMovement.gen.d.ts +1 -0
  10. package/dist/components/generated/AvatarMovement.gen.js +25 -0
  11. package/dist/components/generated/AvatarMovementInfo.gen.d.ts +1 -0
  12. package/dist/components/generated/AvatarMovementInfo.gen.js +25 -0
  13. package/dist/components/generated/CameraLayer.gen.d.ts +1 -0
  14. package/dist/components/generated/CameraLayer.gen.js +25 -0
  15. package/dist/components/generated/CameraLayers.gen.d.ts +1 -0
  16. package/dist/components/generated/CameraLayers.gen.js +25 -0
  17. package/dist/components/generated/GlobalLight.gen.d.ts +1 -0
  18. package/dist/components/generated/GlobalLight.gen.js +25 -0
  19. package/dist/components/generated/GltfNode.gen.d.ts +1 -0
  20. package/dist/components/generated/GltfNode.gen.js +25 -0
  21. package/dist/components/generated/GltfNodeState.gen.d.ts +1 -0
  22. package/dist/components/generated/GltfNodeState.gen.js +25 -0
  23. package/dist/components/generated/TextureCamera.gen.d.ts +1 -0
  24. package/dist/components/generated/TextureCamera.gen.js +25 -0
  25. package/dist/components/generated/UiCanvas.gen.d.ts +1 -0
  26. package/dist/components/generated/UiCanvas.gen.js +25 -0
  27. package/dist/components/generated/UiScrollResult.gen.d.ts +1 -0
  28. package/dist/components/generated/UiScrollResult.gen.js +25 -0
  29. package/dist/components/generated/component-names.gen.js +10 -0
  30. package/dist/components/generated/global.gen.d.ts +20 -4
  31. package/dist/components/generated/global.gen.js +10 -2
  32. package/dist/components/generated/index.gen.d.ts +40 -0
  33. package/dist/components/generated/index.gen.js +50 -0
  34. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  35. package/dist/components/generated/pb/decentraland/common/texture.gen.js +65 -0
  36. package/dist/components/generated/pb/decentraland/sdk/components/avatar_base.gen.d.ts +2 -0
  37. package/dist/components/generated/pb/decentraland/sdk/components/avatar_base.gen.js +17 -1
  38. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  39. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  40. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +2 -0
  41. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +10 -1
  42. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +57 -0
  43. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +204 -0
  44. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +65 -0
  45. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +228 -0
  46. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  47. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  48. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  49. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +104 -0
  50. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  51. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +50 -0
  52. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +2 -0
  53. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +10 -1
  54. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +4 -1
  55. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +3 -0
  56. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  57. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +61 -0
  58. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  59. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  60. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  61. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +41 -0
  62. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  63. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +59 -0
  64. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  65. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +57 -1
  66. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  67. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +56 -0
  68. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  69. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +56 -0
  70. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  71. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  72. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +13 -0
  73. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +30 -0
  74. package/dist/components/generated/pb/decentraland/sdk/components/text_shape.gen.d.ts +2 -0
  75. package/dist/components/generated/pb/decentraland/sdk/components/text_shape.gen.js +10 -0
  76. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  77. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +191 -0
  78. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  79. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +60 -0
  80. package/dist/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.d.ts +2 -0
  81. package/dist/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.js +10 -0
  82. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +6 -0
  83. package/dist/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +30 -0
  84. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  85. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +42 -0
  86. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +2 -0
  87. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +10 -0
  88. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  89. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +90 -0
  90. package/dist/components/index.d.ts +4 -0
  91. package/dist/components/index.js +6 -0
  92. package/dist/components/types.d.ts +2 -0
  93. package/dist/engine/input.js +8 -8
  94. package/dist/engine/lww-element-set-component-definition.js +14 -20
  95. package/dist/engine/readonly.d.ts +1 -1
  96. package/dist/engine/readonly.js +0 -10
  97. package/dist/index.d.ts +3 -1
  98. package/dist/index.js +3 -0
  99. package/dist/schemas/OneOf.js +1 -13
  100. package/dist/systems/cyclicParentingChecker.js +4 -9
  101. package/dist/systems/events.d.ts +48 -0
  102. package/dist/systems/events.js +70 -48
  103. package/dist/systems/raycast.d.ts +5 -1
  104. package/dist/systems/raycast.js +5 -1
  105. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +15 -0
  106. package/dist-cjs/components/extended/AvatarEquippedData.js +14 -0
  107. package/dist-cjs/components/extended/AvatarShape.d.ts +15 -0
  108. package/dist-cjs/components/extended/AvatarShape.js +14 -0
  109. package/dist-cjs/components/extended/MeshCollider.d.ts +9 -0
  110. package/dist-cjs/components/extended/MeshCollider.js +6 -0
  111. package/dist-cjs/components/extended/MeshRenderer.d.ts +8 -0
  112. package/dist-cjs/components/extended/MeshRenderer.js +5 -0
  113. package/dist-cjs/components/generated/AvatarMovement.gen.d.ts +1 -0
  114. package/dist-cjs/components/generated/AvatarMovement.gen.js +28 -0
  115. package/dist-cjs/components/generated/AvatarMovementInfo.gen.d.ts +1 -0
  116. package/dist-cjs/components/generated/AvatarMovementInfo.gen.js +28 -0
  117. package/dist-cjs/components/generated/CameraLayer.gen.d.ts +1 -0
  118. package/dist-cjs/components/generated/CameraLayer.gen.js +28 -0
  119. package/dist-cjs/components/generated/CameraLayers.gen.d.ts +1 -0
  120. package/dist-cjs/components/generated/CameraLayers.gen.js +28 -0
  121. package/dist-cjs/components/generated/GlobalLight.gen.d.ts +1 -0
  122. package/dist-cjs/components/generated/GlobalLight.gen.js +28 -0
  123. package/dist-cjs/components/generated/GltfNode.gen.d.ts +1 -0
  124. package/dist-cjs/components/generated/GltfNode.gen.js +28 -0
  125. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +1 -0
  126. package/dist-cjs/components/generated/GltfNodeState.gen.js +28 -0
  127. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +1 -0
  128. package/dist-cjs/components/generated/TextureCamera.gen.js +28 -0
  129. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +1 -0
  130. package/dist-cjs/components/generated/UiCanvas.gen.js +28 -0
  131. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +1 -0
  132. package/dist-cjs/components/generated/UiScrollResult.gen.js +28 -0
  133. package/dist-cjs/components/generated/component-names.gen.js +10 -0
  134. package/dist-cjs/components/generated/global.gen.d.ts +20 -4
  135. package/dist-cjs/components/generated/global.gen.js +12 -4
  136. package/dist-cjs/components/generated/index.gen.d.ts +40 -0
  137. package/dist-cjs/components/generated/index.gen.js +62 -2
  138. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  139. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +66 -1
  140. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_base.gen.d.ts +2 -0
  141. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_base.gen.js +17 -1
  142. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  143. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  144. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +2 -0
  145. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +10 -1
  146. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +57 -0
  147. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +210 -0
  148. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +65 -0
  149. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +234 -0
  150. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  151. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  152. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  153. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +110 -0
  154. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  155. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +56 -0
  156. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +2 -0
  157. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +10 -1
  158. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +4 -1
  159. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +3 -0
  160. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  161. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +67 -0
  162. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  163. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  164. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  165. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +47 -0
  166. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  167. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +65 -0
  168. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  169. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +58 -2
  170. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  171. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +57 -1
  172. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  173. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +57 -1
  174. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  175. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  176. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +13 -0
  177. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +31 -1
  178. package/dist-cjs/components/generated/pb/decentraland/sdk/components/text_shape.gen.d.ts +2 -0
  179. package/dist-cjs/components/generated/pb/decentraland/sdk/components/text_shape.gen.js +10 -0
  180. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  181. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +197 -0
  182. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  183. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +66 -0
  184. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.d.ts +2 -0
  185. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_dropdown.gen.js +10 -0
  186. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.d.ts +6 -0
  187. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_input.gen.js +30 -0
  188. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  189. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +48 -0
  190. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +2 -0
  191. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +10 -0
  192. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  193. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +91 -1
  194. package/dist-cjs/components/index.d.ts +4 -0
  195. package/dist-cjs/components/index.js +9 -1
  196. package/dist-cjs/components/types.d.ts +2 -0
  197. package/dist-cjs/engine/input.js +8 -8
  198. package/dist-cjs/engine/lww-element-set-component-definition.js +14 -20
  199. package/dist-cjs/engine/readonly.d.ts +1 -1
  200. package/dist-cjs/engine/readonly.js +0 -10
  201. package/dist-cjs/index.d.ts +3 -1
  202. package/dist-cjs/index.js +4 -1
  203. package/dist-cjs/schemas/OneOf.js +1 -13
  204. package/dist-cjs/systems/cyclicParentingChecker.js +4 -9
  205. package/dist-cjs/systems/events.d.ts +48 -0
  206. package/dist-cjs/systems/events.js +70 -48
  207. package/dist-cjs/systems/raycast.d.ts +5 -1
  208. package/dist-cjs/systems/raycast.js +5 -1
  209. package/package.json +2 -2
@@ -2,6 +2,8 @@ import { defineAnimatorComponent } from './extended/Animator';
2
2
  import { defineAudioSourceComponent } from './extended/AudioSource';
3
3
  import { defineAudioAnalysisComponent } from './extended/AudioAnalysis';
4
4
  import { defineMaterialComponent } from './extended/Material';
5
+ import { defineAvatarEquippedDataComponent } from './extended/AvatarEquippedData';
6
+ import { defineAvatarShapeComponent } from './extended/AvatarShape';
5
7
  import { defineMeshColliderComponent } from './extended/MeshCollider';
6
8
  import { defineMeshRendererComponent } from './extended/MeshRenderer';
7
9
  import { defineTweenComponent } from './extended/Tween';
@@ -37,6 +39,10 @@ export const MeshRenderer = (engine) => defineMeshRendererComponent(engine);
37
39
  /* @__PURE__ */
38
40
  export const MeshCollider = (engine) => defineMeshColliderComponent(engine);
39
41
  /* @__PURE__ */
42
+ export const AvatarShape = (engine) => defineAvatarShapeComponent(engine);
43
+ /* @__PURE__ */
44
+ export const AvatarEquippedData = (engine) => defineAvatarEquippedDataComponent(engine);
45
+ /* @__PURE__ */
40
46
  export const Tween = (engine) => defineTweenComponent(engine);
41
47
  /* @__PURE__ */
42
48
  export const VirtualCamera = (engine) => defineVirtualCameraComponent(engine);
@@ -4,6 +4,8 @@ export type { AudioAnalysisComponentDefinitionExtended, AudioAnalysisView } from
4
4
  export type { AudioStreamComponentDefinitionExtended } from './extended/AudioStream';
5
5
  export type { MeshRendererComponentDefinitionExtended } from './extended/MeshRenderer';
6
6
  export type { MeshColliderComponentDefinitionExtended } from './extended/MeshCollider';
7
+ export type { AvatarShapeComponentDefinitionExtended, AvatarShapeType } from './extended/AvatarShape';
8
+ export type { AvatarEquippedDataComponentDefinitionExtended, AvatarEquippedDataType } from './extended/AvatarEquippedData';
7
9
  export type { TextureHelper, MaterialComponentDefinitionExtended, FlatTexture, ReadonlyFlatMaterial, ReadonlyFlatTexture, FlatMaterial } from './extended/Material';
8
10
  export type { TweenHelper, TweenComponentDefinitionExtended, SetMoveRotateScaleParams, MoveRotateScaleModeParams } from './extended/Tween';
9
11
  export type { CameraTransitionHelper, VirtualCameraComponentDefinitionExtended } from './extended/VirtualCamera';
@@ -57,22 +57,22 @@ export function createInputSystem(engine) {
57
57
  const arrayCommands = Array.from(commands);
58
58
  for (let i = arrayCommands.length - 1; i >= 0; i--) {
59
59
  const command = arrayCommands[i];
60
- // Commands are kept sorted by timestamp, so this one and every one
61
- // below it belongs to a frame that was already accounted for. Stopping
62
- // on the button state instead would end this entity's whole loop over
63
- // a button another entity had already reported this frame.
64
- if (command.timestamp <= globalState.previousFrameMaxTimestamp) {
65
- break;
66
- }
67
60
  if (command.timestamp > maxTimestamp) {
68
61
  maxTimestamp = command.timestamp;
69
62
  }
70
- globalState.thisFrameCommands.push(command);
63
+ if (command.timestamp > globalState.previousFrameMaxTimestamp) {
64
+ globalState.thisFrameCommands.push(command);
65
+ }
71
66
  if (command.state === 0 /* PointerEventType.PET_UP */ || command.state === 1 /* PointerEventType.PET_DOWN */) {
72
67
  const prevCommand = globalState.buttonState.get(command.button);
73
68
  if (!prevCommand || command.timestamp > prevCommand.timestamp) {
74
69
  globalState.buttonState.set(command.button, command);
75
70
  }
71
+ else {
72
+ // since we are iterating a descending array, we can early finish the
73
+ // loop
74
+ break;
75
+ }
76
76
  }
77
77
  }
78
78
  }
@@ -201,16 +201,12 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
201
201
  return data.has(entity);
202
202
  },
203
203
  deleteFrom(entity, markAsDirty = true) {
204
- // Presence, not truthiness: a component defined from a primitive schema can
205
- // legitimately hold 0, false or an empty string, and deleting one must still
206
- // return the value that was there.
207
- const had = data.has(entity);
208
204
  const component = data.get(entity);
209
205
  if (data.delete(entity) && markAsDirty) {
210
206
  dirtyIterator.add(entity);
211
207
  }
212
208
  lastSentData.delete(entity);
213
- return had ? component : null;
209
+ return component || null;
214
210
  },
215
211
  entityDeleted(entity, markAsDirty) {
216
212
  if (data.delete(entity) && markAsDirty) {
@@ -219,20 +215,19 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
219
215
  lastSentData.delete(entity);
220
216
  },
221
217
  getOrNull(entity) {
222
- // Presence, not truthiness: a component defined from a primitive schema
223
- // can legitimately hold 0, false or an empty string.
224
- if (!data.has(entity))
225
- return null;
226
- return deepReadonly(data.get(entity));
218
+ const component = data.get(entity);
219
+ return component ? deepReadonly(component) : null;
227
220
  },
228
221
  get(entity) {
229
- if (!data.has(entity)) {
222
+ const component = data.get(entity);
223
+ if (!component) {
230
224
  throw new Error(`[getFrom] Component ${componentName} for entity #${entity} not found`);
231
225
  }
232
- return deepReadonly(data.get(entity));
226
+ return deepReadonly(component);
233
227
  },
234
228
  create(entity, value) {
235
- if (data.has(entity)) {
229
+ const component = data.get(entity);
230
+ if (component) {
236
231
  throw new Error(`[create] Component ${componentName} for ${entity} already exists`);
237
232
  }
238
233
  const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;
@@ -248,22 +243,21 @@ export function createComponentDefinitionFromSchema(componentName, componentId,
248
243
  return usedValue;
249
244
  },
250
245
  getMutableOrNull(entity) {
251
- // Presence, not truthiness, so a falsy primitive value is still mutable.
252
- if (!data.has(entity)) {
246
+ const component = data.get(entity);
247
+ if (!component) {
253
248
  return null;
254
249
  }
255
250
  dirtyIterator.add(entity);
256
- return data.get(entity);
251
+ return component;
257
252
  },
258
253
  getOrCreateMutable(entity, value) {
259
- // Presence, not truthiness: a stored 0/false/'' must not be treated as absent,
260
- // which would send this through create() and throw "already exists".
261
- if (!data.has(entity)) {
254
+ const component = data.get(entity);
255
+ if (!component) {
262
256
  return this.create(entity, value);
263
257
  }
264
258
  else {
265
259
  dirtyIterator.add(entity);
266
- return data.get(entity);
260
+ return component;
267
261
  }
268
262
  },
269
263
  getMutable(entity) {
@@ -16,7 +16,7 @@ export type DeepReadonlyObject<T> = {
16
16
  /**
17
17
  * @public
18
18
  */
19
- export type ReadonlyPrimitive = number | string | boolean;
19
+ export type ReadonlyPrimitive = number | string | number[] | string[] | boolean | boolean[];
20
20
  /**
21
21
  * @public
22
22
  */
@@ -2,15 +2,5 @@
2
2
  * @internal
3
3
  */
4
4
  export function deepReadonly(val) {
5
- // A component can be defined straight from a primitive or array schema, not
6
- // only from a Map, which is why this is no longer constrained to an object.
7
- // Spreading those threw the value away: a number came back as {}, an array
8
- // as an object keyed by index.
9
- if (val === null || typeof val !== 'object') {
10
- return val;
11
- }
12
- if (Array.isArray(val)) {
13
- return Object.freeze([...val]);
14
- }
15
5
  return Object.freeze({ ...val });
16
6
  }
package/dist/index.d.ts CHANGED
@@ -16,7 +16,7 @@ export * from './systems/triggerArea';
16
16
  export * from './systems/physics';
17
17
  export * from './engine/entity';
18
18
  export * from './components/types';
19
- import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioAnalysisComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended, ParticleSystemComponentDefinitionExtended, TouchScreenControlsComponentDefinitionExtended } from './components/types';
19
+ import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, AvatarShapeComponentDefinitionExtended, AvatarEquippedDataComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioAnalysisComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended, ParticleSystemComponentDefinitionExtended, TouchScreenControlsComponentDefinitionExtended } from './components/types';
20
20
  import { NameComponent } from './components/manual/Name';
21
21
  import { TagsComponentDefinitionExtended } from './components/manual/Tags';
22
22
  export declare const Transform: TransformComponentExtended;
@@ -27,6 +27,8 @@ export declare const AudioStream: AudioStreamComponentDefinitionExtended;
27
27
  export declare const Material: MaterialComponentDefinitionExtended;
28
28
  export declare const MeshRenderer: MeshRendererComponentDefinitionExtended;
29
29
  export declare const MeshCollider: MeshColliderComponentDefinitionExtended;
30
+ export declare const AvatarShape: AvatarShapeComponentDefinitionExtended;
31
+ export declare const AvatarEquippedData: AvatarEquippedDataComponentDefinitionExtended;
30
32
  export declare const Name: NameComponent;
31
33
  export declare const Tags: TagsComponentDefinitionExtended;
32
34
  export declare const Tween: TweenComponentDefinitionExtended;
package/dist/index.js CHANGED
@@ -31,6 +31,9 @@ export const AudioStream = /* @__PURE__*/ components.AudioStream(engine);
31
31
  export const Material = /* @__PURE__*/ components.Material(engine);
32
32
  export const MeshRenderer = /* @__PURE__*/ components.MeshRenderer(engine);
33
33
  export const MeshCollider = /* @__PURE__*/ components.MeshCollider(engine);
34
+ export const AvatarShape = /* @__PURE__*/ components.AvatarShape(engine);
35
+ export const AvatarEquippedData =
36
+ /* @__PURE__*/ components.AvatarEquippedData(engine);
34
37
  export const Name = components.Name(engine);
35
38
  export const Tags = components.Tags(engine);
36
39
  export const Tween = /* @__PURE__*/ components.Tween(engine);
@@ -1,5 +1,3 @@
1
- /** Reserved case index for a value whose case was never selected. */
2
- const NO_CASE = 0;
3
1
  export const IOneOf = (specs) => {
4
2
  const specKeys = Object.keys(specs);
5
3
  const keyToIndex = specKeys.reduce((dict, key, index) => {
@@ -12,22 +10,12 @@ export const IOneOf = (specs) => {
12
10
  }, {});
13
11
  return {
14
12
  serialize({ $case, value }, builder) {
15
- // `create()` selects no case, so a field the scene never set arrives here
16
- // with an undefined `$case`. Index 0 is free, cases start at 1.
17
- if ($case === undefined) {
18
- builder.writeUint8(NO_CASE);
19
- return;
20
- }
21
13
  const _value = keyToIndex[$case.toString()] + 1;
22
14
  builder.writeUint8(_value);
23
15
  specs[$case].serialize(value, builder);
24
16
  },
25
17
  deserialize(reader) {
26
- const caseIndex = reader.readInt8();
27
- if (caseIndex === NO_CASE) {
28
- return {};
29
- }
30
- const $case = specKeys[caseIndex - 1];
18
+ const $case = specKeys[reader.readInt8() - 1];
31
19
  const value = specs[$case].deserialize(reader);
32
20
  return { $case, value };
33
21
  },
@@ -16,22 +16,17 @@ import * as components from '../components';
16
16
  */
17
17
  export function cyclicParentingChecker(engine) {
18
18
  const Transform = components.Transform(engine);
19
- // Reused by every walk: the checker is synchronous, so only one is ever in
20
- // flight. A cycle anywhere above the entity has to end the walk, not only one
21
- // the entity is part of, otherwise the ancestors repeat forever.
22
- const visited = new Set();
23
19
  return () => {
24
20
  for (const entity of Transform.dirtyIterator()) {
25
- visited.clear();
26
- visited.add(entity);
27
21
  let transform = Transform.getOrNull(entity);
28
22
  while (transform && transform.parent) {
29
- if (visited.has(transform.parent)) {
23
+ if (transform.parent === entity) {
30
24
  console.error(`There is a cyclic parent with entity ${entity}`);
31
25
  break;
32
26
  }
33
- visited.add(transform.parent);
34
- transform = Transform.getOrNull(transform.parent);
27
+ else {
28
+ transform = Transform.getOrNull(transform.parent);
29
+ }
35
30
  }
36
31
  }
37
32
  };
@@ -50,6 +50,24 @@ export interface PointerEventsSystem {
50
50
  * @param entity - Entity where the callback was attached
51
51
  */
52
52
  removeOnPointerHoverLeave(entity: Entity): void;
53
+ /**
54
+ * @public
55
+ * Remove the callback for onPointerDrag event
56
+ * @param entity - Entity where the callback was attached
57
+ */
58
+ removeOnPointerDrag(entity: Entity): void;
59
+ /**
60
+ * @public
61
+ * Remove the callback for onPointerDragLocked event
62
+ * @param entity - Entity where the callback was attached
63
+ */
64
+ removeOnPointerDragLocked(entity: Entity): void;
65
+ /**
66
+ * @public
67
+ * Remove the callback for onPointerDragEnd event
68
+ * @param entity - Entity where the callback was attached
69
+ */
70
+ removeOnPointerDragEnd(entity: Entity): void;
53
71
  /**
54
72
  * @public
55
73
  * Remove the callback for onProximityDown event
@@ -128,6 +146,36 @@ export interface PointerEventsSystem {
128
146
  entity: Entity;
129
147
  opts?: Partial<EventSystemOptions>;
130
148
  }, cb: EventSystemCallback): void;
149
+ /**
150
+ * @public
151
+ * Execute callback while the user holds the button pressed and moves the pointer, having pressed it on the entity
152
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
153
+ * @param cb - Function to execute on every drag update
154
+ */
155
+ onPointerDrag(pointerData: {
156
+ entity: Entity;
157
+ opts?: Partial<EventSystemOptions>;
158
+ }, cb: EventSystemCallback): void;
159
+ /**
160
+ * @public
161
+ * Same as onPointerDrag, but the cursor is locked in place for the duration of the drag
162
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
163
+ * @param cb - Function to execute on every drag update
164
+ */
165
+ onPointerDragLocked(pointerData: {
166
+ entity: Entity;
167
+ opts?: Partial<EventSystemOptions>;
168
+ }, cb: EventSystemCallback): void;
169
+ /**
170
+ * @public
171
+ * Execute callback when the user releases the button after a drag that started on the entity
172
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
173
+ * @param cb - Function to execute when the drag ends
174
+ */
175
+ onPointerDragEnd(pointerData: {
176
+ entity: Entity;
177
+ opts?: Partial<EventSystemOptions>;
178
+ }, cb: EventSystemCallback): void;
131
179
  /**
132
180
  * @public
133
181
  * Execute callback when the user presses the proximity button on the entity
@@ -20,21 +20,14 @@ export function createPointerEventsSystem(engine, inputSystem) {
20
20
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
21
21
  EventType[EventType["ProximityEnter"] = 5] = "ProximityEnter";
22
22
  EventType[EventType["ProximityLeave"] = 6] = "ProximityLeave";
23
+ EventType[EventType["Drag"] = 7] = "Drag";
24
+ EventType[EventType["DragLocked"] = 8] = "DragLocked";
25
+ EventType[EventType["DragEnd"] = 9] = "DragEnd";
23
26
  })(EventType || (EventType = {}));
24
27
  const eventsMap = new Map();
25
28
  function getEvent(entity) {
26
29
  return eventsMap.get(entity) || eventsMap.set(entity, new Map()).get(entity);
27
30
  }
28
- // A cursor handler and a proximity handler are separate registrations that
29
- // produce separate PointerEvents entries, so they need separate slots here
30
- // too. Keying on the event type alone made onProximityDown evict whatever
31
- // onPointerDown had left.
32
- function eventKey(type, interactionType) {
33
- return `${type}:${interactionType}`;
34
- }
35
- function setEvent(entity, type, cb, opts, interactionType = 0 /* InteractionType.CURSOR */) {
36
- getEvent(entity).set(eventKey(type, interactionType), { cb, opts, eventType: type });
37
- }
38
31
  function setPointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
39
32
  const pointerEvent = PointerEvents.getMutableOrNull(entity) || PointerEvents.create(entity);
40
33
  pointerEvent.pointerEvents.push({
@@ -52,27 +45,13 @@ export function createPointerEventsSystem(engine, inputSystem) {
52
45
  interactionType: interactionType ?? 0 /* InteractionType.CURSOR */
53
46
  });
54
47
  }
55
- function removePointerEvent(entity, type, opts, interactionType = 0 /* InteractionType.CURSOR */) {
48
+ function removePointerEvent(entity, type, button, interactionType = 0 /* InteractionType.CURSOR */) {
56
49
  const pointerEvent = PointerEvents.getMutableOrNull(entity);
57
50
  if (!pointerEvent)
58
51
  return;
59
- const sameSlot = (pointer) => pointer.eventType === type && pointer.interactionType === interactionType;
60
- // onClick and onPointerDown both describe themselves as PET_DOWN, so the event
61
- // type and button alone do not say which registration an entry belongs to. Match
62
- // everything the entry was built from, or removing one handler can take the
63
- // other's descriptor and leave the renderer advertising the wrong interaction.
64
- const index = pointerEvent.pointerEvents.findIndex((pointer) => sameSlot(pointer) &&
65
- pointer.eventInfo?.button === opts.button &&
66
- pointer.eventInfo?.hoverText === opts.hoverText &&
67
- pointer.eventInfo?.showFeedback === opts.showFeedback &&
68
- pointer.eventInfo?.showHighlight === opts.showHighlight &&
69
- pointer.eventInfo?.maxDistance === opts.maxDistance &&
70
- pointer.eventInfo?.maxPlayerDistance === opts.maxPlayerDistance &&
71
- pointer.eventInfo?.priority === opts.priority &&
72
- pointer.eventInfo?.maxCameraDistance === opts.maxCameraDistance);
73
- if (index === -1)
74
- return;
75
- pointerEvent.pointerEvents.splice(index, 1);
52
+ pointerEvent.pointerEvents = pointerEvent.pointerEvents.filter((pointer) => !(pointer.eventInfo?.button === button &&
53
+ pointer.eventType === type &&
54
+ pointer.interactionType === interactionType));
76
55
  }
77
56
  function getPointerEvent(eventType) {
78
57
  if (eventType === EventType.Up) {
@@ -90,20 +69,24 @@ export function createPointerEventsSystem(engine, inputSystem) {
90
69
  else if (eventType === EventType.ProximityLeave) {
91
70
  return 5 /* PointerEventType.PET_PROXIMITY_LEAVE */;
92
71
  }
72
+ else if (eventType === EventType.Drag) {
73
+ return 7 /* PointerEventType.PET_DRAG */;
74
+ }
75
+ else if (eventType === EventType.DragLocked) {
76
+ return 6 /* PointerEventType.PET_DRAG_LOCKED */;
77
+ }
78
+ else if (eventType === EventType.DragEnd) {
79
+ return 8 /* PointerEventType.PET_DRAG_END */;
80
+ }
93
81
  return 1 /* PointerEventType.PET_DOWN */;
94
82
  }
95
83
  function removeEvent(entity, type, interactionType = 0 /* InteractionType.CURSOR */) {
96
84
  const event = getEvent(entity);
97
- const key = eventKey(type, interactionType);
98
- const pointerEvent = event.get(key);
99
- // Every registration adds an entry, not only the ones carrying a hoverText,
100
- // so every removal has to take one away. Gating on hoverText left the
101
- // renderer showing an interaction whose callback was already gone, and made
102
- // re-registering grow the component by one entry each time.
103
- if (pointerEvent) {
104
- removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts, interactionType);
85
+ const pointerEvent = event.get(type);
86
+ if (pointerEvent?.opts.hoverText) {
87
+ removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
105
88
  }
106
- event.delete(key);
89
+ event.delete(type);
107
90
  }
108
91
  engine.addSystem(function PointerEventSystem() {
109
92
  for (const [entity, event] of eventsMap) {
@@ -111,7 +94,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
111
94
  eventsMap.delete(entity);
112
95
  continue;
113
96
  }
114
- for (const [, { cb, opts, eventType }] of event) {
97
+ for (const [eventType, { cb, opts }] of event) {
115
98
  if (eventType === EventType.Click) {
116
99
  const command = inputSystem.getClick(opts.button, entity);
117
100
  if (command)
@@ -122,7 +105,10 @@ export function createPointerEventsSystem(engine, inputSystem) {
122
105
  eventType === EventType.HoverEnter ||
123
106
  eventType === EventType.HoverLeave ||
124
107
  eventType === EventType.ProximityEnter ||
125
- eventType === EventType.ProximityLeave) {
108
+ eventType === EventType.ProximityLeave ||
109
+ eventType === EventType.Drag ||
110
+ eventType === EventType.DragLocked ||
111
+ eventType === EventType.DragEnd) {
126
112
  const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
127
113
  if (command) {
128
114
  checkNotThenable(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
@@ -139,7 +125,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
139
125
  const { entity, opts } = data;
140
126
  const options = getDefaultOpts(opts);
141
127
  removeEvent(entity, EventType.Down);
142
- setEvent(entity, EventType.Down, cb, options);
128
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
143
129
  setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
144
130
  };
145
131
  const onPointerUp = (...args) => {
@@ -150,7 +136,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
150
136
  const { entity, opts } = data;
151
137
  const options = getDefaultOpts(opts);
152
138
  removeEvent(entity, EventType.Up);
153
- setEvent(entity, EventType.Up, cb, options);
139
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
154
140
  setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options);
155
141
  };
156
142
  const onPointerHoverEnter = (...args) => {
@@ -158,7 +144,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
158
144
  const { entity, opts } = data;
159
145
  const options = getDefaultOpts(opts);
160
146
  removeEvent(entity, EventType.HoverEnter);
161
- setEvent(entity, EventType.HoverEnter, cb, options);
147
+ getEvent(entity).set(EventType.HoverEnter, { cb, opts: options });
162
148
  setPointerEvent(entity, 2 /* PointerEventType.PET_HOVER_ENTER */, options);
163
149
  };
164
150
  const onPointerHoverLeave = (...args) => {
@@ -166,15 +152,39 @@ export function createPointerEventsSystem(engine, inputSystem) {
166
152
  const { entity, opts } = data;
167
153
  const options = getDefaultOpts(opts);
168
154
  removeEvent(entity, EventType.HoverLeave);
169
- setEvent(entity, EventType.HoverLeave, cb, options);
155
+ getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
170
156
  setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
171
157
  };
158
+ const onPointerDrag = (...args) => {
159
+ const [data, cb] = args;
160
+ const { entity, opts } = data;
161
+ const options = getDefaultOpts(opts);
162
+ removeEvent(entity, EventType.Drag);
163
+ getEvent(entity).set(EventType.Drag, { cb, opts: options });
164
+ setPointerEvent(entity, 7 /* PointerEventType.PET_DRAG */, options);
165
+ };
166
+ const onPointerDragLocked = (...args) => {
167
+ const [data, cb] = args;
168
+ const { entity, opts } = data;
169
+ const options = getDefaultOpts(opts);
170
+ removeEvent(entity, EventType.DragLocked);
171
+ getEvent(entity).set(EventType.DragLocked, { cb, opts: options });
172
+ setPointerEvent(entity, 6 /* PointerEventType.PET_DRAG_LOCKED */, options);
173
+ };
174
+ const onPointerDragEnd = (...args) => {
175
+ const [data, cb] = args;
176
+ const { entity, opts } = data;
177
+ const options = getDefaultOpts(opts);
178
+ removeEvent(entity, EventType.DragEnd);
179
+ getEvent(entity).set(EventType.DragEnd, { cb, opts: options });
180
+ setPointerEvent(entity, 8 /* PointerEventType.PET_DRAG_END */, options);
181
+ };
172
182
  const onProximityDown = (...args) => {
173
183
  const [data, cb] = args;
174
184
  const { entity, opts } = data;
175
185
  const options = getDefaultOpts(opts);
176
186
  removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
177
- setEvent(entity, EventType.Down, cb, options, 1 /* InteractionType.PROXIMITY */);
187
+ getEvent(entity).set(EventType.Down, { cb, opts: options });
178
188
  setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options, 1 /* InteractionType.PROXIMITY */);
179
189
  };
180
190
  const onProximityUp = (...args) => {
@@ -182,7 +192,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
182
192
  const { entity, opts } = data;
183
193
  const options = getDefaultOpts(opts);
184
194
  removeEvent(entity, EventType.Up, 1 /* InteractionType.PROXIMITY */);
185
- setEvent(entity, EventType.Up, cb, options, 1 /* InteractionType.PROXIMITY */);
195
+ getEvent(entity).set(EventType.Up, { cb, opts: options });
186
196
  setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options, 1 /* InteractionType.PROXIMITY */);
187
197
  };
188
198
  const onProximityEnter = (...args) => {
@@ -190,7 +200,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
190
200
  const { entity, opts } = data;
191
201
  const options = getDefaultOpts(opts);
192
202
  removeEvent(entity, EventType.ProximityEnter, 1 /* InteractionType.PROXIMITY */);
193
- setEvent(entity, EventType.ProximityEnter, cb, options, 1 /* InteractionType.PROXIMITY */);
203
+ getEvent(entity).set(EventType.ProximityEnter, { cb, opts: options });
194
204
  setPointerEvent(entity, 4 /* PointerEventType.PET_PROXIMITY_ENTER */, options, 1 /* InteractionType.PROXIMITY */);
195
205
  };
196
206
  const onProximityLeave = (...args) => {
@@ -198,7 +208,7 @@ export function createPointerEventsSystem(engine, inputSystem) {
198
208
  const { entity, opts } = data;
199
209
  const options = getDefaultOpts(opts);
200
210
  removeEvent(entity, EventType.ProximityLeave, 1 /* InteractionType.PROXIMITY */);
201
- setEvent(entity, EventType.ProximityLeave, cb, options, 1 /* InteractionType.PROXIMITY */);
211
+ getEvent(entity).set(EventType.ProximityLeave, { cb, opts: options });
202
212
  setPointerEvent(entity, 5 /* PointerEventType.PET_PROXIMITY_LEAVE */, options, 1 /* InteractionType.PROXIMITY */);
203
213
  };
204
214
  return {
@@ -217,6 +227,15 @@ export function createPointerEventsSystem(engine, inputSystem) {
217
227
  removeOnPointerHoverLeave(entity) {
218
228
  removeEvent(entity, EventType.HoverLeave);
219
229
  },
230
+ removeOnPointerDrag(entity) {
231
+ removeEvent(entity, EventType.Drag);
232
+ },
233
+ removeOnPointerDragLocked(entity) {
234
+ removeEvent(entity, EventType.DragLocked);
235
+ },
236
+ removeOnPointerDragEnd(entity) {
237
+ removeEvent(entity, EventType.DragEnd);
238
+ },
220
239
  removeOnProximityDown(entity) {
221
240
  removeEvent(entity, EventType.Down, 1 /* InteractionType.PROXIMITY */);
222
241
  },
@@ -235,13 +254,16 @@ export function createPointerEventsSystem(engine, inputSystem) {
235
254
  // Clear previous event with over feedback included
236
255
  removeEvent(entity, EventType.Click);
237
256
  // Set new event
238
- setEvent(entity, EventType.Click, cb, options);
257
+ getEvent(entity).set(EventType.Click, { cb, opts: options });
239
258
  setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
240
259
  },
241
260
  onPointerDown,
242
261
  onPointerUp,
243
262
  onPointerHoverEnter,
244
263
  onPointerHoverLeave,
264
+ onPointerDrag,
265
+ onPointerDragLocked,
266
+ onPointerDragEnd,
245
267
  onProximityDown,
246
268
  onProximityUp,
247
269
  onProximityEnter,
@@ -1,4 +1,4 @@
1
- import { RaycastQueryType, PBRaycastResult } from '../components';
1
+ import { RaycastQueryType, RaycastShape, PBRaycastResult } from '../components';
2
2
  import { DeepReadonlyObject, Entity } from '../engine';
3
3
  import { Vector3 } from '../components/generated/pb/decentraland/common/vectors.gen';
4
4
  /**
@@ -14,6 +14,10 @@ export type RaycastSystemOptions = {
14
14
  queryType: RaycastQueryType;
15
15
  continuous?: boolean | undefined;
16
16
  collisionMask?: number | undefined;
17
+ /** shape to sweep along the ray, default RS_RAY (a point) */
18
+ shape?: RaycastShape | undefined;
19
+ /** include colliders from other scenes, default false */
20
+ includeWorld?: boolean | undefined;
17
21
  };
18
22
  export type LocalDirectionRaycastSystemOptions = {
19
23
  direction?: Vector3;
@@ -12,7 +12,9 @@ export function createRaycastSystem(engine) {
12
12
  queryType: 0 /* RaycastQueryType.RQT_HIT_FIRST */,
13
13
  continuous: false,
14
14
  originOffset: { x: 0, y: 0, z: 0 },
15
- collisionMask: 2 /* ColliderLayer.CL_PHYSICS */
15
+ collisionMask: 2 /* ColliderLayer.CL_PHYSICS */,
16
+ shape: 0 /* RaycastShape.RS_RAY */,
17
+ includeWorld: false
16
18
  };
17
19
  const getLocalDirectionRaycastDefaultOptions = (options = {}) => ({
18
20
  ...defaultOptions,
@@ -58,6 +60,8 @@ export function createRaycastSystem(engine) {
58
60
  raycast.direction = raycastValue.directionRawValue;
59
61
  raycast.continuous = raycastValue.continuous;
60
62
  raycast.queryType = raycastValue.queryType;
63
+ raycast.shape = raycastValue.shape;
64
+ raycast.includeWorld = raycastValue.includeWorld;
61
65
  entitiesCallbackResultMap.set(entity, { callback: callback });
62
66
  };
63
67
  nextTickRaycasts.push(onNextTick);
@@ -0,0 +1,15 @@
1
+ import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
+ import { PBAvatarEquippedData } from '../generated/pb/decentraland/sdk/components/avatar_equipped_data.gen';
3
+ /**
4
+ * @public
5
+ * AvatarEquippedData with `forceRender` optional: the wire type is a repeated field (always present, so the
6
+ * generated type requires it), but a scene rarely needs it and shouldn't have to pass `[]`.
7
+ */
8
+ export type AvatarEquippedDataType = Omit<PBAvatarEquippedData, 'forceRender'> & {
9
+ forceRender?: string[] | undefined;
10
+ };
11
+ /**
12
+ * @public
13
+ */
14
+ export type AvatarEquippedDataComponentDefinitionExtended = LastWriteWinElementSetComponentDefinition<AvatarEquippedDataType>;
15
+ export declare function defineAvatarEquippedDataComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): AvatarEquippedDataComponentDefinitionExtended;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineAvatarEquippedDataComponent = void 0;
4
+ const AvatarEquippedData_gen_1 = require("../generated/AvatarEquippedData.gen");
5
+ function defineAvatarEquippedDataComponent(engine) {
6
+ const patchedSchema = { ...AvatarEquippedData_gen_1.AvatarEquippedDataSchema };
7
+ const origSerialize = patchedSchema.serialize;
8
+ patchedSchema.serialize = (value, builder) => {
9
+ origSerialize(value.forceRender === undefined ? { ...value, forceRender: [] } : value, builder);
10
+ };
11
+ const theComponent = engine.defineComponentFromSchema('core::AvatarEquippedData', patchedSchema);
12
+ return theComponent;
13
+ }
14
+ exports.defineAvatarEquippedDataComponent = defineAvatarEquippedDataComponent;
@@ -0,0 +1,15 @@
1
+ import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
+ import { PBAvatarShape } from '../generated/pb/decentraland/sdk/components/avatar_shape.gen';
3
+ /**
4
+ * @public
5
+ * AvatarShape with `forceRender` optional: the wire type is a repeated field (always present, so the
6
+ * generated type requires it), but a scene rarely needs it and shouldn't have to pass `[]`.
7
+ */
8
+ export type AvatarShapeType = Omit<PBAvatarShape, 'forceRender'> & {
9
+ forceRender?: string[] | undefined;
10
+ };
11
+ /**
12
+ * @public
13
+ */
14
+ export type AvatarShapeComponentDefinitionExtended = LastWriteWinElementSetComponentDefinition<AvatarShapeType>;
15
+ export declare function defineAvatarShapeComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): AvatarShapeComponentDefinitionExtended;