@dcl/ecs 7.13.1-19324737285.commit-cb42004 → 7.13.1-19516109426.commit-e1e79aa

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 (167) 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/CameraLayer.gen.d.ts +1 -0
  10. package/dist/components/generated/CameraLayer.gen.js +25 -0
  11. package/dist/components/generated/CameraLayers.gen.d.ts +1 -0
  12. package/dist/components/generated/CameraLayers.gen.js +25 -0
  13. package/dist/components/generated/GlobalLight.gen.d.ts +1 -0
  14. package/dist/components/generated/GlobalLight.gen.js +25 -0
  15. package/dist/components/generated/GltfNode.gen.d.ts +1 -0
  16. package/dist/components/generated/GltfNode.gen.js +25 -0
  17. package/dist/components/generated/GltfNodeState.gen.d.ts +1 -0
  18. package/dist/components/generated/GltfNodeState.gen.js +25 -0
  19. package/dist/components/generated/TextureCamera.gen.d.ts +1 -0
  20. package/dist/components/generated/TextureCamera.gen.js +25 -0
  21. package/dist/components/generated/UiCanvas.gen.d.ts +1 -0
  22. package/dist/components/generated/UiCanvas.gen.js +25 -0
  23. package/dist/components/generated/UiScrollResult.gen.d.ts +1 -0
  24. package/dist/components/generated/UiScrollResult.gen.js +25 -0
  25. package/dist/components/generated/component-names.gen.js +8 -0
  26. package/dist/components/generated/global.gen.d.ts +16 -0
  27. package/dist/components/generated/global.gen.js +8 -0
  28. package/dist/components/generated/index.gen.d.ts +32 -0
  29. package/dist/components/generated/index.gen.js +40 -0
  30. package/dist/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  31. package/dist/components/generated/pb/decentraland/common/texture.gen.js +65 -0
  32. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  33. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  34. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +43 -0
  35. package/dist/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +151 -1
  36. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  37. package/dist/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  38. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  39. package/dist/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +104 -0
  40. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  41. package/dist/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +50 -0
  42. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +37 -1
  43. package/dist/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +119 -1
  44. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +4 -1
  45. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +3 -0
  46. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  47. package/dist/components/generated/pb/decentraland/sdk/components/global_light.gen.js +61 -0
  48. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  49. package/dist/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  50. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  51. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +41 -0
  52. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  53. package/dist/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +59 -0
  54. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  55. package/dist/components/generated/pb/decentraland/sdk/components/material.gen.js +57 -1
  56. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  57. package/dist/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +56 -0
  58. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  59. package/dist/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +56 -0
  60. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  61. package/dist/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  62. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  63. package/dist/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +191 -0
  64. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  65. package/dist/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +60 -0
  66. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  67. package/dist/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +42 -0
  68. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  69. package/dist/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +20 -0
  70. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  71. package/dist/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +90 -0
  72. package/dist/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.d.ts +0 -3
  73. package/dist/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.js +1 -10
  74. package/dist/components/index.d.ts +11 -7
  75. package/dist/components/index.js +11 -5
  76. package/dist/components/types.d.ts +2 -0
  77. package/dist/engine/input.d.ts +6 -0
  78. package/dist/engine/input.js +7 -1
  79. package/dist/runtime/initialization/index.d.ts +1 -1
  80. package/dist/runtime/initialization/index.js +1 -1
  81. package/dist/systems/events.d.ts +100 -1
  82. package/dist/systems/events.js +143 -65
  83. package/dist/systems/tween.js +63 -88
  84. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +10 -0
  85. package/dist-cjs/components/extended/AvatarEquippedData.js +19 -0
  86. package/dist-cjs/components/extended/AvatarShape.d.ts +10 -0
  87. package/dist-cjs/components/extended/AvatarShape.js +19 -0
  88. package/dist-cjs/components/extended/MeshCollider.d.ts +8 -0
  89. package/dist-cjs/components/extended/MeshCollider.js +6 -0
  90. package/dist-cjs/components/extended/MeshRenderer.d.ts +8 -0
  91. package/dist-cjs/components/extended/MeshRenderer.js +5 -0
  92. package/dist-cjs/components/generated/CameraLayer.gen.d.ts +1 -0
  93. package/dist-cjs/components/generated/CameraLayer.gen.js +28 -0
  94. package/dist-cjs/components/generated/CameraLayers.gen.d.ts +1 -0
  95. package/dist-cjs/components/generated/CameraLayers.gen.js +28 -0
  96. package/dist-cjs/components/generated/GlobalLight.gen.d.ts +1 -0
  97. package/dist-cjs/components/generated/GlobalLight.gen.js +28 -0
  98. package/dist-cjs/components/generated/GltfNode.gen.d.ts +1 -0
  99. package/dist-cjs/components/generated/GltfNode.gen.js +28 -0
  100. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +1 -0
  101. package/dist-cjs/components/generated/GltfNodeState.gen.js +28 -0
  102. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +1 -0
  103. package/dist-cjs/components/generated/TextureCamera.gen.js +28 -0
  104. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +1 -0
  105. package/dist-cjs/components/generated/UiCanvas.gen.js +28 -0
  106. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +1 -0
  107. package/dist-cjs/components/generated/UiScrollResult.gen.js +28 -0
  108. package/dist-cjs/components/generated/component-names.gen.js +8 -0
  109. package/dist-cjs/components/generated/global.gen.d.ts +16 -0
  110. package/dist-cjs/components/generated/global.gen.js +10 -1
  111. package/dist-cjs/components/generated/index.gen.d.ts +32 -0
  112. package/dist-cjs/components/generated/index.gen.js +50 -2
  113. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  114. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +66 -1
  115. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  116. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  117. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +43 -0
  118. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +152 -2
  119. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  120. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  121. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  122. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +110 -0
  123. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  124. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +56 -0
  125. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +37 -1
  126. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +120 -2
  127. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +4 -1
  128. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +3 -0
  129. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  130. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +67 -0
  131. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  132. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  133. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  134. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +47 -0
  135. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  136. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +65 -0
  137. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  138. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +58 -2
  139. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  140. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +57 -1
  141. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  142. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +57 -1
  143. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  144. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  145. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  146. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +197 -0
  147. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  148. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +66 -0
  149. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  150. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +48 -0
  151. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  152. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +20 -0
  153. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  154. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +91 -1
  155. package/dist-cjs/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.d.ts +0 -3
  156. package/dist-cjs/components/generated/pb/decentraland/sdk/components/virtual_camera.gen.js +1 -10
  157. package/dist-cjs/components/index.d.ts +11 -7
  158. package/dist-cjs/components/index.js +15 -7
  159. package/dist-cjs/components/types.d.ts +2 -0
  160. package/dist-cjs/engine/input.d.ts +6 -0
  161. package/dist-cjs/engine/input.js +7 -1
  162. package/dist-cjs/runtime/initialization/index.d.ts +1 -1
  163. package/dist-cjs/runtime/initialization/index.js +1 -1
  164. package/dist-cjs/systems/events.d.ts +100 -1
  165. package/dist-cjs/systems/events.js +143 -65
  166. package/dist-cjs/systems/tween.js +63 -88
  167. package/package.json +2 -2
