@dcl/ecs 7.21.0 → 7.21.1-22904194370.commit-34c867c

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 (89) hide show
  1. package/dist/components/extended/Tween.d.ts +1 -48
  2. package/dist/components/extended/Tween.js +0 -66
  3. package/dist/components/generated/component-names.gen.js +0 -2
  4. package/dist/components/generated/global.gen.d.ts +0 -4
  5. package/dist/components/generated/global.gen.js +0 -2
  6. package/dist/components/generated/index.gen.d.ts +0 -8
  7. package/dist/components/generated/index.gen.js +0 -10
  8. package/dist/components/generated/pb/decentraland/sdk/components/input_modifier.gen.d.ts +0 -2
  9. package/dist/components/generated/pb/decentraland/sdk/components/input_modifier.gen.js +0 -20
  10. package/dist/components/generated/pb/decentraland/sdk/components/tween.gen.d.ts +0 -21
  11. package/dist/components/generated/pb/decentraland/sdk/components/tween.gen.js +0 -99
  12. package/dist/components/index.d.ts +5 -0
  13. package/dist/components/index.js +5 -2
  14. package/dist/components/manual/CreatedBy.d.ts +9 -0
  15. package/dist/components/manual/CreatedBy.js +8 -0
  16. package/dist/components/manual/Transform.d.ts +9 -0
  17. package/dist/components/manual/Transform.js +3 -3
  18. package/dist/components/types.d.ts +2 -1
  19. package/dist/engine/component.d.ts +52 -1
  20. package/dist/engine/grow-only-value-set-component-definition.js +45 -2
  21. package/dist/engine/lww-element-set-component-definition.d.ts +3 -1
  22. package/dist/engine/lww-element-set-component-definition.js +64 -12
  23. package/dist/index.d.ts +2 -2
  24. package/dist/index.js +1 -1
  25. package/dist/runtime/globals.d.ts +1 -10
  26. package/dist/runtime/globals.js +2 -2
  27. package/dist/serialization/crdt/authoritativePutComponent.d.ts +15 -0
  28. package/dist/serialization/crdt/authoritativePutComponent.js +47 -0
  29. package/dist/serialization/crdt/index.d.ts +1 -0
  30. package/dist/serialization/crdt/index.js +1 -0
  31. package/dist/serialization/crdt/types.d.ts +25 -3
  32. package/dist/serialization/crdt/types.js +3 -1
  33. package/dist/systems/crdt/index.d.ts +0 -1
  34. package/dist/systems/crdt/index.js +55 -146
  35. package/dist-cjs/components/extended/Tween.d.ts +1 -48
  36. package/dist-cjs/components/extended/Tween.js +0 -66
  37. package/dist-cjs/components/generated/component-names.gen.js +0 -2
  38. package/dist-cjs/components/generated/global.gen.d.ts +0 -4
  39. package/dist-cjs/components/generated/global.gen.js +1 -3
  40. package/dist-cjs/components/generated/index.gen.d.ts +0 -8
  41. package/dist-cjs/components/generated/index.gen.js +2 -14
  42. package/dist-cjs/components/generated/pb/decentraland/sdk/components/input_modifier.gen.d.ts +0 -2
  43. package/dist-cjs/components/generated/pb/decentraland/sdk/components/input_modifier.gen.js +0 -20
  44. package/dist-cjs/components/generated/pb/decentraland/sdk/components/tween.gen.d.ts +0 -21
  45. package/dist-cjs/components/generated/pb/decentraland/sdk/components/tween.gen.js +1 -100
  46. package/dist-cjs/components/index.d.ts +5 -0
  47. package/dist-cjs/components/index.js +7 -3
  48. package/dist-cjs/components/manual/CreatedBy.d.ts +9 -0
  49. package/dist-cjs/components/manual/CreatedBy.js +10 -0
  50. package/dist-cjs/components/manual/Transform.d.ts +9 -0
  51. package/dist-cjs/components/manual/Transform.js +3 -3
  52. package/dist-cjs/components/types.d.ts +2 -1
  53. package/dist-cjs/engine/component.d.ts +52 -1
  54. package/dist-cjs/engine/grow-only-value-set-component-definition.js +44 -1
  55. package/dist-cjs/engine/lww-element-set-component-definition.d.ts +3 -1
  56. package/dist-cjs/engine/lww-element-set-component-definition.js +67 -13
  57. package/dist-cjs/index.d.ts +2 -2
  58. package/dist-cjs/index.js +2 -2
  59. package/dist-cjs/runtime/globals.d.ts +1 -10
  60. package/dist-cjs/runtime/globals.js +2 -2
  61. package/dist-cjs/serialization/crdt/authoritativePutComponent.d.ts +15 -0
  62. package/dist-cjs/serialization/crdt/authoritativePutComponent.js +50 -0
  63. package/dist-cjs/serialization/crdt/index.d.ts +1 -0
  64. package/dist-cjs/serialization/crdt/index.js +1 -0
  65. package/dist-cjs/serialization/crdt/types.d.ts +25 -3
  66. package/dist-cjs/serialization/crdt/types.js +3 -1
  67. package/dist-cjs/systems/crdt/index.d.ts +0 -1
  68. package/dist-cjs/systems/crdt/index.js +55 -169
  69. package/package.json +2 -2
  70. package/dist/components/generated/PhysicsCombinedForce.gen.d.ts +0 -1
  71. package/dist/components/generated/PhysicsCombinedForce.gen.js +0 -25
  72. package/dist/components/generated/PhysicsCombinedImpulse.gen.d.ts +0 -1
  73. package/dist/components/generated/PhysicsCombinedImpulse.gen.js +0 -25
  74. package/dist/components/generated/pb/decentraland/sdk/components/physics_combined_force.gen.d.ts +0 -25
  75. package/dist/components/generated/pb/decentraland/sdk/components/physics_combined_force.gen.js +0 -42
  76. package/dist/components/generated/pb/decentraland/sdk/components/physics_combined_impulse.gen.d.ts +0 -28
  77. package/dist/components/generated/pb/decentraland/sdk/components/physics_combined_impulse.gen.js +0 -51
  78. package/dist/serialization/crdt/network/utils.d.ts +0 -9
  79. package/dist/serialization/crdt/network/utils.js +0 -60
  80. package/dist-cjs/components/generated/PhysicsCombinedForce.gen.d.ts +0 -1
  81. package/dist-cjs/components/generated/PhysicsCombinedForce.gen.js +0 -28
  82. package/dist-cjs/components/generated/PhysicsCombinedImpulse.gen.d.ts +0 -1
  83. package/dist-cjs/components/generated/PhysicsCombinedImpulse.gen.js +0 -28
  84. package/dist-cjs/components/generated/pb/decentraland/sdk/components/physics_combined_force.gen.d.ts +0 -25
  85. package/dist-cjs/components/generated/pb/decentraland/sdk/components/physics_combined_force.gen.js +0 -48
  86. package/dist-cjs/components/generated/pb/decentraland/sdk/components/physics_combined_impulse.gen.d.ts +0 -28
  87. package/dist-cjs/components/generated/pb/decentraland/sdk/components/physics_combined_impulse.gen.js +0 -57
  88. package/dist-cjs/serialization/crdt/network/utils.d.ts +0 -9
  89. package/dist-cjs/serialization/crdt/network/utils.js +0 -67
