@dcl/ecs 7.13.1-19516109426.commit-e1e79aa → 7.13.1-19549129049.commit-e7fb168

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