@@ -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) {
@@ -52,77 +55,148 @@ export function createPointerEventsSystem(engine, inputSystem) {
52
55
  else if (eventType === EventType.HoverEnter) {
53
56
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
54
57
  }
58
+ else if (eventType === EventType.Drag) {
59
+ return 5 /* PointerEventType.PET_DRAG */;
60
+ }
61
+ else if (eventType === EventType.DragLocked) {
62
+ return 4 /* PointerEventType.PET_DRAG_LOCKED */;
63
+ }
64
+ else if (eventType === EventType.DragEnd) {
65
+ return 6 /* PointerEventType.PET_DRAG_END */;
66
+ }
55
67
  return 1 /* PointerEventType.PET_DOWN */;
56
68
  }
69
+ function getEventType(pet) {
70
+ if (pet === 0 /* PointerEventType.PET_UP */) {
71
+ return EventType.Up;
72
+ }
73
+ else if (pet === 2 /* PointerEventType.PET_HOVER_ENTER */) {
74
+ return EventType.HoverEnter;
75
+ }
76
+ else if (pet === 3 /* PointerEventType.PET_HOVER_LEAVE */) {
77
+ return EventType.HoverLeave;
78
+ }
79
+ else if (pet === 5 /* PointerEventType.PET_DRAG */) {
80
+ return EventType.Drag;
81
+ }
82
+ else if (pet === 4 /* PointerEventType.PET_DRAG_LOCKED */) {
83
+ return EventType.DragLocked;
84
+ }
85
+ else if (pet === 6 /* PointerEventType.PET_DRAG_END */) {
86
+ return EventType.DragEnd;
87
+ }
88
+ else {
89
+ return EventType.Down;
90
+ }
91
+ }
57
92
  function removeEvent(entity, type) {
58
93
  const event = getEvent(entity);
59
- const pointerEvent = event.get(type);
60
- if (pointerEvent?.opts.hoverText) {
61
- removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
94
+ const pointerEventList = event.get(type);
95
+ if (pointerEventList === undefined) {
96
+ return;
97
+ }
98
+ for (const button of pointerEventList.keys()) {
99
+ removePointerEvent(entity, getPointerEvent(type), button);
62
100
  }
63
101
  event.delete(type);
64
102
  }
65
103
  engine.addSystem(function EventSystem() {
66
- for (const [entity, event] of eventsMap) {
104
+ if (eventsMap.size === 0) {
105
+ return;
106
+ }
107
+ for (const entity of eventsMap.keys()) {
67
108
  if (engine.getEntityState(entity) === EntityState.Removed) {
68
109
  eventsMap.delete(entity);
110
+ }
111
+ }
112
+ for (const command of inputSystem.getInputCommands()) {
113
+ const entity = command.hit?.entityId;
114
+ if (entity === undefined) {
115
+ continue;
116
+ }
117
+ const entityMap = eventsMap.get(entity);
118
+ if (entityMap === undefined) {
69
119
  continue;
70
120
  }
71
- for (const [eventType, { cb, opts }] of event) {
72
- if (eventType === EventType.Click) {
73
- const command = inputSystem.getClick(opts.button, entity);
74
- if (command)
75
- checkNotThenable(cb(command.up), 'Click event returned a thenable. Only synchronous functions are allowed');
121
+ const typeMap = entityMap.get(getEventType(command.state));
122
+ if (typeMap) {
123
+ const data = typeMap.get(command.button);
124
+ if (data) {
125
+ checkNotThenable(data.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
76
126
  }
77
- if (eventType === EventType.Down ||
78
- eventType === EventType.Up ||
79
- eventType === EventType.HoverEnter ||
80
- eventType === EventType.HoverLeave) {
81
- const command = inputSystem.getInputCommand(opts.button, getPointerEvent(eventType), entity);
82
- if (command) {
83
- checkNotThenable(cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
127
+ const anyData = typeMap.get(3 /* InputAction.IA_ANY */);
128
+ if (anyData) {
129
+ checkNotThenable(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
130
+ }
131
+ }
132
+ // check clicks separately
133
+ if (command.state === 0 /* PointerEventType.PET_UP */) {
134
+ const clickMap = entityMap.get(EventType.Click);
135
+ if (clickMap) {
136
+ const data = clickMap.get(command.button);
137
+ if (data && inputSystem.getClick(command.button, entity)) {
138
+ checkNotThenable(data.cb(command), 'Click event returned a thenable. Only synchronous functions are allowed');
139
+ }
140
+ const anyData = clickMap.get(3 /* InputAction.IA_ANY */);
141
+ if (anyData && inputSystem.getClick(command.button, entity)) {
142
+ checkNotThenable(anyData.cb(command), 'Event handler returned a thenable. Only synchronous functions are allowed');
84
143
  }
85
144
  }
86
145
  }
87
146
  }
88
147
  });
89
- const onPointerDown = (...args) => {
90
- const [data, cb, maybeOpts] = args;
91
- if (typeof data === 'number') {
92
- return onPointerDown({ entity: data, opts: maybeOpts ?? {} }, cb);
93
- }
94
- const { entity, opts } = data;
95
- const options = getDefaultOpts(opts);
96
- removeEvent(entity, EventType.Down);
97
- getEvent(entity).set(EventType.Down, { cb, opts: options });
98
- setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
99
- };
100
- const onPointerUp = (...args) => {
101
- const [data, cb, maybeOpts] = args;
102
- if (typeof data === 'number') {
103
- return onPointerUp({ entity: data, opts: maybeOpts ?? {} }, cb);
104
- }
105
- const { entity, opts } = data;
106
- const options = getDefaultOpts(opts);
107
- removeEvent(entity, EventType.Up);
108
- getEvent(entity).set(EventType.Up, { cb, opts: options });
109
- setPointerEvent(entity, 0 /* PointerEventType.PET_UP */, options);
110
- };
111
- const onPointerHoverEnter = (...args) => {
112
- const [data, cb] = args;
113
- const { entity, opts } = data;
114
- const options = getDefaultOpts(opts);
115
- removeEvent(entity, EventType.HoverEnter);
116
- getEvent(entity).set(EventType.HoverEnter, { cb, opts: options });
117
- setPointerEvent(entity, 2 /* PointerEventType.PET_HOVER_ENTER */, options);
118
- };
119
- const onPointerHoverLeave = (...args) => {
120
- const [data, cb] = args;
121
- const { entity, opts } = data;
122
- const options = getDefaultOpts(opts);
123
- removeEvent(entity, EventType.HoverLeave);
124
- getEvent(entity).set(EventType.HoverLeave, { cb, opts: options });
125
- setPointerEvent(entity, 3 /* PointerEventType.PET_HOVER_LEAVE */, options);
148
+ // return a function with the correct event type.
149
+ // we use onPointerDown as the "archetype" for the returned function, but it fits with
150
+ // all the onPointer* declarations
151
+ const onPointerFunction = (ty) => {
152
+ return (arg0, arg1, arg2) => {
153
+ let entity;
154
+ let optsList;
155
+ if (typeof arg0 === 'number') {
156
+ // called as onPointerDown(entity: Entity, cb: EventSystemCallback, opts?: Partial<EventSystemOptions>): void
157
+ entity = arg0;
158
+ const cb = arg1;
159
+ const opts = arg2;
160
+ optsList = [{ cb, ...getDefaultOpts(opts) }];
161
+ }
162
+ else if (typeof arg1 === 'function') {
163
+ // called as onPointerDown(pointerData: { entity: Entity; opts?: Partial<EventSystemOptions> }, cb: EventSystemCallback): void
164
+ const { entity: e, opts } = arg0;
165
+ const cb = arg1;
166
+ entity = e;
167
+ optsList = [{ cb, ...getDefaultOpts(opts) }];
168
+ }
169
+ else {
170
+ // called as onPointerDown(pointerData: { entity: Entity; optsList: EventSystemOptionsCallback[] }): void
171
+ const { entity: e, optsList: o } = arg0;
172
+ entity = e;
173
+ optsList = o;
174
+ }
175
+ const previous = getEvent(entity).get(ty) ?? new Map();
176
+ const callbacks = new Map();
177
+ for (const opts of optsList) {
178
+ const prevOpts = previous.get(opts.button);
179
+ if (prevOpts !== undefined) {
180
+ if (prevOpts.hoverText !== opts.hoverText ||
181
+ prevOpts.maxDistance !== opts.maxDistance ||
182
+ prevOpts.showFeedback !== opts.showFeedback ||
183
+ prevOpts.showHighlight !== opts.showHighlight) {
184
+ removePointerEvent(entity, getPointerEvent(ty), opts.button);
185
+ setPointerEvent(entity, getPointerEvent(ty), opts);
186
+ }
187
+ }
188
+ else {
189
+ setPointerEvent(entity, getPointerEvent(ty), opts);
190
+ }
191
+ callbacks.set(opts.button, opts);
192
+ }
193
+ for (const button of previous.keys()) {
194
+ if (!callbacks.has(button)) {
195
+ removePointerEvent(entity, getPointerEvent(ty), button);
196
+ }
197
+ }
198
+ getEvent(entity).set(ty, callbacks);
199
+ };
126
200
  };
127
201
  return {
128
202
  removeOnClick(entity) {
@@ -140,18 +214,22 @@ export function createPointerEventsSystem(engine, inputSystem) {
140
214
  removeOnPointerHoverLeave(entity) {
141
215
  removeEvent(entity, EventType.HoverLeave);
142
216
  },
143
- onClick(value, cb) {
144
- const { entity } = value;
145
- const options = getDefaultOpts(value.opts);
146
- // Clear previous event with over feedback included
147
- removeEvent(entity, EventType.Click);
148
- // Set new event
149
- getEvent(entity).set(EventType.Click, { cb, opts: options });
150
- setPointerEvent(entity, 1 /* PointerEventType.PET_DOWN */, options);
217
+ removeOnPointerDrag(entity) {
218
+ removeEvent(entity, EventType.Drag);
219
+ },
220
+ removeOnPointerDragLocked(entity) {
221
+ removeEvent(entity, EventType.DragLocked);
222
+ },
223
+ removeOnPointerDragEnd(entity) {
224
+ removeEvent(entity, EventType.DragEnd);
151
225
  },
152
- onPointerDown,
153
- onPointerUp,
154
- onPointerHoverEnter,
155
- onPointerHoverLeave
226
+ onClick: onPointerFunction(EventType.Click),
227
+ onPointerDown: onPointerFunction(EventType.Down),
228
+ onPointerUp: onPointerFunction(EventType.Up),
229
+ onPointerHoverEnter: onPointerFunction(EventType.HoverEnter),
230
+ onPointerHoverLeave: onPointerFunction(EventType.HoverLeave),
231
+ onPointerDrag: onPointerFunction(EventType.Drag),
232
+ onPointerDragLocked: onPointerFunction(EventType.DragLocked),
233
+ onPointerDragEnd: onPointerFunction(EventType.DragEnd)
156
234
  };
157
235
  }
@@ -21,16 +21,16 @@ export function createTweenSystem(engine) {
21
21
  const tweenState = TweenState.getOrNull(entity);
22
22
  const tween = Tween.getOrNull(entity);
23
23
  const tweenCache = cache.get(entity);
24
- if (!tweenState || !tween || !tweenCache)
24
+ if (!tweenState || !tween)
25
25
  return false;
26
26
  /* istanbul ignore next */
27
27
  if (
28
28
  // Renderer notified that the tween is completed
29
- // Only consider it completed if the tween hasn't changed this frame (to avoid false positives after YOYO/sequence processing)
30
- ((tweenState.state === 1 /* TweenStateStatus.TS_COMPLETED */ && !tweenCache.changed) ||
31
- (tweenChanged(entity) && !tweenCache.changed)) &&
29
+ (tweenChanged(entity) || tweenState.state === 1 /* TweenStateStatus.TS_COMPLETED */) &&
32
30
  // Avoid sending isCompleted multiple times
33
- !tweenCache.completed) {
31
+ !tweenCache?.completed &&
32
+ // Amount of frames needed to consider a tween completed
33
+ (tweenCache?.frames ?? 0) > 2) {
34
34
  return true;
35
35
  }
36
36
  return false;
@@ -42,111 +42,86 @@ export function createTweenSystem(engine) {
42
42
  if ((currentTween && !prevTween) || (!currentTween && prevTween)) {
43
43
  return true;
44
44
  }
45
- if (!currentTween || !prevTween)
46
- return false;
47
45
  const currentBuff = new ReadWriteByteBuffer();
48
46
  Tween.schema.serialize(currentTween, currentBuff);
49
- const compareResult = dataCompare(currentBuff.toBinary(), prevTween);
50
- return compareResult !== 0;
47
+ const equal = dataCompare(currentBuff.toBinary(), prevTween);
48
+ return equal;
51
49
  }
52
- // System to manage cache (needed for tweenSystem.tweenCompleted() to work)
50
+ const restartTweens = [];
51
+ // Logic for sequence tweens
53
52
  engine.addSystem(() => {
53
+ for (const restart of restartTweens) {
54
+ restart();
55
+ }
56
+ restartTweens.length = 0;
54
57
  for (const [entity, tween] of engine.getEntitiesWith(Tween)) {
55
58
  if (tweenChanged(entity)) {
56
59
  const buffer = new ReadWriteByteBuffer();
57
60
  Tween.schema.serialize(tween, buffer);
58
61
  cache.set(entity, {
59
62
  tween: buffer.toBinary(),
63
+ frames: 0,
60
64
  completed: false,
61
65
  changed: true
62
66
  });
63
67
  continue;
64
68
  }
65
69
  const tweenCache = cache.get(entity);
66
- if (tweenCache) {
67
- tweenCache.changed = false;
68
- if (isCompleted(entity)) {
69
- // set the tween completed to avoid calling this again for the same tween
70
- tweenCache.completed = true;
70
+ tweenCache.frames += 1;
71
+ tweenCache.changed = false;
72
+ if (isCompleted(entity)) {
73
+ // Reset tween frames.
74
+ tweenCache.frames = 0;
75
+ // set the tween completed to avoid calling this again for the same tween
76
+ tweenCache.completed = true;
77
+ const tweenSequence = TweenSequence.getOrNull(entity);
78
+ if (!tweenSequence)
79
+ continue;
80
+ const { sequence } = tweenSequence;
81
+ if (sequence && sequence.length) {
82
+ const [nextTweenSequence, ...otherTweens] = sequence;
83
+ Tween.createOrReplace(entity, nextTweenSequence);
84
+ const mutableTweenHelper = TweenSequence.getMutable(entity);
85
+ mutableTweenHelper.sequence = otherTweens;
86
+ if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {
87
+ mutableTweenHelper.sequence.push(tween);
88
+ }
89
+ }
90
+ else if (tweenSequence.loop === 1 /* TweenLoop.TL_YOYO */) {
91
+ Tween.createOrReplace(entity, backwardsTween(tween));
92
+ }
93
+ else if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {
94
+ Tween.deleteFrom(entity);
95
+ cache.delete(entity);
96
+ restartTweens.push(() => {
97
+ Tween.createOrReplace(entity, tween);
98
+ });
71
99
  }
72
100
  }
73
101
  }
74
102
  }, Number.NEGATIVE_INFINITY);
75
- function initializeTweenSequenceSystem() {
76
- const restartTweens = [];
77
- function backwardsTween(tween) {
78
- if (tween.mode?.$case === 'move' && tween.mode.move) {
79
- return { ...tween, mode: { ...tween.mode, move: { start: tween.mode.move.end, end: tween.mode.move.start } } };
80
- }
81
- if (tween.mode?.$case === 'rotate' && tween.mode.rotate) {
82
- return {
83
- ...tween,
84
- mode: { ...tween.mode, rotate: { start: tween.mode.rotate.end, end: tween.mode.rotate.start } }
85
- };
86
- }
87
- if (tween.mode?.$case === 'scale' && tween.mode.scale) {
88
- return { ...tween, mode: { ...tween.mode, scale: { start: tween.mode.scale.end, end: tween.mode.scale.start } } };
89
- }
90
- if (tween.mode?.$case === 'textureMove' && tween.mode.textureMove) {
91
- return {
92
- ...tween,
93
- mode: { ...tween.mode, textureMove: { start: tween.mode.textureMove.end, end: tween.mode.textureMove.start } }
94
- };
95
- }
96
- /* istanbul ignore next */
97
- throw new Error('Invalid tween');
103
+ function backwardsTween(tween) {
104
+ if (tween.mode?.$case === 'move' && tween.mode.move) {
105
+ return { ...tween, mode: { ...tween.mode, move: { start: tween.mode.move.end, end: tween.mode.move.start } } };
98
106
  }
99
- // Logic for sequence tweens
100
- engine.addSystem(() => {
101
- for (const restart of restartTweens) {
102
- restart();
103
- }
104
- restartTweens.length = 0;
105
- for (const [entity, tween] of engine.getEntitiesWith(Tween)) {
106
- const tweenCache = cache.get(entity);
107
- if (!tweenCache)
108
- continue;
109
- // Only process tween sequences if the tween is completed
110
- if (tweenCache.completed) {
111
- const tweenSequence = TweenSequence.getOrNull(entity);
112
- if (!tweenSequence)
113
- continue;
114
- const { sequence } = tweenSequence;
115
- if (sequence && sequence.length) {
116
- const [nextTweenSequence, ...otherTweens] = sequence;
117
- Tween.createOrReplace(entity, nextTweenSequence);
118
- const mutableTweenHelper = TweenSequence.getMutable(entity);
119
- mutableTweenHelper.sequence = otherTweens;
120
- if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {
121
- mutableTweenHelper.sequence.push(tween);
122
- }
123
- // Reset completed flag for the next tween in sequence
124
- // Mark as changed so the cache system will detect the change and reset the cache properly
125
- tweenCache.completed = false;
126
- tweenCache.changed = true;
127
- }
128
- else if (tweenSequence.loop === 1 /* TweenLoop.TL_YOYO */) {
129
- Tween.createOrReplace(entity, backwardsTween(tween));
130
- // Reset completed flag for the backwards tween
131
- // Mark as changed so the cache system will detect the change and reset the cache properly
132
- tweenCache.completed = false;
133
- tweenCache.changed = true;
134
- }
135
- else if (tweenSequence.loop === 0 /* TweenLoop.TL_RESTART */) {
136
- Tween.deleteFrom(entity);
137
- cache.delete(entity);
138
- restartTweens.push(() => {
139
- Tween.createOrReplace(entity, tween);
140
- });
141
- }
142
- }
143
- }
144
- }, Number.NEGATIVE_INFINITY);
107
+ if (tween.mode?.$case === 'rotate' && tween.mode.rotate) {
108
+ return {
109
+ ...tween,
110
+ mode: { ...tween.mode, rotate: { start: tween.mode.rotate.end, end: tween.mode.rotate.start } }
111
+ };
112
+ }
113
+ if (tween.mode?.$case === 'scale' && tween.mode.scale) {
114
+ return { ...tween, mode: { ...tween.mode, scale: { start: tween.mode.scale.end, end: tween.mode.scale.start } } };
115
+ }
116
+ if (tween.mode?.$case === 'textureMove' && tween.mode.textureMove) {
117
+ return {
118
+ ...tween,
119
+ mode: { ...tween.mode, textureMove: { start: tween.mode.textureMove.end, end: tween.mode.textureMove.start } }
120
+ };
121
+ }
122
+ /* istanbul ignore next */
123
+ throw new Error('Invalid tween');
145
124
  }
146
- // Some Explorers may not inject the flag and TweenSequence logic must be enabled in that case
147
- const enableTweenSequenceLogic = globalThis.ENABLE_SDK_TWEEN_SEQUENCE;
148
- if (enableTweenSequenceLogic !== false)
149
- initializeTweenSequenceSystem();
150
125
  const tweenSystem = {
151
126
  // This event is fired only once per tween
152
127
  tweenCompleted: isCompleted
@@ -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 @@
1
+ export {};
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CameraLayerSchema = void 0;
4
+ const camera_layer_gen_1 = require("./pb/decentraland/sdk/components/camera_layer.gen");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.CameraLayerSchema = {
9
+ COMPONENT_ID: 1211,
10
+ serialize(value, builder) {
11
+ const writer = camera_layer_gen_1.PBCameraLayer.encode(value);
12
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
13
+ builder.writeBuffer(buffer, false);
14
+ },
15
+ deserialize(reader) {
16
+ return camera_layer_gen_1.PBCameraLayer.decode(reader.buffer(), reader.remainingBytes());
17
+ },
18
+ create() {
19
+ // TODO: this is a hack.
20
+ return camera_layer_gen_1.PBCameraLayer.decode(new Uint8Array());
21
+ },
22
+ jsonSchema: {
23
+ type: "object",
24
+ properties: {},
25
+ serializationType: "protocol-buffer",
26
+ protocolBuffer: "PBCameraLayer"
27
+ }
28
+ };
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CameraLayersSchema = void 0;
4
+ const camera_layers_gen_1 = require("./pb/decentraland/sdk/components/camera_layers.gen");
5
+ /**
6
+ * @internal
7
+ */
8
+ exports.CameraLayersSchema = {
9
+ COMPONENT_ID: 1208,
10
+ serialize(value, builder) {
11
+ const writer = camera_layers_gen_1.PBCameraLayers.encode(value);
12
+ const buffer = new Uint8Array(writer.finish(), 0, writer.len);
13
+ builder.writeBuffer(buffer, false);
14
+ },
15
+ deserialize(reader) {
16
+ return camera_layers_gen_1.PBCameraLayers.decode(reader.buffer(), reader.remainingBytes());
17
+ },
18
+ create() {
19
+ // TODO: this is a hack.
20
+ return camera_layers_gen_1.PBCameraLayers.decode(new Uint8Array());
21
+ },
22
+ jsonSchema: {
23
+ type: "object",
24
+ properties: {},
25
+ serializationType: "protocol-buffer",
26
+ protocolBuffer: "PBCameraLayers"
27
+ }
28
+ };
@@ -0,0 +1 @@
1
+ export {};