@dcl/ecs 7.20.2-22231111352.commit-d2f6f0a → 7.20.2-22309446491.commit-b942bde

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 (199) hide show
  1. package/dist/components/extended/AvatarEquippedData.d.ts +10 -0
  2. package/dist/components/extended/AvatarEquippedData.js +15 -0
  3. package/dist/components/extended/AvatarShape.d.ts +10 -0
  4. package/dist/components/extended/AvatarShape.js +15 -0
  5. package/dist/components/extended/MeshCollider.d.ts +8 -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/AvatarLocomotionSettings.gen.d.ts +1 -0
  10. package/dist/components/generated/AvatarLocomotionSettings.gen.js +25 -0
  11. package/dist/components/generated/AvatarMovement.gen.d.ts +1 -0
  12. package/dist/components/generated/AvatarMovement.gen.js +25 -0
  13. package/dist/components/generated/AvatarMovementInfo.gen.d.ts +1 -0
  14. package/dist/components/generated/AvatarMovementInfo.gen.js +25 -0
  15. package/dist/components/generated/CameraLayer.gen.d.ts +1 -0
  16. package/dist/components/generated/CameraLayer.gen.js +25 -0
  17. package/dist/components/generated/CameraLayers.gen.d.ts +1 -0
  18. package/dist/components/generated/CameraLayers.gen.js +25 -0
  19. package/dist/components/generated/GlobalLight.gen.d.ts +1 -0
  20. package/dist/components/generated/GlobalLight.gen.js +25 -0
  21. package/dist/components/generated/GltfNode.gen.d.ts +1 -0
  22. package/dist/components/generated/GltfNode.gen.js +25 -0
  23. package/dist/components/generated/GltfNodeState.gen.d.ts +1 -0
  24. package/dist/components/generated/GltfNodeState.gen.js +25 -0
  25. package/dist/components/generated/TextureCamera.gen.d.ts +1 -0
  26. package/dist/components/generated/TextureCamera.gen.js +25 -0
  27. package/dist/components/generated/UiCanvas.gen.d.ts +1 -0
  28. package/dist/components/generated/UiCanvas.gen.js +25 -0
  29. package/dist/components/generated/UiScrollResult.gen.d.ts +1 -0
  30. package/dist/components/generated/UiScrollResult.gen.js +25 -0
  31. package/dist/components/generated/component-names.gen.js +11 -0
  32. package/dist/components/generated/global.gen.d.ts +22 -0
  33. package/dist/components/generated/global.gen.js +11 -0
  34. package/dist/components/generated/index.gen.d.ts +44 -0
  35. package/dist/components/generated/index.gen.js +55 -0
  36. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  37. package/dist/components/generated/pb/decentraland/common/texture.gen.js +65 -0
  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_locomotion_settings.gen.d.ts +29 -0
  41. package/dist/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +93 -0
  42. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +43 -0
  43. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +151 -1
  44. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +18 -0
  45. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +60 -0
  46. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +24 -0
  47. package/dist/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +84 -0
  48. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  49. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  50. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  51. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +104 -0
  52. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  53. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +50 -0
  54. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +37 -1
  55. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +119 -1
  56. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +6 -2
  57. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +4 -0
  58. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  59. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +61 -0
  60. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  61. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  62. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  63. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +41 -0
  64. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  65. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +59 -0
  66. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  67. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +57 -1
  68. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  69. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +56 -0
  70. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  71. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +56 -0
  72. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  73. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  74. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +13 -0
  75. package/dist/components/generated/pb/decentraland/sdk/components/raycast.gen.js +30 -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_scroll_result.gen.d.ts +15 -0
  81. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +42 -0
  82. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  83. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +20 -0
  84. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  85. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +90 -0
  86. package/dist/components/index.d.ts +11 -7
  87. package/dist/components/index.js +11 -5
  88. package/dist/components/types.d.ts +2 -0
  89. package/dist/engine/grow-only-value-set-component-definition.js +1 -1
  90. package/dist/engine/input.d.ts +6 -0
  91. package/dist/engine/input.js +9 -4
  92. package/dist/index.d.ts +1 -0
  93. package/dist/index.js +1 -0
  94. package/dist/runtime/globals.d.ts +12 -2
  95. package/dist/runtime/globals.js +4 -3
  96. package/dist/systems/events.d.ts +100 -1
  97. package/dist/systems/events.js +143 -65
  98. package/dist/systems/raycast.d.ts +3 -1
  99. package/dist/systems/raycast.js +2 -0
  100. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +10 -0
  101. package/dist-cjs/components/extended/AvatarEquippedData.js +19 -0
  102. package/dist-cjs/components/extended/AvatarShape.d.ts +10 -0
  103. package/dist-cjs/components/extended/AvatarShape.js +19 -0
  104. package/dist-cjs/components/extended/MeshCollider.d.ts +8 -0
  105. package/dist-cjs/components/extended/MeshCollider.js +6 -0
  106. package/dist-cjs/components/extended/MeshRenderer.d.ts +8 -0
  107. package/dist-cjs/components/extended/MeshRenderer.js +5 -0
  108. package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.d.ts +1 -0
  109. package/dist-cjs/components/generated/AvatarLocomotionSettings.gen.js +28 -0
  110. package/dist-cjs/components/generated/AvatarMovement.gen.d.ts +1 -0
  111. package/dist-cjs/components/generated/AvatarMovement.gen.js +28 -0
  112. package/dist-cjs/components/generated/AvatarMovementInfo.gen.d.ts +1 -0
  113. package/dist-cjs/components/generated/AvatarMovementInfo.gen.js +28 -0
  114. package/dist-cjs/components/generated/CameraLayer.gen.d.ts +1 -0
  115. package/dist-cjs/components/generated/CameraLayer.gen.js +28 -0
  116. package/dist-cjs/components/generated/CameraLayers.gen.d.ts +1 -0
  117. package/dist-cjs/components/generated/CameraLayers.gen.js +28 -0
  118. package/dist-cjs/components/generated/GlobalLight.gen.d.ts +1 -0
  119. package/dist-cjs/components/generated/GlobalLight.gen.js +28 -0
  120. package/dist-cjs/components/generated/GltfNode.gen.d.ts +1 -0
  121. package/dist-cjs/components/generated/GltfNode.gen.js +28 -0
  122. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +1 -0
  123. package/dist-cjs/components/generated/GltfNodeState.gen.js +28 -0
  124. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +1 -0
  125. package/dist-cjs/components/generated/TextureCamera.gen.js +28 -0
  126. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +1 -0
  127. package/dist-cjs/components/generated/UiCanvas.gen.js +28 -0
  128. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +1 -0
  129. package/dist-cjs/components/generated/UiScrollResult.gen.js +28 -0
  130. package/dist-cjs/components/generated/component-names.gen.js +11 -0
  131. package/dist-cjs/components/generated/global.gen.d.ts +22 -0
  132. package/dist-cjs/components/generated/global.gen.js +13 -1
  133. package/dist-cjs/components/generated/index.gen.d.ts +44 -0
  134. package/dist-cjs/components/generated/index.gen.js +68 -2
  135. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  136. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +66 -1
  137. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  138. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  139. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.d.ts +29 -0
  140. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_locomotion_settings.gen.js +99 -0
  141. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +43 -0
  142. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +152 -2
  143. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.d.ts +18 -0
  144. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement.gen.js +66 -0
  145. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.d.ts +24 -0
  146. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_movement_info.gen.js +90 -0
  147. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  148. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  149. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  150. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +110 -0
  151. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  152. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +56 -0
  153. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +37 -1
  154. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +120 -2
  155. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +6 -2
  156. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +4 -0
  157. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  158. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +67 -0
  159. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  160. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  161. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  162. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +47 -0
  163. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  164. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +65 -0
  165. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  166. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +58 -2
  167. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  168. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +57 -1
  169. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  170. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +57 -1
  171. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  172. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  173. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.d.ts +13 -0
  174. package/dist-cjs/components/generated/pb/decentraland/sdk/components/raycast.gen.js +31 -1
  175. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  176. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +197 -0
  177. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  178. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +66 -0
  179. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  180. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +48 -0
  181. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  182. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +20 -0
  183. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  184. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +91 -1
  185. package/dist-cjs/components/index.d.ts +11 -7
  186. package/dist-cjs/components/index.js +15 -7
  187. package/dist-cjs/components/types.d.ts +2 -0
  188. package/dist-cjs/engine/grow-only-value-set-component-definition.js +1 -1
  189. package/dist-cjs/engine/input.d.ts +6 -0
  190. package/dist-cjs/engine/input.js +9 -4
  191. package/dist-cjs/index.d.ts +1 -0
  192. package/dist-cjs/index.js +1 -0
  193. package/dist-cjs/runtime/globals.d.ts +12 -2
  194. package/dist-cjs/runtime/globals.js +4 -3
  195. package/dist-cjs/systems/events.d.ts +100 -1
  196. package/dist-cjs/systems/events.js +143 -65
  197. package/dist-cjs/systems/raycast.d.ts +3 -1
  198. package/dist-cjs/systems/raycast.js +2 -0
  199. package/package.json +2 -2