@@ -1,24 +1,17 @@
1
1
  import { EntityState } from '../../engine/entity';
2
2
  import { ReadWriteByteBuffer } from '../../serialization/ByteBuffer';
3
- import { AppendValueOperation, CrdtMessageProtocol, DeleteComponentNetwork, DeleteEntityNetwork } from '../../serialization/crdt';
3
+ import { AppendValueOperation, CrdtMessageProtocol } from '../../serialization/crdt';
4
4
  import { DeleteComponent } from '../../serialization/crdt/deleteComponent';
5
5
  import { DeleteEntity } from '../../serialization/crdt/deleteEntity';
6
6
  import { PutComponentOperation } from '../../serialization/crdt/putComponent';
7
+ import { AuthoritativePutComponentOperation } from '../../serialization/crdt/authoritativePutComponent';
7
8
  import { CrdtMessageType } from '../../serialization/crdt/types';
8
- import { PutNetworkComponentOperation } from '../../serialization/crdt/network/putComponentNetwork';
9
- import { NetworkEntity as defineNetworkEntity, NetworkParent as defineNetworkParent, Transform as defineTransform } from '../../components';
10
- import * as networkUtils from '../../serialization/crdt/network/utils';
11
- // NetworkMessages can only have a MAX_SIZE of 12kb. So we need to send it in chunks.
12
- export const LIVEKIT_MAX_SIZE = 12;
13
9
  /**
14
10
  * @internal
15
11
  */
16
12
  export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
17
13
  const transports = [];
18
- // Components that we used on this system
19
- const NetworkEntity = defineNetworkEntity(engine);
20
- const NetworkParent = defineNetworkParent(engine);
21
- const Transform = defineTransform(engine);
14
+ // No network components needed - pure CRDT processing only
22
15
  // Messages that we received at transport.onMessage waiting to be processed
23
16
  const receivedMessages = [];
24
17
  // Messages already processed by the engine but that we need to broadcast to other transports.
@@ -43,27 +36,20 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
43
36
  if (header.type === CrdtMessageType.DELETE_COMPONENT) {
44
37
  message = DeleteComponent.read(buffer);
45
38
  }
46
- else if (header.type === CrdtMessageType.DELETE_COMPONENT_NETWORK) {
47
- message = DeleteComponentNetwork.read(buffer);
48
- }
49
39
  else if (header.type === CrdtMessageType.PUT_COMPONENT) {
50
40
  message = PutComponentOperation.read(buffer);
51
41
  }
