@dcl/ecs 7.13.0 → 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 (163) 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/index.d.ts +11 -7
  73. package/dist/components/index.js +11 -5
  74. package/dist/components/types.d.ts +2 -0
  75. package/dist/engine/input.d.ts +6 -0
  76. package/dist/engine/input.js +7 -1
  77. package/dist/runtime/initialization/index.d.ts +1 -1
  78. package/dist/runtime/initialization/index.js +1 -1
  79. package/dist/systems/events.d.ts +100 -1
  80. package/dist/systems/events.js +143 -65
  81. package/dist/systems/tween.js +63 -88
  82. package/dist-cjs/components/extended/AvatarEquippedData.d.ts +10 -0
  83. package/dist-cjs/components/extended/AvatarEquippedData.js +19 -0
  84. package/dist-cjs/components/extended/AvatarShape.d.ts +10 -0
  85. package/dist-cjs/components/extended/AvatarShape.js +19 -0
  86. package/dist-cjs/components/extended/MeshCollider.d.ts +8 -0
  87. package/dist-cjs/components/extended/MeshCollider.js +6 -0
  88. package/dist-cjs/components/extended/MeshRenderer.d.ts +8 -0
  89. package/dist-cjs/components/extended/MeshRenderer.js +5 -0
  90. package/dist-cjs/components/generated/CameraLayer.gen.d.ts +1 -0
  91. package/dist-cjs/components/generated/CameraLayer.gen.js +28 -0
  92. package/dist-cjs/components/generated/CameraLayers.gen.d.ts +1 -0
  93. package/dist-cjs/components/generated/CameraLayers.gen.js +28 -0
  94. package/dist-cjs/components/generated/GlobalLight.gen.d.ts +1 -0
  95. package/dist-cjs/components/generated/GlobalLight.gen.js +28 -0
  96. package/dist-cjs/components/generated/GltfNode.gen.d.ts +1 -0
  97. package/dist-cjs/components/generated/GltfNode.gen.js +28 -0
  98. package/dist-cjs/components/generated/GltfNodeState.gen.d.ts +1 -0
  99. package/dist-cjs/components/generated/GltfNodeState.gen.js +28 -0
  100. package/dist-cjs/components/generated/TextureCamera.gen.d.ts +1 -0
  101. package/dist-cjs/components/generated/TextureCamera.gen.js +28 -0
  102. package/dist-cjs/components/generated/UiCanvas.gen.d.ts +1 -0
  103. package/dist-cjs/components/generated/UiCanvas.gen.js +28 -0
  104. package/dist-cjs/components/generated/UiScrollResult.gen.d.ts +1 -0
  105. package/dist-cjs/components/generated/UiScrollResult.gen.js +28 -0
  106. package/dist-cjs/components/generated/component-names.gen.js +8 -0
  107. package/dist-cjs/components/generated/global.gen.d.ts +16 -0
  108. package/dist-cjs/components/generated/global.gen.js +10 -1
  109. package/dist-cjs/components/generated/index.gen.d.ts +32 -0
  110. package/dist-cjs/components/generated/index.gen.js +50 -2
  111. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.d.ts +20 -0
  112. package/dist-cjs/components/generated/pb/decentraland/common/texture.gen.js +66 -1
  113. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +2 -0
  114. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +10 -1
  115. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.d.ts +43 -0
  116. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_modifier_area.gen.js +152 -2
  117. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.d.ts +2 -0
  118. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_shape.gen.js +10 -0
  119. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.d.ts +30 -0
  120. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layer.gen.js +110 -0
  121. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.d.ts +14 -0
  122. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_layers.gen.js +56 -0
  123. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.d.ts +37 -1
  124. package/dist-cjs/components/generated/pb/decentraland/sdk/components/camera_mode_area.gen.js +120 -2
  125. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +4 -1
  126. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +3 -0
  127. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.d.ts +34 -0
  128. package/dist-cjs/components/generated/pb/decentraland/sdk/components/global_light.gen.js +67 -0
  129. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.d.ts +19 -0
  130. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_container_loading_state.gen.js +46 -1
  131. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.d.ts +50 -0
  132. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node.gen.js +47 -0
  133. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.d.ts +27 -0
  134. package/dist-cjs/components/generated/pb/decentraland/sdk/components/gltf_node_state.gen.js +65 -0
  135. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.d.ts +22 -0
  136. package/dist-cjs/components/generated/pb/decentraland/sdk/components/material.gen.js +58 -2
  137. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.d.ts +20 -0
  138. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_collider.gen.js +57 -1
  139. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.d.ts +21 -3
  140. package/dist-cjs/components/generated/pb/decentraland/sdk/components/mesh_renderer.gen.js +57 -1
  141. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.d.ts +8 -2
  142. package/dist-cjs/components/generated/pb/decentraland/sdk/components/primary_pointer_info.gen.js +3 -0
  143. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.d.ts +74 -0
  144. package/dist-cjs/components/generated/pb/decentraland/sdk/components/texture_camera.gen.js +197 -0
  145. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.d.ts +19 -0
  146. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_canvas.gen.js +66 -0
  147. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.d.ts +15 -0
  148. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_scroll_result.gen.js +48 -0
  149. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.d.ts +4 -0
  150. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_text.gen.js +20 -0
  151. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.d.ts +35 -0
  152. package/dist-cjs/components/generated/pb/decentraland/sdk/components/ui_transform.gen.js +91 -1
  153. package/dist-cjs/components/index.d.ts +11 -7
  154. package/dist-cjs/components/index.js +15 -7
  155. package/dist-cjs/components/types.d.ts +2 -0
  156. package/dist-cjs/engine/input.d.ts +6 -0
  157. package/dist-cjs/engine/input.js +7 -1
  158. package/dist-cjs/runtime/initialization/index.d.ts +1 -1
  159. package/dist-cjs/runtime/initialization/index.js +1 -1
  160. package/dist-cjs/systems/events.d.ts +100 -1
  161. package/dist-cjs/systems/events.js +143 -65
  162. package/dist-cjs/systems/tween.js +63 -88
  163. package/package.json +2 -2