@@ -118,9 +118,8 @@ export function createInputSystem(engine) {
118
118
  }
119
119
  if (!up || !down)
120
120
  return null;
121
- // If the DOWN command has happened before or at the same time as the UP command, a click has happened.
122
- // Same-timestamp is possible when both events are produced within the same renderer tick.
123
- if (down.timestamp <= up.timestamp && timestampIsCurrentFrame(up.timestamp)) {
121
+ // If the DOWN command has happen before the UP commands, it means that that a clicked has happen
122
+ if (down.timestamp < up.timestamp && timestampIsCurrentFrame(up.timestamp)) {
124
123
  return { up, down };
125
124
  }
126
125
  return null;
@@ -186,11 +185,17 @@ export function createInputSystem(engine) {
186
185
  function isPressed(inputAction) {
187
186
  return globalState.buttonState.get(inputAction)?.state === 1 /* PointerEventType.PET_DOWN */;
188
187
  }
188
+ function* getInputCommands() {
189
+ for (let i = globalState.thisFrameCommands.length - 1; i >= 0; i--) {
190
+ yield globalState.thisFrameCommands[i];
191
+ }
192
+ }
189
193
  return {
190
194
  isPressed,
191
195
  getClick,
192
196
  getInputCommand,
193
197
  isClicked,
194
- isTriggered
198
+ isTriggered,
199
+ getInputCommands
195
200
  };
196
201
  }
package/dist/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export * from './schemas';
3
3
  export * from './runtime/initialization';
4
4
  export * from './runtime/types';
5
5
  export * from './runtime/helpers';
6
+ export * from './runtime/globals';
6
7
  export { cyclicParentingChecker } from './systems/cyclicParentingChecker';
7
8
  export * from './systems/events';
8
9
  export * from './systems/raycast';
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export * from './schemas';
4
4
  export * from './runtime/initialization';
5
5
  export * from './runtime/types';
6
6
  export * from './runtime/helpers';
7
+ export * from './runtime/globals';
7
8
  export { cyclicParentingChecker } from './systems/cyclicParentingChecker';
8
9
  export * from './systems/events';
9
10
  export * from './systems/raycast';
@@ -1,4 +1,14 @@
1
1
  /**
2
- * Internal utilities for standardized globalThis access.
2
+ * Utilities for standardized globalThis access.
3
+ * @public
3
4
  */
4
- export {};
5
+ /**
6
+ * Type-safe globalThis property access.
7
+ * @public
8
+ */
9
+ export declare function getGlobal<T>(key: string): T | undefined;
10
+ /**
11
+ * Sets a globalThis property as a polyfill (only if undefined/null).
12
+ * @public
13
+ */
14
+ export declare function setGlobalPolyfill<T>(key: string, value: T): void;
@@ -1,16 +1,17 @@
1
1
  /**
2
- * Internal utilities for standardized globalThis access.
2
+ * Utilities for standardized globalThis access.
3
+ * @public
3
4
  */
4
5
  /**
5
6
  * Type-safe globalThis property access.
6
- * @internal
7
+ * @public
7
8
  */
8
9
  export function getGlobal(key) {
9
10
  return globalThis[key];
10
11
  }
11
12
  /**
12
13
  * Sets a globalThis property as a polyfill (only if undefined/null).
13
- * @internal
14
+ * @public
14
15
  */
15
16
  export function setGlobalPolyfill(key, value) {
16
17
  ;
@@ -18,6 +18,12 @@ export type EventSystemOptions = {
18
18
  showHighlight?: boolean;
19
19
  maxPlayerDistance?: number;
20
20
  };
21
+ /**
22
+ * @public
23
+ */
24
+ export type EventSystemOptionsCallback = EventSystemOptions & {
25
+ cb: EventSystemCallback;
26
+ };
21
27
  export declare const getDefaultOpts: (opts?: Partial<EventSystemOptions>) => EventSystemOptions;
22
28
  /**
23
29
  * @public
@@ -47,11 +53,37 @@ export interface PointerEventsSystem {
47
53
  * @param entity - Entity where the callback was attached
48
54
  */
49
55
  removeOnPointerHoverLeave(entity: Entity): void;
56
+ /**
57
+ * @public
58
+ * Remove the callback for onPointerDrag event
59
+ * @param entity - Entity where the callback was attached
60
+ */
61
+ removeOnPointerDrag(entity: Entity): void;
62
+ /**
63
+ * @public
64
+ * Remove the callback for onPointerDragLocked event
65
+ * @param entity - Entity where the callback was attached
66
+ */
67
+ removeOnPointerDragLocked(entity: Entity): void;
68
+ /**
69
+ * @public
70
+ * Remove the callback for onPointerDragEnd event
71
+ * @param entity - Entity where the callback was attached
72
+ */
73
+ removeOnPointerDragEnd(entity: Entity): void;
74
+ /**
75
+ * @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
78
+ */
79
+ onPointerDown(pointerData: {
80
+ entity: Entity;
81
+ optsList: EventSystemOptionsCallback[];
82
+ }): void;
50
83
  /**
51
84
  * @public
52
85
  * Execute callback when the user press the InputButton pointing at the entity
53
86
  * @param pointerData - Entity to attach the callback, Opts to trigger Feedback and Button
54
- * @param cb - Function to execute when click fires
55
87
  */
56
88
  onPointerDown(pointerData: {
57
89
  entity: Entity;
@@ -64,6 +96,15 @@ export interface PointerEventsSystem {
64
96
  * @param opts - Opts to trigger Feedback and Button
65
97
  */
66
98
  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;
67
108
  /**
68
109
  * @public
69
110
  * Execute callback when the user releases the InputButton pointing at the entity
@@ -101,6 +142,64 @@ export interface PointerEventsSystem {
101
142
  entity: Entity;
102
143
  opts?: Partial<EventSystemOptions>;
103
144
  }, cb: EventSystemCallback): void;
145
+ /**
146
+ * @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
157
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
158
+ * @param cb - Function to execute when click fires
159
+ */
160
+ onPointerDrag(pointerData: {
161
+ entity: Entity;
162
+ opts?: Partial<EventSystemOptions>;
163
+ }, cb: EventSystemCallback): void;
164
+ /**
165
+ * @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
177
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
178
+ * @param cb - Function to execute when click fires
179
+ */
180
+ onPointerDragLocked(pointerData: {
181
+ entity: Entity;
182
+ opts?: Partial<EventSystemOptions>;
183
+ }, cb: EventSystemCallback): void;
184
+ /**
185
+ * @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
188
+ */
189
+ onPointerDragEnd(pointerData: {
190
+ entity: Entity;
191
+ optsList: EventSystemOptionsCallback[];
192
+ }): void;
193
+ /**
194
+ * @public
195
+ * Execute callback when the user releases the button after a drag
196
+ * @param pointerData - Entity to attach the callback - Opts to trigger Feedback and Button
197
+ * @param cb - Function to execute when click fires
198
+ */
199
+ onPointerDragEnd(pointerData: {
200
+ entity: Entity;
201
+ opts?: Partial<EventSystemOptions>;
202
+ }, cb: EventSystemCallback): void;
104
203
  }
105
204
  /**
106
205
  * @public
@@ -18,6 +18,9 @@ export function createPointerEventsSystem(engine, inputSystem) {
18
18
  EventType[EventType["Up"] = 2] = "Up";
19
19
  EventType[EventType["HoverEnter"] = 3] = "HoverEnter";
20
20
  EventType[EventType["HoverLeave"] = 4] = "HoverLeave";
21
+ EventType[EventType["Drag"] = 5] = "Drag";
22
+ EventType[EventType["DragLocked"] = 6] = "DragLocked";
23
+ EventType[EventType["DragEnd"] = 7] = "DragEnd";
21
24
  })(EventType || (EventType = {}));
22
25
  const eventsMap = new Map();
23
26
  function getEvent(entity) {
@@ -53,77 +56,148 @@ export function createPointerEventsSystem(engine, inputSystem) {
53
56
  else if (eventType === EventType.HoverEnter) {
54
57
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
55
58
  }
59
+ else if (eventType === EventType.Drag) {
60
+ return 5 /* PointerEventType.PET_DRAG */;
61
+ }
62
+ else if (eventType === EventType.DragLocked) {
63
+ return 4 /* PointerEventType.PET_DRAG_LOCKED */;
64
+ }
65
+ else if (eventType === EventType.DragEnd) {
66
+ return 6 /* PointerEventType.PET_DRAG_END */;
67
+ }
56
68
  return 1 /* PointerEventType.PET_DOWN */;
57
69
  }
70
+ function getEventType(pet) {
71
+ if (pet === 0 /* PointerEventType.PET_UP */) {
72
+ return EventType.Up;
73
+ }
74
+ else if (pet === 2 /* PointerEventType.PET_HOVER_ENTER */) {
75
+ return EventType.HoverEnter;
76
+ }
77
+ else if (pet === 3 /* PointerEventType.PET_HOVER_LEAVE */) {
78
+ return EventType.HoverLeave;
79
+ }
80
+ else if (pet === 5 /* PointerEventType.PET_DRAG */) {
81
+ return EventType.Drag;
82
+ }
83
+ else if (pet === 4 /* PointerEventType.PET_DRAG_LOCKED */) {
84
+ return EventType.DragLocked;
85
+ }
86
+ else if (pet === 6 /* PointerEventType.PET_DRAG_END */) {
87
+ return EventType.DragEnd;
88
+ }
89
+ else {
90
+ return EventType.Down;
91
+ }
92
+ }
58
93
  function removeEvent(entity, type) {
59
94
  const event = getEvent(entity);
60
- const pointerEvent = event.get(type);
61
- if (pointerEvent?.opts.hoverText) {
62
- removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
95
+ const pointerEventList = event.get(type);
96
+ if (pointerEventList === undefined) {
97
+ return;
98
+ }
99
+ for (const button of pointerEventList.keys()) {
100
+ removePointerEvent(entity, getPointerEvent(type), button);
63
101
  }
64
102
  event.delete(type);
65
103
  }
66
104
  engine.addSystem(function EventSystem() {
67
- for (const [entity, event] of eventsMap) {
105
+ if (eventsMap.size === 0) {
106
+ return;
107
+ }
108
+ for (const entity of eventsMap.keys()) {
68
109
  if (engine.getEntityState(entity) === EntityState.Removed) {
69
110
  eventsMap.delete(entity);
111
+ }
112
+ }
113
+ for (const command of inputSystem.getInputCommands()) {
114
+ const entity = command.hit?.entityId;
115
+ if (entity === undefined) {
116
+ continue;
117
+ }
118
+ const entityMap = eventsMap.get(entity);
119
+ if (entityMap === undefined) {
70
120
  continue;
71
121
  }
72
- for (const [eventType, { cb, opts }] of event) {
73
- if (eventType === EventType.Click) {
74
- const command = inputSystem.getClick(opts.button, entity);
75
- if (command)
76
- checkNotThenable(cb(command.up), 'Click event returned a thenable. Only synchronous functions are allowed');
122
+ const typeMap = entityMap.get(getEventType(command.state));
123
+ if (typeMap) {
124
+ const data = typeMap.get(command.button);
125
+ if (data) {
126
+ checkNotThenable(data.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
77
127
  }
78
- if (eventType === EventType.Down ||
79
- eventType === EventType.Up ||
80
- eventType === EventType.HoverEnter ||
81
- eventType === EventType.HoverLeave) {
82
- const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
83
- if (command) {
84
- checkNotThenable(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
128
+ const anyData = typeMap.get(3 /* InputAction.IA_ANY */);
129
+ if (anyData) {
130
+ checkNotThenable(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
131
+ }
132
+ }
133
+ // check clicks separately
134
+ if (command.state === 0 /* PointerEventType.PET_UP */) {
135
+ const clickMap = entityMap.get(EventType.Click);
136
+ if (clickMap) {
137
+ const data = clickMap.get(command.button);
138
+ if (data && inputSystem.getClick(command.button, entity)) {
139
+ checkNotThenable(data.cb(command), 'Click event returned a thenable. Only synchronous functions are allowed');
140
+ }
141
+ const anyData = clickMap.get(3 /* InputAction.IA_ANY */);
142
+ if (anyData && inputSystem.getClick(command.button, entity)) {
143
+ checkNotThenable(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
85
144
  }
86
145
  }
87
146
  }
88
147
  }
89
148
  });
90
- const onPointerDown = (...args) => {
91
- const [data, cb, maybeOpts] = args;
92
- if (typeof data === 'number') {
93
- return onPointerDown({ entity: data, opts: maybeOpts ?? {} }, cb);
94
- }
95
- const { entity, opts } = data;
96
- const options = getDefaultOpts(opts);
97
- removeEvent(entity, EventType.Down);
98
- getEvent(entity).set(EventType.Down, { cb, opts: options });
99
- setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
100
- };
101
- const onPointerUp = (...args) => {
102
- const [data, cb, maybeOpts] = args;
103
- if (typeof data === 'number') {
104
- return onPointerUp({ entity: data, opts: maybeOpts ?? {} }, cb);
105
- }
106
- const { entity, opts } = data;
107
- const options = getDefaultOpts(opts);
108
- removeEvent(entity, EventType.Up);
109
- getEvent(entity).set(EventType.Up, { cb, opts: options });
110
- setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options);
111
- };
112
- const onPointerHoverEnter = (...args) => {
113
- const [data, cb] = args;
114
- const { entity, opts } = data;
115
- const options = getDefaultOpts(opts);
116
- removeEvent(entity, EventType.HoverEnter);
117
- getEvent(entity).set(EventType.HoverEnter, { cb, opts: options });
118
- setPointerEvent(entity, 2 /* PointerEventType.PET_HOVER_ENTER */, options);
119
- };
120
- const onPointerHoverLeave = (...args) => {
121
- const [data, cb] = args;
122
- const { entity, opts } = data;
123
- const options = getDefaultOpts(opts);
124
- removeEvent(entity, EventType.HoverLeave);
125
- getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
126
- setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
149
+ // return a function with the correct event type.
150
+ // we use onPointerDown as the "archetype" for the returned function, but it fits with
151
+ // all the onPointer* declarations
152
+ const onPointerFunction = (ty) => {
153
+ return (arg0, arg1, arg2) => {
154
+ let entity;
155
+ let optsList;
156
+ if (typeof arg0 === 'number') {
157
+ // called as onPointerDown(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void
158
+ entity = arg0;
159
+ const cb = arg1;
160
+ const opts = arg2;
161
+ optsList = [{ cb, ...getDefaultOpts(opts) }];
162
+ }
163
+ else if (typeof arg1 === 'function') {
164
+ // called as onPointerDown(pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> }, cb: EventSystemCallback): void
165
+ const { entity: e, opts } = arg0;
166
+ const cb = arg1;
167
+ entity = e;
168
+ optsList = [{ cb, ...getDefaultOpts(opts) }];
169
+ }
170
+ else {
171
+ // called as onPointerDown(pointerData: { entity: Entity; optsList: EventSystemOptionsCallback[] }): void
172
+ const { entity: e, optsList: o } = arg0;
173
+ entity = e;
174
+ optsList = o;
175
+ }
176
+ const previous = getEvent(entity).get(ty) ?? new Map();
177
+ const callbacks = new Map();
178
+ for (const opts of optsList) {
179
+ const prevOpts = previous.get(opts.button);
180
+ if (prevOpts !== undefined) {
181
+ if (prevOpts.hoverText !== opts.hoverText ||
182
+ prevOpts.maxDistance !== opts.maxDistance ||
183
+ prevOpts.showFeedback !== opts.showFeedback ||
184
+ prevOpts.showHighlight !== opts.showHighlight) {
185
+ removePointerEvent(entity, getPointerEvent(ty), opts.button);
186
+ setPointerEvent(entity, getPointerEvent(ty), opts);
187
+ }
188
+ }
189
+ else {
190
+ setPointerEvent(entity, getPointerEvent(ty), opts);
191
+ }
192
+ callbacks.set(opts.button, opts);
193
+ }
194
+ for (const button of previous.keys()) {
195
+ if (!callbacks.has(button)) {
196
+ removePointerEvent(entity, getPointerEvent(ty), button);
197
+ }
198
+ }
199
+ getEvent(entity).set(ty, callbacks);
200
+ };
127
201
  };
128
202
  return {
129
203
  removeOnClick(entity) {
@@ -141,18 +215,22 @@ export function createPointerEventsSystem(engine, inputSystem) {
141
215
  removeOnPointerHoverLeave(entity) {
142
216
  removeEvent(entity, EventType.HoverLeave);
143
217
  },
144
- onClick(value, cb) {
145
- const { entity } = value;
146
- const options = getDefaultOpts(value.opts);
147
- // Clear previous event with over feedback included
148
- removeEvent(entity, EventType.Click);
149
- // Set new event
150
- getEvent(entity).set(EventType.Click, { cb, opts: options });
151
- setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
218
+ removeOnPointerDrag(entity) {
219
+ removeEvent(entity, EventType.Drag);
220
+ },
221
+ removeOnPointerDragLocked(entity) {
222
+ removeEvent(entity, EventType.DragLocked);
223
+ },
224
+ removeOnPointerDragEnd(entity) {
225
+ removeEvent(entity, EventType.DragEnd);
152
226
  },
153
- onPointerDown,
154
- onPointerUp,
155
- onPointerHoverEnter,
156
- onPointerHoverLeave
227
+ onClick: onPointerFunction(EventType.Click),
228
+ onPointerDown: onPointerFunction(EventType.Down),
229
+ onPointerUp: onPointerFunction(EventType.Up),
230
+ onPointerHoverEnter: onPointerFunction(EventType.HoverEnter),
231
+ onPointerHoverLeave: onPointerFunction(EventType.HoverLeave),
232
+ onPointerDrag: onPointerFunction(EventType.Drag),
233
+ onPointerDragLocked: onPointerFunction(EventType.DragLocked),
234
+ onPointerDragEnd: onPointerFunction(EventType.DragEnd)
157
235
  };
158
236
  }
@@ -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,8 @@ export type RaycastSystemOptions = {
14
14
  queryType: RaycastQueryType;
15
15
  continuous?: boolean | undefined;
16
16
  collisionMask?: number | undefined;
17
+ shape?: RaycastShape | undefined;
18
+ includeWorld?: boolean | undefined;
17
19
  };
18
20
  export type LocalDirectionRaycastSystemOptions = {
19
21
  direction?: Vector3;
@@ -58,6 +58,8 @@ export function createRaycastSystem(engine) {
58
58
  raycast.direction = raycastValue.directionRawValue;
59
59
  raycast.continuous = raycastValue.continuous;
60
60
  raycast.queryType = raycastValue.queryType;
61
+ raycast.shape = raycastValue.shape;
62
+ raycast.includeWorld = raycastValue.includeWorld;
61
63
  entitiesCallbackResultMap.set(entity, { callback: callback });
62
64
  };
63
65
  nextTickRaycasts.push(onNextTick);
@@ -0,0 +1,10 @@
1
+ import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
+ import { PBAvatarEquippedData } from '../generated/pb/decentraland/sdk/components/avatar_equipped_data.gen';
3
+ /**
4
+ * @public
5
+ */
6
+ export type AvatarEquippedDataComponentDefinitionExtended = LastWriteWinElementSetComponentDefinition<AvatarEquippedDataType>;
7
+ export type AvatarEquippedDataType = Omit<PBAvatarEquippedData, 'forceRender'> & {
8
+ forceRender?: string[] | undefined;
9
+ };
10
+ export declare function defineAvatarEquippedDataComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): AvatarEquippedDataComponentDefinitionExtended;
@@ -0,0 +1,19 @@
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
+ if (value.forceRender === undefined) {
10
+ origSerialize({ forceRender: [], ...value }, builder);
11
+ }
12
+ else {
13
+ origSerialize(value, builder);
14
+ }
15
+ };
16
+ const theComponent = engine.defineComponentFromSchema('core::AvatarEquippedData', patchedSchema);
17
+ return theComponent;
18
+ }
19
+ exports.defineAvatarEquippedDataComponent = defineAvatarEquippedDataComponent;
@@ -0,0 +1,10 @@
1
+ import { IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
+ import { PBAvatarShape } from '../generated/pb/decentraland/sdk/components/avatar_shape.gen';
3
+ /**
4
+ * @public
5
+ */
6
+ export type AvatarShapeComponentDefinitionExtended = LastWriteWinElementSetComponentDefinition<AvatarShapeType>;
7
+ export type AvatarShapeType = Omit<PBAvatarShape, 'forceRender'> & {
8
+ forceRender?: string[] | undefined;
9
+ };
10
+ export declare function defineAvatarShapeComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): AvatarShapeComponentDefinitionExtended;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineAvatarShapeComponent = void 0;
4
+ const AvatarShape_gen_1 = require("../generated/AvatarShape.gen");
5
+ function defineAvatarShapeComponent(engine) {
6
+ const patchedSchema = { ...AvatarShape_gen_1.AvatarShapeSchema };
7
+ const origSerialize = patchedSchema.serialize;
8
+ patchedSchema.serialize = (value, builder) => {
9
+ if (value.forceRender === undefined) {
10
+ origSerialize({ forceRender: [], ...value }, builder);
11
+ }
12
+ else {
13
+ origSerialize(value, builder);
14
+ }
15
+ };
16
+ const theComponent = engine.defineComponentFromSchema('core::AvatarShape', patchedSchema);
17
+ return theComponent;
18
+ }
19
+ exports.defineAvatarShapeComponent = defineAvatarShapeComponent;
@@ -34,5 +34,13 @@ export interface MeshColliderComponentDefinitionExtended extends LastWriteWinEle
34
34
  * @param colliderMask - the set of layer where the collider reacts, default: Physics and Pointer
35
35
  */
36
36
  setSphere(entity: Entity, colliderLayers?: ColliderLayer | ColliderLayer[]): void;
37
+ /**
38
+ * @public
39
+ * Set a gltf internal mesh in the MeshCollider component
40
+ * @param entity - entity to create or replace the MeshRenderer component
41
+ * @param source - the path to the gltf
42
+ * @param meshName - the name of the mesh in the gltf
43
+ */
44
+ setGltfMesh(entity: Entity, source: string, meshName: string, colliderLayers?: ColliderLayer | ColliderLayer[]): void;
37
45
  }
38
46
  export declare function defineMeshColliderComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): MeshColliderComponentDefinitionExtended;
@@ -37,6 +37,12 @@ function defineMeshColliderComponent(engine) {
37
37
  mesh: { $case: 'sphere', sphere: {} },
38
38
  collisionMask: getCollisionMask(colliderLayers)
39
39
  });
40
+ },
41
+ setGltfMesh(entity, source, meshName, colliderLayers) {
42
+ theComponent.createOrReplace(entity, {
43
+ mesh: { $case: 'gltf', gltf: { gltfSrc: source, name: meshName } },
44
+ collisionMask: getCollisionMask(colliderLayers)
45
+ });
40
46
  }
41
47
  };
42
48
  }
@@ -32,5 +32,13 @@ export interface MeshRendererComponentDefinitionExtended extends LastWriteWinEle
32
32
  * @param entity - entity to create or replace the MeshRenderer component
33
33
  */
34
34
  setSphere(entity: Entity): void;
35
+ /**
36
+ * @public
37
+ * Set a gltf internal mesh in the MeshRenderer component
38
+ * @param entity - entity to create or replace the MeshRenderer component
39
+ * @param source - the path to the gltf
40
+ * @param meshName - the name of the mesh in the gltf
41
+ */
42
+ setGltfMesh(entity: Entity, source: string, meshName: string): void;
35
43
  }
36
44
  export declare function defineMeshRendererComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): MeshRendererComponentDefinitionExtended;
@@ -25,6 +25,11 @@ function defineMeshRendererComponent(engine) {
25
25
  theComponent.createOrReplace(entity, {
26
26
  mesh: { $case: 'sphere', sphere: {} }
27
27
  });
28
+ },
29
+ setGltfMesh(entity, source, meshName) {
30
+ theComponent.createOrReplace(entity, {
31
+ mesh: { $case: 'gltf', gltf: { gltfSrc: source, name: meshName } }
32
+ });
28
33
  }
29
34
  };
30
35
  }
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AvatarLocomotionSettingsSchema = void 0;
4
+ const avatar_locomotion_settings_gen_1 = require("./pb/decentraland/sdk/components/avatar_locomotion_settings.gen");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.AvatarLocomotionSettingsSchema = {
9
+ COMPONENT_ID: 1211,
10
+ serialize(value, builder) {
11
+ const writer = avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.encode(value);
12
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
13
+ builder.writeBuffer(buffer, false);
14
+ },
15
+ deserialize(reader) {
16
+ return avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.decode(reader.buffer(), reader.remainingBytes());
17
+ },
18
+ create() {
19
+ // TODO: this is a hack.
20
+ return avatar_locomotion_settings_gen_1.PBAvatarLocomotionSettings.decode(new Uint8Array());
21
+ },
22
+ jsonSchema: {
23
+ type: "object",
24
+ properties: {},
25
+ serializationType: "protocol-buffer",
26
+ protocolBuffer: "PBAvatarLocomotionSettings"
27
+ }
28
+ };