52
- else if (header.type === CrdtMessageType.PUT_COMPONENT_NETWORK) {
53
- message = PutNetworkComponentOperation.read(buffer);
42
+ else if (header.type === CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT) {
43
+ message = AuthoritativePutComponentOperation.read(buffer);
54
44
  }
55
45
  else if (header.type === CrdtMessageType.DELETE_ENTITY) {
56
46
  message = DeleteEntity.read(buffer);
57
47
  }
58
- else if (header.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {
59
- message = DeleteEntityNetwork.read(buffer);
60
- }
61
48
  else if (header.type === CrdtMessageType.APPEND_VALUE) {
62
49
  message = AppendValueOperation.read(buffer);
63
- // Unknown message, we skip it
64
50
  }
65
51
  else {
66
- // consume the message
52
+ // Unknown message, we skip it (including NETWORK messages)
67
53
  buffer.incrementReadOffset(header.length);
68
54
  }
69
55
  if (message) {
@@ -84,22 +70,6 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
84
70
  const messagesToProcess = value.splice(0, value.length);
85
71
  return messagesToProcess;
86
72
  }
87
- /**
88
- * Find the local entityId associated to the network component message.
89
- * It's a mapping Network -> to Local
90
- * If it's not a network message, return the entityId received by the message
91
- */
92
- function findNetworkId(msg) {
93
- const hasNetworkId = 'networkId' in msg;
94
- if (hasNetworkId) {
95
- for (const [entityId, network] of engine.getEntitiesWith(NetworkEntity)) {
96
- if (network.networkId === msg.networkId && network.entityId === msg.entityId) {
97
- return { entityId, network };
98
- }
99
- }
100
- }
101
- return { entityId: msg.entityId };
102
- }
103
73
  /**
104
74
  * This fn will be called on every tick.
105
75
  * Process all the messages queue received by the transport
@@ -108,46 +78,52 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
108
78
  const messagesToProcess = getMessages(receivedMessages);
109
79
  const entitiesShouldBeCleaned = [];
110
80
  for (const msg of messagesToProcess) {
111
- let { entityId, network } = findNetworkId(msg);
112
- // We receive a new Entity. Create the localEntity and map it to the NetworkEntity component
113
- if (networkUtils.isNetworkMessage(msg) && !network) {
114
- entityId = engine.addEntity();
115
- network = { entityId: msg.entityId, networkId: msg.networkId };
116
- NetworkEntity.createOrReplace(entityId, network);
117
- }
118
- if (msg.type === CrdtMessageType.DELETE_ENTITY || msg.type === CrdtMessageType.DELETE_ENTITY_NETWORK) {
119
- entitiesShouldBeCleaned.push(entityId);
81
+ // Simple CRDT processing - no network logic
82
+ if (msg.type === CrdtMessageType.DELETE_ENTITY) {
83
+ entitiesShouldBeCleaned.push(msg.entityId);
120
84
  broadcastMessages.push(msg);
121
85
  }
122
86
  else {
123
- const entityState = engine.entityContainer.getEntityState(entityId);
124
- // Skip updates from removed entityes
87
+ const entityState = engine.entityContainer.getEntityState(msg.entityId);
88
+ // Skip updates from removed entities
125
89
  if (entityState === EntityState.Removed)
126
90
  continue;
127
- // Entities with unknown entities should update its entity state
91
+ // Entities with unknown state should update its entity state
128
92
  if (entityState === EntityState.Unknown) {
129
- engine.entityContainer.updateUsedEntity(entityId);
130
- }
131
- const component = engine.getComponentOrNull(msg.componentId);
132
- /* istanbul ignore else */
133
- if (component) {
134
- if (msg.type === CrdtMessageType.PUT_COMPONENT &&
135
- component.componentId === Transform.componentId &&
136
- NetworkEntity.has(entityId) &&
137
- NetworkParent.has(entityId)) {
138
- msg.data = networkUtils.fixTransformParent(msg);
93
+ engine.entityContainer.updateUsedEntity(msg.entityId);
94
+ }
95
+ // Only process component-related messages (not DELETE_ENTITY)
96
+ if ('componentId' in msg) {
97
+ const component = engine.getComponentOrNull(msg.componentId);
98
+ if (component) {
99
+ // Handle authoritative messages differently - they force the state regardless of timestamp
100
+ const tryUpdate = () => {
101
+ try {
102
+ return msg.type === CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT
103
+ ? component.__forceUpdateFromCrdt(msg)
104
+ : component.updateFromCrdt(msg);
105
+ }
106
+ catch (e) {
107
+ console.error('[receiveMessages] ERROR processing message', msg, e);
108
+ return null;
109
+ }
110
+ };
111
+ const result = tryUpdate();
112
+ if (!result)
113
+ continue;
114
+ const [conflictMessage, value] = result;
115
+ if (!conflictMessage) {
116
+ // Add message to broadcast queue when no conflict
117
+ broadcastMessages.push(msg);
118
+ onProcessEntityComponentChange && onProcessEntityComponentChange(msg.entityId, msg.type, component, value);
119
+ }
139
120
  }
140
- const [conflictMessage, value] = component.updateFromCrdt({ ...msg, entityId });
141
- if (!conflictMessage) {
142
- // Add message to transport queue to be processed by others transports
121
+ else {
122
+ // Component not found - still broadcast for editor compatibility
123
+ /* istanbul ignore next */
143
124
  broadcastMessages.push(msg);
144
- onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, msg.type, component, value);
145
125
  }
146
126
  }
147
- else {
148
- // TODO: test this line, it is fundammental to make the editor work
149
- broadcastMessages.push(msg);
150
- }
151
127
  }
152
128
  }
153
129
  // the last stage of the syncrhonization is to delete the entities
@@ -161,16 +137,17 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
161
137
  }
162
138
  }
163
139
  /**
164
- * Iterates the dirty map and generates crdt messages to be send
140
+ * Simple CRDT message broadcasting - no network-specific logic
165
141
  */