@@ -45,6 +45,9 @@ 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";
48
51
  })(EventType || (EventType = {}));
49
52
  const eventsMap = new Map();
50
53
  function getEvent(entity) {
@@ -79,77 +82,148 @@ function createPointerEventsSystem(engine, inputSystem) {
79
82
  else if (eventType === EventType.HoverEnter) {
80
83
  return 2 /* PointerEventType.PET_HOVER_ENTER */;
81
84
  }
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
+ }
82
94
  return 1 /* PointerEventType.PET_DOWN */;
83
95
  }
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
+ }
84
119
  function removeEvent(entity, type) {
85
120
  const event = getEvent(entity);
86
- const pointerEvent = event.get(type);
87
- if (pointerEvent?.opts.hoverText) {
88
- removePointerEvent(entity, getPointerEvent(type), pointerEvent.opts.button);
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);
89
127
  }
90
128
  event.delete(type);
91
129
  }
92
130
  engine.addSystem(function EventSystem() {
93
- for (const [entity, event] of eventsMap) {
131
+ if (eventsMap.size === 0) {
132
+ return;
133
+ }
134
+ for (const entity of eventsMap.keys()) {
94
135
  if (engine.getEntityState(entity) === entity_1.EntityState.Removed) {
95
136
  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) {
96
146
  continue;
97
147
  }
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');
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');
103
153
  }
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');
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');
111
170
  }
112
171
  }
113
172
  }
114
173
  }
115
174
  });
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);
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
+ };
153
227
  };
154
228
  return {
155
229
  removeOnClick(entity) {
@@ -167,19 +241,23 @@ function createPointerEventsSystem(engine, inputSystem) {
167
241
  removeOnPointerHoverLeave(entity) {
168
242
  removeEvent(entity, EventType.HoverLeave);
169
243
  },
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);
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);
178
252
  },
179
- onPointerDown,
180
- onPointerUp,
181
- onPointerHoverEnter,
182
- onPointerHoverLeave
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)
183
261
  };
184
262
  }
185
263
  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 || !tweenCache)
50
+ if (!tweenState || !tween)
51
51
  return false;
52
52
  /* istanbul ignore next */
53
53
  if (
54
54
  // Renderer notified that the tween is 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)) &&
55
+ (tweenChanged(entity) || tweenState.state === 1 /* TweenStateStatus.TS_COMPLETED */) &&
58
56
  // Avoid sending isCompleted multiple times
59
- !tweenCache.completed) {
57
+ !tweenCache?.completed &&
58
+ // Amount of frames needed to consider a tween completed
59
+ (tweenCache?.frames ?? 0) > 2) {
60
60
  return true;
61
61
  }
62
62
  return false;
@@ -68,111 +68,86 @@ function createTweenSystem(engine) {
68
68
  if ((currentTween && !prevTween) || (!currentTween && prevTween)) {
69
69
  return true;
70
70
  }
71
- if (!currentTween || !prevTween)
72
- return false;
73
71
  const currentBuff = new ByteBuffer_1.ReadWriteByteBuffer();
74
72
  Tween.schema.serialize(currentTween, currentBuff);
75
- const compareResult = (0, utils_1.dataCompare)(currentBuff.toBinary(), prevTween);
76
- return compareResult !== 0;
73
+ const equal = (0, utils_1.dataCompare)(currentBuff.toBinary(), prevTween);
74
+ return equal;
77
75
  }
78
- // System to manage cache (needed for tweenSystem.tweenCompleted() to work)
76
+ const restartTweens = [];
77
+ // Logic for sequence tweens
79
78
  engine.addSystem(() => {
79
+ for (const restart of restartTweens) {
80
+ restart();
81
+ }
82
+ restartTweens.length = 0;
80
83
  for (const [entity, tween] of engine.getEntitiesWith(Tween)) {
81
84
  if (tweenChanged(entity)) {
82
85
  const buffer = new ByteBuffer_1.ReadWriteByteBuffer();
83
86
  Tween.schema.serialize(tween, buffer);
84
87
  cache.set(entity, {
85
88
  tween: buffer.toBinary(),
89
+ frames: 0,
86
90
  completed: false,
87
91
  changed: true
88
92
  });
89
93
  continue;
90
94
  }
91
95
  const tweenCache = cache.get(entity);
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;
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
+ });
97
125
  }
98
126
  }
99
127
  }
100
128
  }, Number.NEGATIVE_INFINITY);
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');
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 } } };
124
132
  }
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);
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
+ };
147
+ }
148
+ /* istanbul ignore next */
149
+ throw new Error('Invalid tween');
171
150
  }
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();
176
151
  const tweenSystem = {
177
152
  // This event is fired only once per tween
178
153
  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.0",
4
+ "version": "7.13.1-19516109426.commit-e1e79aa",
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": "7df9c3029b7e9d824a41fdecdd9f63024b16e25b"
36
+ "commit": "e1e79aa4c353b3698cf182659d0110ef3eb2e68f"
37
37
  }