166
142
  async function sendMessages(entitiesDeletedThisTick) {
167
- // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages
143
+ // Get messages from broadcast queue and component updates
168
144
  const crdtMessages = getMessages(broadcastMessages);
169
145
  const buffer = new ReadWriteByteBuffer();
146
+ // Generate CRDT messages from component updates
170
147
  for (const component of engine.componentsIter()) {
171
148
  for (const message of component.getCrdtUpdates()) {
172
149
  const offset = buffer.currentWriteOffset();
173
- // Avoid creating messages if there is no transport that will handle it
150
+ // Only create messages if there's a transport that will handle it
174
151
  if (transports.some((t) => t.filter(message))) {
175
152
  if (message.type === CrdtMessageType.PUT_COMPONENT) {
176
153
  PutComponentOperation.write(message.entityId, message.timestamp, message.componentId, message.data, buffer);
@@ -194,7 +171,7 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
194
171
  }
195
172
  }
196
173
  }
197
- // After all updates, I execute the DeletedEntity messages
174
+ // Handle deleted entities
198
175
  for (const entityId of entitiesDeletedThisTick) {
199
176
  const offset = buffer.currentWriteOffset();
200
177
  DeleteEntity.write(entityId, buffer);
@@ -205,87 +182,19 @@ export function crdtSceneSystem(engine, onProcessEntityComponentChange) {
205
182
  });
206
183
  onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, CrdtMessageType.DELETE_ENTITY);
207
184
  }
208
- // Send CRDT messages to transports
209
- const transportBuffer = new ReadWriteByteBuffer();
210
- for (const index in transports) {
211
- const __NetworkMessagesBuffer = [];
212
- const transportIndex = Number(index);
213
- const transport = transports[transportIndex];
214
- const isRendererTransport = transport.type === 'renderer';
215
- const isNetworkTransport = transport.type === 'network';
216
- // Reset Buffer for each Transport
217
- transportBuffer.resetBuffer();
218
- const buffer = new ReadWriteByteBuffer();
219
- // Then we send all the new crdtMessages that the transport needs to process
185
+ // Simple transport broadcasting - no network-specific transforms
186
+ for (const transport of transports) {
187
+ const transportBuffer = new ReadWriteByteBuffer();
220
188
  for (const message of crdtMessages) {
221
- // Check if adding this message would exceed the size limit
222
- const currentBufferSize = transportBuffer.toBinary().byteLength;
223
- const messageSize = message.messageBuffer.byteLength;
224
- if (isNetworkTransport && (currentBufferSize + messageSize) / 1024 > LIVEKIT_MAX_SIZE) {
225
- // If the current buffer has content, save it as a chunk
226
- if (currentBufferSize > 0) {
227
- __NetworkMessagesBuffer.push(transportBuffer.toCopiedBinary());
228
- transportBuffer.resetBuffer();
229
- }
230
- // If the message itself is larger than the limit, we need to handle it specially
231
- // For now, we'll skip it to prevent infinite loops
232
- if (messageSize / 1024 > LIVEKIT_MAX_SIZE) {
233
- console.error(`Message too large (${messageSize} bytes), skipping message for entity ${message.entityId}`);
234
- continue;
235
- }
236
- }
237
189
  // Avoid echo messages
238
- if (message.transportId === transportIndex)
239
- continue;
240
- // Redundant message for the transport
241
- if (!transport.filter(message))
242
- continue;
243
- const { entityId } = findNetworkId(message);
244
- const transformNeedsFix = 'componentId' in message &&
245
- message.componentId === Transform.componentId &&
246
- Transform.has(entityId) &&
247
- NetworkParent.has(entityId) &&
248
- NetworkEntity.has(entityId);
249
- // If there was a LOCAL change in the transform. Add the parent to that transform
250
- if (isRendererTransport && message.type === CrdtMessageType.PUT_COMPONENT && transformNeedsFix) {
251
- const parent = findNetworkId(NetworkParent.get(entityId));
252
- const transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);
253
- const offset = buffer.currentWriteOffset();
254
- PutComponentOperation.write(entityId, message.timestamp, message.componentId, transformData, buffer);
255
- transportBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);
190
+ if (message.transportId === transports.indexOf(transport))
256
191
  continue;
192
+ // Check if transport wants this message
193
+ if (transport.filter(message)) {
194
+ transportBuffer.writeBuffer(message.messageBuffer, false);
257
195
  }
258
- if (isRendererTransport && networkUtils.isNetworkMessage(message)) {
259
- // If it's the renderer transport and its a NetworkMessage, we need to fix the entityId field and convert it to a known Message.
260
- // PUT_NETWORK_COMPONENT -> PUT_COMPONENT
261
- let transformData = 'data' in message ? message.data : new Uint8Array();
262
- if (transformNeedsFix) {
263
- const parent = findNetworkId(NetworkParent.get(entityId));
264
- transformData = networkUtils.fixTransformParent(message, Transform.get(entityId), parent.entityId);
265
- }
266
- networkUtils.networkMessageToLocal({ ...message, data: transformData }, entityId, buffer, transportBuffer);
267
- // Iterate the next message
268
- continue;
269
- }
270
- // If its a network transport and its a PUT_COMPONENT that has a NetworkEntity component, we need to send this message
271
- // through comms with the EntityID and NetworkID from ther NetworkEntity so everyone can recieve this message and map to their custom entityID.
272
- if (isNetworkTransport && !networkUtils.isNetworkMessage(message)) {
273
- const networkData = NetworkEntity.getOrNull(message.entityId);
274
- // If it has networkData convert the message to PUT_NETWORK_COMPONENT.
275
- if (networkData) {
276
- networkUtils.localMessageToNetwork(message, networkData, buffer, transportBuffer);
277
- // Iterate the next message
278
- continue;
279
- }
280
- }
281
- // Common message
282
- transportBuffer.writeBuffer(message.messageBuffer, false);
283
- }
284
- if (isNetworkTransport && transportBuffer.currentWriteOffset()) {
285
- __NetworkMessagesBuffer.push(transportBuffer.toBinary());
286
196
  }
287
- const message = isNetworkTransport ? __NetworkMessagesBuffer : transportBuffer.toBinary();
288
- await transport.send(message);
197
+ await transport.send(transportBuffer.toBinary());
289
198
  }
290
199
  }
291
200
  /**
@@ -1,38 +1,6 @@
1
1
  import { Entity, IEngine, LastWriteWinElementSetComponentDefinition } from '../../engine';
2
2
  import { Quaternion, Vector2, Vector3 } from '../generated/pb/decentraland/common/vectors.gen';
3
3
  import { EasingFunction, Move, MoveContinuous, PBTween, Rotate, RotateContinuous, Scale, TextureMove, TextureMoveContinuous, TextureMovementType } from '../generated/index.gen';
4
- /**
5
- * @public
6
- * Partial params for Tween.Mode.MoveRotateScale(). At least one of position, rotation, or scale must be provided.
7
- * Use this when building a mode for Tween.createOrReplace() or TweenSequence (e.g. only positionStart/positionEnd).
8
- */
9
- export interface MoveRotateScaleModeParams {
10
- /** Position tween (start → end). Optional. */
11
- position?: {
12
- start: Vector3;
13
- end: Vector3;
14
- };
15
- /** Rotation tween (start → end). Optional. */
16
- rotation?: {
17
- start: Quaternion;
18
- end: Quaternion;
19
- };
20
- /** Scale tween (start → end). Optional. */
21
- scale?: {
22
- start: Vector3;
23
- end: Vector3;
24
- };
25
- }
26
- /**
27
- * @public
28
- * Parameters for setMoveRotateScale. At least one of position, rotation, or scale must be provided.
29
- */
30
- export interface SetMoveRotateScaleParams extends MoveRotateScaleModeParams {
31
- /** Duration of the tween in milliseconds. */
32
- duration: number;
33
- /** Easing function (defaults to EF_LINEAR). */
34
- easingFunction?: EasingFunction;
35
- }
36
4
  /**
37
5
  * @public
38
6
  */
@@ -65,18 +33,13 @@ export interface TweenHelper {
65
33
  * @returns a texture-move-continuous mode tween
66
34
  */
67
35
  TextureMoveContinuous: (textureMove: TextureMoveContinuous) => PBTween['mode'];
68
- /**
69
- * @returns a move-rotate-scale mode tween
70
- * @param params - partial transform (at least one of position, rotation, scale); omit axes you don't need
71
- */
72
- MoveRotateScale: (params: MoveRotateScaleModeParams) => PBTween['mode'];
73
36
  }
74
37
  /**
75
38
  * @public
76
39
  */
77
40
  export interface TweenComponentDefinitionExtended extends LastWriteWinElementSetComponentDefinition<PBTween> {
78
41
  /**
79
- * Helpers with constructor
42
+ * Texture helpers with constructor
80
43
  */
81
44
  Mode: TweenHelper;
82
45
  /**
@@ -155,15 +118,5 @@ export interface TweenComponentDefinitionExtended extends LastWriteWinElementSet
155
118
  * @param duration - duration of the tween in milliseconds (defaults to 0 for infinite)
156
119
  */
157
120
  setTextureMoveContinuous(entity: Entity, direction: Vector2, speed: number, movementType?: TextureMovementType, duration?: number): void;
158
- /**
159
- * @public
160
- *
161
- * Creates or replaces a move-rotate-scale tween component that simultaneously animates
162
- * an entity's position, rotation, and/or scale from start to end. Provide only the
163
- * properties you need (at least one of position, rotation, or scale).
164
- * @param entity - entity to apply the tween to
165
- * @param params - object with optional position, rotation, scale (each with start/end), duration, and optional easingFunction
166
- */
167
- setMoveRotateScale(entity: Entity, params: SetMoveRotateScaleParams): void;
168
121
  }
169
122
  export declare function defineTweenComponent(engine: Pick<IEngine, 'defineComponentFromSchema'>): TweenComponentDefinitionExtended;
@@ -2,35 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineTweenComponent = void 0;
4
4
  const index_gen_1 = require("../generated/index.gen");
5
- function assertDuration(duration, apiName) {
6
- if (!Number.isFinite(duration) || duration < 0) {
7
- throw new Error(`${apiName}: duration must be a non-negative finite number`);
8
- }
9
- }
10
- /** Shared validation for params that have optional position/rotation/scale with start & end. */
11
- function assertMoveRotateScaleAxesStartEnd(params, apiName) {
12
- if (!params.position && !params.rotation && !params.scale) {
13
- throw new Error(`${apiName}: at least one of position, rotation, or scale must be provided`);
14
- }
15
- if (params.position) {
16
- const pos = params.position;
17
- if (!pos.start || !pos.end) {
18
- throw new Error(`${apiName}: position must have both start and end`);
19
- }
20
- }
21
- if (params.rotation) {
22
- const rot = params.rotation;
23
- if (!rot.start || !rot.end) {
24
- throw new Error(`${apiName}: rotation must have both start and end`);
25
- }
26
- }
27
- if (params.scale) {
28
- const scl = params.scale;
29
- if (!scl.start || !scl.end) {
30
- throw new Error(`${apiName}: scale must have both start and end`);
31
- }
32
- }
33
- }
34
5
  const TweenHelper = {
35
6
  Move(move) {
36
7
  return {
@@ -73,21 +44,6 @@ const TweenHelper = {
73
44
  $case: 'textureMoveContinuous',
74
45
  textureMoveContinuous
75
46
  };
76
- },
77
- MoveRotateScale(params) {
78
- assertMoveRotateScaleAxesStartEnd(params, 'Tween.Mode.MoveRotateScale');
79
- const moveRotateScale = {
80
- positionStart: params.position ? params.position.start : undefined,
81
- positionEnd: params.position ? params.position.end : undefined,
82
- rotationStart: params.rotation ? params.rotation.start : undefined,
83
- rotationEnd: params.rotation ? params.rotation.end : undefined,
84
- scaleStart: params.scale ? params.scale.start : undefined,
85
- scaleEnd: params.scale ? params.scale.end : undefined
86
- };
87
- return {
88
- $case: 'moveRotateScale',
89
- moveRotateScale
90
- };
91
47
  }
92
48
  };
93
49
  function defineTweenComponent(engine) {
@@ -194,28 +150,6 @@ function defineTweenComponent(engine) {
194
150
  easingFunction: 0 /* EasingFunction.EF_LINEAR */,
195
151
  playing: true
196
152
  });
197
- },
198
- setMoveRotateScale(entity, params) {
199
- assertMoveRotateScaleAxesStartEnd(params, 'setMoveRotateScale');
200
- assertDuration(params.duration, 'setMoveRotateScale');
201
- const { position, rotation, scale, duration, easingFunction = 0 /* EasingFunction.EF_LINEAR */ } = params;
202
- const moveRotateScale = {
203
- positionStart: position ? position.start : undefined,
204
- positionEnd: position ? position.end : undefined,
205
- rotationStart: rotation ? rotation.start : undefined,
206
- rotationEnd: rotation ? rotation.end : undefined,
207
- scaleStart: scale ? scale.start : undefined,
208
- scaleEnd: scale ? scale.end : undefined
209
- };
210
- theComponent.createOrReplace(entity, {
211
- mode: {
212
- $case: 'moveRotateScale',
213
- moveRotateScale
214
- },
215
- duration,
216
- easingFunction,
217
- playing: true
218
- });
219
153
  }
220
154
  };
221
155
  }
@@ -33,8 +33,6 @@ exports.coreComponentMappings = {
33
33
  "core::MeshCollider": 1019,
34
34
  "core::MeshRenderer": 1018,
35
35
  "core::NftShape": 1040,
36
- "core::PhysicsCombinedForce": 1216,
37
- "core::PhysicsCombinedImpulse": 1215,
38
36
  "core::PlayerIdentityData": 1089,
39
37
  "core::PointerEvents": 1062,
40
38
  "core::PointerEventsResult": 1063,
@@ -22,8 +22,6 @@ import { PBInputModifier } from './pb/decentraland/sdk/components/input_modifier
22
22
  import { PBLightSource } from './pb/decentraland/sdk/components/light_source.gen';
23
23
  import { PBMainCamera } from './pb/decentraland/sdk/components/main_camera.gen';
24
24
  import { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen';
25
- import { PBPhysicsCombinedForce } from './pb/decentraland/sdk/components/physics_combined_force.gen';
26
- import { PBPhysicsCombinedImpulse } from './pb/decentraland/sdk/components/physics_combined_impulse.gen';
27
25
  import { PBPlayerIdentityData } from './pb/decentraland/sdk/components/player_identity_data.gen';
28
26
  import { PBPointerEvents } from './pb/decentraland/sdk/components/pointer_events.gen';
29
27
  import { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen';
@@ -72,8 +70,6 @@ import { PBVisibilityComponent } from './pb/decentraland/sdk/components/visibili
72
70
  /** @public */ export declare const LightSource: LastWriteWinElementSetComponentDefinition<PBLightSource>;
73
71
  /** @public */ export declare const MainCamera: LastWriteWinElementSetComponentDefinition<PBMainCamera>;
74
72
  /** @public */ export declare const NftShape: LastWriteWinElementSetComponentDefinition<PBNftShape>;
75
- /** @public */ export declare const PhysicsCombinedForce: LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedForce>;
76
- /** @public */ export declare const PhysicsCombinedImpulse: LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedImpulse>;
77
73
  /** @public */ export declare const PlayerIdentityData: LastWriteWinElementSetComponentDefinition<PBPlayerIdentityData>;
78
74
  /** @public */ export declare const PointerEvents: LastWriteWinElementSetComponentDefinition<PBPointerEvents>;
79
75
  /** @public */ export declare const PointerEventsResult: GrowOnlyValueSetComponentDefinition<PBPointerEventsResult>;
@@ -26,7 +26,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
26
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = exports.VideoEvent = exports.UiTransform = exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.TriggerAreaResult = exports.TriggerArea = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.PhysicsCombinedImpulse = exports.PhysicsCombinedForce = exports.NftShape = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = exports.AssetLoadLoadingState = exports.AssetLoad = void 0;
29
+ exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = exports.VideoEvent = exports.UiTransform = exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.TriggerAreaResult = exports.TriggerArea = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.NftShape = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = exports.AssetLoadLoadingState = exports.AssetLoad = void 0;
30
30
  const initialization_1 = require("../../runtime/initialization");
31
31
  const components = __importStar(require("./index.gen"));
32
32
  __exportStar(require("./index.gen"), exports);
@@ -52,8 +52,6 @@ __exportStar(require("./index.gen"), exports);
52
52
  /** @public */ exports.LightSource = components.LightSource(initialization_1.engine);
53
53
  /** @public */ exports.MainCamera = components.MainCamera(initialization_1.engine);
54
54
  /** @public */ exports.NftShape = components.NftShape(initialization_1.engine);
55
- /** @public */ exports.PhysicsCombinedForce = components.PhysicsCombinedForce(initialization_1.engine);
56
- /** @public */ exports.PhysicsCombinedImpulse = components.PhysicsCombinedImpulse(initialization_1.engine);
57
55
  /** @public */ exports.PlayerIdentityData = components.PlayerIdentityData(initialization_1.engine);
58
56
  /** @public */ exports.PointerEvents = components.PointerEvents(initialization_1.engine);
59
57
  /** @public */ exports.PointerEventsResult = components.PointerEventsResult(initialization_1.engine);
@@ -26,8 +26,6 @@ import { PBMaterial } from './pb/decentraland/sdk/components/material.gen';
26
26
  import { PBMeshCollider } from './pb/decentraland/sdk/components/mesh_collider.gen';
27
27
  import { PBMeshRenderer } from './pb/decentraland/sdk/components/mesh_renderer.gen';
28
28
  import { PBNftShape } from './pb/decentraland/sdk/components/nft_shape.gen';
29
- import { PBPhysicsCombinedForce } from './pb/decentraland/sdk/components/physics_combined_force.gen';
30
- import { PBPhysicsCombinedImpulse } from './pb/decentraland/sdk/components/physics_combined_impulse.gen';
31
29
  import { PBPlayerIdentityData } from './pb/decentraland/sdk/components/player_identity_data.gen';
32
30
  import { PBPointerEvents } from './pb/decentraland/sdk/components/pointer_events.gen';
33
31
  import { PBPointerEventsResult } from './pb/decentraland/sdk/components/pointer_events_result.gen';
@@ -81,8 +79,6 @@ export * from './pb/decentraland/sdk/components/material.gen';
81
79
  export * from './pb/decentraland/sdk/components/mesh_collider.gen';
82
80
  export * from './pb/decentraland/sdk/components/mesh_renderer.gen';
83
81
  export * from './pb/decentraland/sdk/components/nft_shape.gen';
84
- export * from './pb/decentraland/sdk/components/physics_combined_force.gen';
85
- export * from './pb/decentraland/sdk/components/physics_combined_impulse.gen';
86
82
  export * from './pb/decentraland/sdk/components/player_identity_data.gen';
87
83
  export * from './pb/decentraland/sdk/components/pointer_events.gen';
88
84
  export * from './pb/decentraland/sdk/components/pointer_events_result.gen';
@@ -138,8 +134,6 @@ export type GSetComponentGetter<T extends GrowOnlyValueSetComponentDefinition<an
138
134
  /** @public */ export declare const MeshCollider: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBMeshCollider>>;
139
135
  /** @public */ export declare const MeshRenderer: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBMeshRenderer>>;
140
136
  /** @public */ export declare const NftShape: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBNftShape>>;
141
- /** @public */ export declare const PhysicsCombinedForce: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedForce>>;
142
- /** @public */ export declare const PhysicsCombinedImpulse: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedImpulse>>;
143
137
  /** @public */ export declare const PlayerIdentityData: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPlayerIdentityData>>;
144
138
  /** @public */ export declare const PointerEvents: LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPointerEvents>>;
145
139
  /** @public */ export declare const PointerEventsResult: GSetComponentGetter<GrowOnlyValueSetComponentDefinition<PBPointerEventsResult>>;
@@ -195,8 +189,6 @@ export declare const componentDefinitionByName: {
195
189
  "core::MeshCollider": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBMeshCollider>>;
196
190
  "core::MeshRenderer": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBMeshRenderer>>;
197
191
  "core::NftShape": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBNftShape>>;
198
- "core::PhysicsCombinedForce": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedForce>>;
199
- "core::PhysicsCombinedImpulse": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPhysicsCombinedImpulse>>;
200
192
  "core::PlayerIdentityData": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPlayerIdentityData>>;
201
193
  "core::PointerEvents": LwwComponentGetter<LastWriteWinElementSetComponentDefinition<PBPointerEvents>>;
202
194
  "core::PointerEventsResult": GSetComponentGetter<GrowOnlyValueSetComponentDefinition<PBPointerEventsResult>>;
@@ -14,8 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.Tween = exports.TriggerAreaResult = exports.TriggerArea = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.PhysicsCombinedImpulse = exports.PhysicsCombinedForce = exports.NftShape = exports.MeshRenderer = exports.MeshCollider = exports.Material = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = exports.AssetLoadLoadingState = exports.AssetLoad = exports.Animator = void 0;
18
- exports.componentDefinitionByName = exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = exports.VideoEvent = exports.UiTransform = void 0;
17
+ exports.VideoEvent = exports.UiTransform = exports.UiText = exports.UiInputResult = exports.UiInput = exports.UiDropdownResult = exports.UiDropdown = exports.UiCanvasInformation = exports.UiBackground = exports.TweenState = exports.TweenSequence = exports.Tween = exports.TriggerAreaResult = exports.TriggerArea = exports.TextShape = exports.SkyboxTime = exports.RealmInfo = exports.RaycastResult = exports.Raycast = exports.PrimaryPointerInfo = exports.PointerLock = exports.PointerEventsResult = exports.PointerEvents = exports.PlayerIdentityData = exports.NftShape = exports.MeshRenderer = exports.MeshCollider = exports.Material = exports.MainCamera = exports.LightSource = exports.InputModifier = exports.GltfNodeModifiers = exports.GltfContainerLoadingState = exports.GltfContainer = exports.EngineInfo = exports.CameraModeArea = exports.CameraMode = exports.Billboard = exports.AvatarShape = exports.AvatarModifierArea = exports.AvatarEquippedData = exports.AvatarEmoteCommand = exports.AvatarBase = exports.AvatarAttach = exports.AudioStream = exports.AudioSource = exports.AudioEvent = exports.AssetLoadLoadingState = exports.AssetLoad = exports.Animator = void 0;
18
+ exports.componentDefinitionByName = exports.VisibilityComponent = exports.VirtualCamera = exports.VideoPlayer = void 0;
19
19
  const Animator_gen_1 = require("./Animator.gen");
20
20
  const AssetLoad_gen_1 = require("./AssetLoad.gen");
21
21
  const AssetLoadLoadingState_gen_1 = require("./AssetLoadLoadingState.gen");
@@ -42,8 +42,6 @@ const Material_gen_1 = require("./Material.gen");
42
42
  const MeshCollider_gen_1 = require("./MeshCollider.gen");
43
43
  const MeshRenderer_gen_1 = require("./MeshRenderer.gen");
44
44
  const NftShape_gen_1 = require("./NftShape.gen");
45
- const PhysicsCombinedForce_gen_1 = require("./PhysicsCombinedForce.gen");
46
- const PhysicsCombinedImpulse_gen_1 = require("./PhysicsCombinedImpulse.gen");
47
45
  const PlayerIdentityData_gen_1 = require("./PlayerIdentityData.gen");
48
46
  const PointerEvents_gen_1 = require("./PointerEvents.gen");
49
47
  const PointerEventsResult_gen_1 = require("./PointerEventsResult.gen");
@@ -97,8 +95,6 @@ __exportStar(require("./pb/decentraland/sdk/components/material.gen"), exports);
97
95
  __exportStar(require("./pb/decentraland/sdk/components/mesh_collider.gen"), exports);
98
96
  __exportStar(require("./pb/decentraland/sdk/components/mesh_renderer.gen"), exports);
99
97
  __exportStar(require("./pb/decentraland/sdk/components/nft_shape.gen"), exports);
100
- __exportStar(require("./pb/decentraland/sdk/components/physics_combined_force.gen"), exports);
101
- __exportStar(require("./pb/decentraland/sdk/components/physics_combined_impulse.gen"), exports);
102
98
  __exportStar(require("./pb/decentraland/sdk/components/player_identity_data.gen"), exports);
103
99
  __exportStar(require("./pb/decentraland/sdk/components/pointer_events.gen"), exports);
104
100
  __exportStar(require("./pb/decentraland/sdk/components/pointer_events_result.gen"), exports);
@@ -210,12 +206,6 @@ exports.MeshRenderer = MeshRenderer;
210
206
  /** @public */ const NftShape = engine =>
211
207
  /* @__PURE__ */ engine.defineComponentFromSchema("core::NftShape", NftShape_gen_1.NftShapeSchema);
212
208
  exports.NftShape = NftShape;
213
- /** @public */ const PhysicsCombinedForce = engine =>
214
- /* @__PURE__ */ engine.defineComponentFromSchema("core::PhysicsCombinedForce", PhysicsCombinedForce_gen_1.PhysicsCombinedForceSchema);
215
- exports.PhysicsCombinedForce = PhysicsCombinedForce;
216
- /** @public */ const PhysicsCombinedImpulse = engine =>
217
- /* @__PURE__ */ engine.defineComponentFromSchema("core::PhysicsCombinedImpulse", PhysicsCombinedImpulse_gen_1.PhysicsCombinedImpulseSchema);
218
- exports.PhysicsCombinedImpulse = PhysicsCombinedImpulse;
219
209
  /** @public */ const PlayerIdentityData = engine =>
220
210
  /* @__PURE__ */ engine.defineComponentFromSchema("core::PlayerIdentityData", PlayerIdentityData_gen_1.PlayerIdentityDataSchema);
221
211
  exports.PlayerIdentityData = PlayerIdentityData;
@@ -331,8 +321,6 @@ exports.componentDefinitionByName = {
331
321
  "core::MeshCollider": exports.MeshCollider,
332
322
  "core::MeshRenderer": exports.MeshRenderer,
333
323
  "core::NftShape": exports.NftShape,
334
- "core::PhysicsCombinedForce": exports.PhysicsCombinedForce,
335
- "core::PhysicsCombinedImpulse": exports.PhysicsCombinedImpulse,
336
324
  "core::PlayerIdentityData": exports.PlayerIdentityData,
337
325
  "core::PointerEvents": exports.PointerEvents,
338
326
  "core::PointerEventsResult": exports.PointerEventsResult,
@@ -19,8 +19,6 @@ export interface PBInputModifier_StandardInput {
19
19
  disableRun?: boolean | undefined;
20
20
  disableJump?: boolean | undefined;
21
21
  disableEmote?: boolean | undefined;
22
- disableDoubleJump?: boolean | undefined;
23
- disableGliding?: boolean | undefined;
24
22
  }
25
23
  /**
26
24
  * @public