@dcl/ecs 7.22.5-24836126953.commit-ddc8da1 → 7.22.5

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 (121) hide show
  1. package/dist/components/extended/ParticleSystem.d.ts +24 -0
  2. package/dist/components/extended/ParticleSystem.js +23 -0
  3. package/dist/components/generated/ParticleSystem.gen.d.ts +1 -0
  4. package/dist/components/generated/ParticleSystem.gen.js +25 -0
  5. package/dist/components/generated/component-names.gen.js +1 -0
  6. package/dist/components/generated/global.gen.d.ts +2 -0
  7. package/dist/components/generated/global.gen.js +1 -0
  8. package/dist/components/generated/index.gen.d.ts +4 -0
  9. package/dist/components/generated/index.gen.js +5 -0
  10. package/dist/components/generated/pb/decentraland/common/colors.gen.d.ts +15 -0
  11. package/dist/components/generated/pb/decentraland/common/colors.gen.js +47 -0
  12. package/dist/components/generated/pb/decentraland/common/floats.gen.d.ts +16 -0
  13. package/dist/components/generated/pb/decentraland/common/floats.gen.js +50 -0
  14. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +10 -1
  15. package/dist/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +10 -0
  16. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +241 -0
  17. package/dist/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +717 -0
  18. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events.gen.d.ts +5 -1
  19. package/dist/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js +20 -1
  20. package/dist/components/generated/types.gen.d.ts +2 -0
  21. package/dist/components/generated/types.gen.js +3 -0
  22. package/dist/components/index.d.ts +2 -5
  23. package/dist/components/index.js +5 -5
  24. package/dist/components/manual/Transform.d.ts +13 -9
  25. package/dist/components/manual/Transform.js +11 -3
  26. package/dist/components/types.d.ts +1 -1
  27. package/dist/engine/component.d.ts +1 -52
  28. package/dist/engine/grow-only-value-set-component-definition.js +2 -45
  29. package/dist/engine/lww-element-set-component-definition.d.ts +3 -5
  30. package/dist/engine/lww-element-set-component-definition.js +35 -70
  31. package/dist/index.d.ts +3 -2
  32. package/dist/index.js +3 -1
  33. package/dist/runtime/helpers/index.d.ts +1 -0
  34. package/dist/runtime/helpers/index.js +1 -0
  35. package/dist/runtime/helpers/tree.d.ts +6 -0
  36. package/dist/runtime/helpers/tree.js +2 -2
  37. package/dist/runtime/helpers/vectors.d.ts +1 -0
  38. package/dist/runtime/helpers/vectors.js +36 -0
  39. package/dist/runtime/initialization/index.d.ts +7 -0
  40. package/dist/runtime/initialization/index.js +6 -0
  41. package/dist/serialization/crdt/index.d.ts +0 -1
  42. package/dist/serialization/crdt/index.js +0 -1
  43. package/dist/serialization/crdt/network/utils.d.ts +9 -0
  44. package/dist/serialization/crdt/network/utils.js +60 -0
  45. package/dist/serialization/crdt/types.d.ts +3 -25
  46. package/dist/serialization/crdt/types.js +1 -3
  47. package/dist/systems/crdt/index.d.ts +1 -0
  48. package/dist/systems/crdt/index.js +146 -55
  49. package/dist/systems/events.d.ts +65 -0
  50. package/dist/systems/events.js +70 -8
  51. package/dist/systems/physics-force.d.ts +1 -0
  52. package/dist/systems/physics-force.js +140 -0
  53. package/dist/systems/physics-impulse.d.ts +12 -0
  54. package/dist/systems/physics-impulse.js +85 -0
  55. package/dist/systems/physics.d.ts +77 -0
  56. package/dist/systems/physics.js +18 -0
  57. package/dist-cjs/components/extended/ParticleSystem.d.ts +24 -0
  58. package/dist-cjs/components/extended/ParticleSystem.js +28 -0
  59. package/dist-cjs/components/generated/ParticleSystem.gen.d.ts +1 -0
  60. package/dist-cjs/components/generated/ParticleSystem.gen.js +28 -0
  61. package/dist-cjs/components/generated/component-names.gen.js +1 -0
  62. package/dist-cjs/components/generated/global.gen.d.ts +2 -0
  63. package/dist-cjs/components/generated/global.gen.js +3 -1
  64. package/dist-cjs/components/generated/index.gen.d.ts +4 -0
  65. package/dist-cjs/components/generated/index.gen.js +8 -2
  66. package/dist-cjs/components/generated/pb/decentraland/common/colors.gen.d.ts +15 -0
  67. package/dist-cjs/components/generated/pb/decentraland/common/colors.gen.js +48 -1
  68. package/dist-cjs/components/generated/pb/decentraland/common/floats.gen.d.ts +16 -0
  69. package/dist-cjs/components/generated/pb/decentraland/common/floats.gen.js +56 -0
  70. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.d.ts +10 -1
  71. package/dist-cjs/components/generated/pb/decentraland/sdk/components/common/input_action.gen.js +11 -1
  72. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.d.ts +241 -0
  73. package/dist-cjs/components/generated/pb/decentraland/sdk/components/particle_system.gen.js +723 -0
  74. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.d.ts +5 -1
  75. package/dist-cjs/components/generated/pb/decentraland/sdk/components/pointer_events.gen.js +20 -1
  76. package/dist-cjs/components/generated/types.gen.d.ts +2 -0
  77. package/dist-cjs/components/generated/types.gen.js +5 -0
  78. package/dist-cjs/components/index.d.ts +2 -5
  79. package/dist-cjs/components/index.js +7 -7
  80. package/dist-cjs/components/manual/Transform.d.ts +13 -9
  81. package/dist-cjs/components/manual/Transform.js +34 -3
  82. package/dist-cjs/components/types.d.ts +1 -1
  83. package/dist-cjs/engine/component.d.ts +1 -52
  84. package/dist-cjs/engine/grow-only-value-set-component-definition.js +1 -44
  85. package/dist-cjs/engine/lww-element-set-component-definition.d.ts +3 -5
  86. package/dist-cjs/engine/lww-element-set-component-definition.js +36 -73
  87. package/dist-cjs/index.d.ts +3 -2
  88. package/dist-cjs/index.js +4 -2
  89. package/dist-cjs/runtime/helpers/index.d.ts +1 -0
  90. package/dist-cjs/runtime/helpers/index.js +1 -0
  91. package/dist-cjs/runtime/helpers/tree.d.ts +6 -0
  92. package/dist-cjs/runtime/helpers/tree.js +3 -2
  93. package/dist-cjs/runtime/helpers/vectors.d.ts +1 -0
  94. package/dist-cjs/runtime/helpers/vectors.js +39 -0
  95. package/dist-cjs/runtime/initialization/index.d.ts +7 -0
  96. package/dist-cjs/runtime/initialization/index.js +7 -1
  97. package/dist-cjs/serialization/crdt/index.d.ts +0 -1
  98. package/dist-cjs/serialization/crdt/index.js +0 -1
  99. package/dist-cjs/serialization/crdt/network/utils.d.ts +9 -0
  100. package/dist-cjs/serialization/crdt/network/utils.js +67 -0
  101. package/dist-cjs/serialization/crdt/types.d.ts +3 -25
  102. package/dist-cjs/serialization/crdt/types.js +1 -3
  103. package/dist-cjs/systems/crdt/index.d.ts +1 -0
  104. package/dist-cjs/systems/crdt/index.js +169 -55
  105. package/dist-cjs/systems/events.d.ts +65 -0
  106. package/dist-cjs/systems/events.js +70 -8
  107. package/dist-cjs/systems/physics-force.d.ts +1 -0
  108. package/dist-cjs/systems/physics-force.js +167 -0
  109. package/dist-cjs/systems/physics-impulse.d.ts +12 -0
  110. package/dist-cjs/systems/physics-impulse.js +112 -0
  111. package/dist-cjs/systems/physics.d.ts +77 -0
  112. package/dist-cjs/systems/physics.js +23 -0
  113. package/package.json +3 -2
  114. package/dist/components/manual/CreatedBy.d.ts +0 -9
  115. package/dist/components/manual/CreatedBy.js +0 -8
  116. package/dist/serialization/crdt/authoritativePutComponent.d.ts +0 -15
  117. package/dist/serialization/crdt/authoritativePutComponent.js +0 -47
  118. package/dist-cjs/components/manual/CreatedBy.d.ts +0 -9
  119. package/dist-cjs/components/manual/CreatedBy.js +0 -10
  120. package/dist-cjs/serialization/crdt/authoritativePutComponent.d.ts +0 -15
  121. package/dist-cjs/serialization/crdt/authoritativePutComponent.js +0 -50
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createComponentDefinitionFromSchema = exports.createGetCrdtMessagesForLww = exports.createUpdateLwwFromCrdt = exports.createForceUpdateLwwFromCrdt = exports.createCrdtRuleValidator = exports.createDumpLwwFunctionFromCrdt = exports.incrementTimestamp = void 0;
3
+ exports.createComponentDefinitionFromSchema = exports.createGetCrdtMessagesForLww = exports.createUpdateLwwFromCrdt = exports.createDumpLwwFunctionFromCrdt = exports.incrementTimestamp = void 0;
4
4
  const ByteBuffer_1 = require("../serialization/ByteBuffer");
5
5
  const crdt_1 = require("../serialization/crdt");
6
6
  const utils_1 = require("../systems/crdt/utils");
@@ -35,12 +35,16 @@ function createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data) {
35
35
  };
36
36
  }
37
37
  exports.createDumpLwwFunctionFromCrdt = createDumpLwwFunctionFromCrdt;
38
- const __GLOBAL_ENTITY = '__GLOBAL_ENTITY';
39
- function createCrdtRuleValidator(timestamps, schema, data) {
38
+ function createUpdateLwwFromCrdt(componentId, timestamps, schema, data, lastSentData) {
40
39
  /**
41
- * Shared CRDT conflict resolution logic
42
- * @public
43
- */
40
+ * Process the received message only if the lamport number recieved is higher
41
+ * than the stored one. If its lower, we spread it to the network to correct the peer.
42
+ * If they are equal, the bigger raw data wins.
43
+
44
+ * Returns the recieved data if the lamport number was bigger than ours.
45
+ * If it was an outdated message, then we return void
46
+ * @public
47
+ */
44
48
  function crdtRuleForCurrentState(message) {
45
49
  const { entityId, timestamp } = message;
46
50
  const currentTimestamp = timestamps.get(entityId);
@@ -50,6 +54,7 @@ function createCrdtRuleValidator(timestamps, schema, data) {
50
54
  }
51
55
  // Outdated Message. Resend our state message through the wire.
52
56
  if (currentTimestamp > timestamp) {
57
+ // console.log('2', currentTimestamp, timestamp)
53
58
  return crdt_1.ProcessMessageResultType.StateOutdatedTimestamp;
54
59
  }
55
60
  // Deletes are idempotent
@@ -66,6 +71,7 @@ function createCrdtRuleValidator(timestamps, schema, data) {
66
71
  currentDataGreater = (0, utils_1.dataCompare)(null, message.data);
67
72
  }
68
73
  // Same data, same timestamp. Weirdo echo message.
74
+ // console.log('3', currentDataGreater, writeBuffer.toBinary(), (message as any).data || null)
69
75
  if (currentDataGreater === 0) {
70
76
  return crdt_1.ProcessMessageResultType.NoChanges;
71
77
  }
@@ -74,37 +80,10 @@ function createCrdtRuleValidator(timestamps, schema, data) {
74
80
  return crdt_1.ProcessMessageResultType.StateOutdatedData;
75
81
  }
76
82
  else {
77
- // Current data is lower
83
+ // Curent data is lower
78
84
  return crdt_1.ProcessMessageResultType.StateUpdatedData;
79
85
  }
80
86
  }
81
- return crdtRuleForCurrentState;
82
- }
83
- exports.createCrdtRuleValidator = createCrdtRuleValidator;
84
- function createForceUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
85
- /**
86
- * Force update component state regardless of timestamp - used for server authoritative messages
87
- */
88
- return (msg) => {
89
- const buffer = new ByteBuffer_1.ReadWriteByteBuffer(msg.data);
90
- const deserializedValue = schema.deserialize(buffer);
91
- data.set(msg.entityId, deserializedValue);
92
- timestamps.set(msg.entityId, msg.timestamp);
93
- return [null, deserializedValue];
94
- };
95
- }
96
- exports.createForceUpdateLwwFromCrdt = createForceUpdateLwwFromCrdt;
97
- function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
98
- /**
99
- * Process the received message only if the lamport number recieved is higher
100
- * than the stored one. If its lower, we spread it to the network to correct the peer.
101
- * If they are equal, the bigger raw data wins.
102
-
103
- * Returns the recieved data if the lamport number was bigger than ours.
104
- * If it was an outdated message, then we return void
105
- * @public
106
- */
107
- const crdtRuleForCurrentState = createCrdtRuleValidator(timestamps, schema, data);
108
87
  return (msg) => {
109
88
  /* istanbul ignore next */
110
89
  if (msg.type !== crdt_1.CrdtMessageType.PUT_COMPONENT &&
@@ -122,9 +101,11 @@ function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
122
101
  if (msg.type === crdt_1.CrdtMessageType.PUT_COMPONENT || msg.type === crdt_1.CrdtMessageType.PUT_COMPONENT_NETWORK) {
123
102
  const buf = new ByteBuffer_1.ReadWriteByteBuffer(msg.data);
124
103
  data.set(entity, schema.deserialize(buf));
104
+ lastSentData.set(entity, new Uint8Array(msg.data));
125
105
  }
126
106
  else {
127
107
  data.delete(entity);
108
+ lastSentData.delete(entity);
128
109
  }
129
110
  return [null, data.get(entity)];
130
111
  }
@@ -161,23 +142,34 @@ function createUpdateLwwFromCrdt(componentId, timestamps, schema, data) {
161
142
  };
162
143
  }
163
144
  exports.createUpdateLwwFromCrdt = createUpdateLwwFromCrdt;
164
- function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data) {
145
+ function createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data, lastSentData) {
165
146
  return function* () {
147
+ const writeBuffer = new ByteBuffer_1.ReadWriteByteBuffer();
166
148
  for (const entity of dirtyIterator) {
167
- const newTimestamp = incrementTimestamp(entity, timestamps);
168
149
  if (data.has(entity)) {
169
- const writeBuffer = new ByteBuffer_1.ReadWriteByteBuffer();
150
+ writeBuffer.resetBuffer();
170
151
  schema.serialize(data.get(entity), writeBuffer);
152
+ // Compare against last-sent snapshot using the zero-copy subarray view.
153
+ // Only allocate a copy when bytes actually differ.
154
+ const previousBytes = lastSentData.get(entity);
155
+ if (previousBytes && (0, utils_1.dataCompare)(writeBuffer.toBinary(), previousBytes) === 0) {
156
+ continue;
157
+ }
158
+ const currentBytes = writeBuffer.toCopiedBinary();
159
+ const newTimestamp = incrementTimestamp(entity, timestamps);
160
+ lastSentData.set(entity, currentBytes);
171
161
  const msg = {
172
162
  type: crdt_1.CrdtMessageType.PUT_COMPONENT,
173
163
  componentId,
174
164
  entityId: entity,
175
- data: writeBuffer.toBinary(),
165
+ data: currentBytes,
176
166
  timestamp: newTimestamp
177
167
  };
178
168
  yield msg;
179
169
  }
180
170
  else {
171
+ lastSentData.delete(entity);
172
+ const newTimestamp = incrementTimestamp(entity, timestamps);
181
173
  const msg = {
182
174
  type: crdt_1.CrdtMessageType.DELETE_COMPONENT,
183
175
  componentId,
@@ -198,8 +190,8 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
198
190
  const data = new Map();
199
191
  const dirtyIterator = new Set();
200
192
  const timestamps = new Map();
193
+ const lastSentData = new Map();
201
194
  const onChangeCallbacks = new Map();
202
- const validateCallbacks = new Map();
203
195
  return {
204
196
  get componentId() {
205
197
  return componentId;
@@ -220,12 +212,14 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
220
212
  if (data.delete(entity) && markAsDirty) {
221
213
  dirtyIterator.add(entity);
222
214
  }
215
+ lastSentData.delete(entity);
223
216
  return component || null;
224
217
  },
225
218
  entityDeleted(entity, markAsDirty) {
226
219
  if (data.delete(entity) && markAsDirty) {
227
220
  dirtyIterator.add(entity);
228
221
  }
222
+ lastSentData.delete(entity);
229
223
  },
230
224
  getOrNull(entity) {
231
225
  const component = data.get(entity);
@@ -252,6 +246,7 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
252
246
  const usedValue = value === undefined ? schema.create() : schema.extend ? schema.extend(value) : value;
253
247
  data.set(entity, usedValue);
254
248
  dirtyIterator.add(entity);
249
+ lastSentData.delete(entity);
255
250
  return usedValue;
256
251
  },
257
252
  getMutableOrNull(entity) {
@@ -289,41 +284,9 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
289
284
  yield entity;
290
285
  }
291
286
  },
292
- getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data),
293
- updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data),
294
- __forceUpdateFromCrdt: createForceUpdateLwwFromCrdt(componentId, timestamps, schema, data),
295
- __dry_run_updateFromCrdt: createCrdtRuleValidator(timestamps, schema, data),
287
+ getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data, lastSentData),
288
+ updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data, lastSentData),
296
289
  dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data),
297
- validateBeforeChange(entityOrCb, cb) {
298
- if (arguments.length === 1) {
299
- // Second overload: just callback (global validation)
300
- validateCallbacks.set(__GLOBAL_ENTITY, entityOrCb);
301
- }
302
- else {
303
- if (cb) {
304
- validateCallbacks.set(entityOrCb, cb);
305
- }
306
- }
307
- },
308
- __run_validateBeforeChange(entity, newValue, senderAddress, createdBy) {
309
- const cb = entity && validateCallbacks.get(entity);
310
- const globalCb = validateCallbacks.get(__GLOBAL_ENTITY);
311
- const currentValue = data.get(entity);
312
- const value = { entity, currentValue, newValue, senderAddress, createdBy };
313
- const globalResult = globalCb?.(value) ?? true;
314
- const entityResult = (globalResult && cb?.(value)) ?? true;
315
- return globalResult && entityResult;
316
- },
317
- getCrdtState(entity) {
318
- const componentData = data.get(entity);
319
- const timestamp = timestamps.get(entity);
320
- if (componentData && timestamp !== undefined) {
321
- const buffer = new ByteBuffer_1.ReadWriteByteBuffer();
322
- schema.serialize((0, readonly_1.deepReadonly)(componentData), buffer);
323
- return { data: buffer.toBinary(), timestamp };
324
- }
325
- return null;
326
- },
327
290
  onChange(entity, cb) {
328
291
  const cbs = onChangeCallbacks.get(entity) ?? [];
329
292
  cbs.push(cb);
@@ -12,9 +12,10 @@ export * from './systems/assetLoad';
12
12
  export * from './systems/async-task';
13
13
  export * from './systems/tween';
14
14
  export * from './systems/triggerArea';
15
+ export * from './systems/physics';
15
16
  export * from './engine/entity';
16
17
  export * from './components/types';
17
- import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended, ICreatedBy } from './components/types';
18
+ import { MaterialComponentDefinitionExtended, MeshColliderComponentDefinitionExtended, MeshRendererComponentDefinitionExtended, TransformComponentExtended, AnimatorComponentDefinitionExtended, AudioSourceComponentDefinitionExtended, AudioStreamComponentDefinitionExtended, ISyncComponents, TweenComponentDefinitionExtended, INetowrkEntity, INetowrkParent, VirtualCameraComponentDefinitionExtended, InputModifierComponentDefinitionExtended, LightSourceComponentDefinitionExtended, TriggerAreaComponentDefinitionExtended, ParticleSystemComponentDefinitionExtended } from './components/types';
18
19
  import { NameComponent } from './components/manual/Name';
19
20
  import { TagsComponentDefinitionExtended } from './components/manual/Tags';
20
21
  export declare const Transform: TransformComponentExtended;
@@ -31,6 +32,7 @@ export declare const VirtualCamera: VirtualCameraComponentDefinitionExtended;
31
32
  export declare const InputModifier: InputModifierComponentDefinitionExtended;
32
33
  export declare const LightSource: LightSourceComponentDefinitionExtended;
33
34
  export declare const TriggerArea: TriggerAreaComponentDefinitionExtended;
35
+ export declare const ParticleSystem: ParticleSystemComponentDefinitionExtended;
34
36
  /**
35
37
  * @alpha
36
38
  * This is going to be used for sync components through a server.
@@ -47,7 +49,6 @@ export declare const NetworkEntity: INetowrkEntity;
47
49
  * Tag a entity to be syncronized through comms
48
50
  */
49
51
  export declare const NetworkParent: INetowrkParent;
50
- export declare const CreatedBy: ICreatedBy;
51
52
  export * from './components/generated/global.gen';
52
53
  export * from './components/generated/types.gen';
53
54
  export * from './serialization/crdt';
package/dist-cjs/index.js CHANGED
@@ -26,7 +26,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
26
26
  return result;
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.CreatedBy = exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.TriggerArea = exports.LightSource = exports.InputModifier = exports.VirtualCamera = exports.Tween = exports.Tags = exports.Name = exports.MeshCollider = exports.MeshRenderer = exports.Material = exports.AudioStream = exports.AudioSource = exports.Animator = exports.Transform = exports.components = exports.cyclicParentingChecker = void 0;
29
+ exports.NetworkParent = exports.NetworkEntity = exports.SyncComponents = exports.ParticleSystem = exports.TriggerArea = exports.LightSource = exports.InputModifier = exports.VirtualCamera = exports.Tween = exports.Tags = exports.Name = exports.MeshCollider = exports.MeshRenderer = exports.Material = exports.AudioStream = exports.AudioSource = exports.Animator = exports.Transform = exports.components = exports.cyclicParentingChecker = void 0;
30
30
  // The order of the following imports matters. Please do not auto-sort
31
31
  __exportStar(require("./engine"), exports);
32
32
  __exportStar(require("./schemas"), exports);
@@ -43,6 +43,7 @@ __exportStar(require("./systems/assetLoad"), exports);
43
43
  __exportStar(require("./systems/async-task"), exports);
44
44
  __exportStar(require("./systems/tween"), exports);
45
45
  __exportStar(require("./systems/triggerArea"), exports);
46
+ __exportStar(require("./systems/physics"), exports);
46
47
  __exportStar(require("./engine/entity"), exports);
47
48
  __exportStar(require("./components/types"), exports);
48
49
  // @internal
@@ -64,6 +65,8 @@ exports.VirtualCamera = components.VirtualCamera(initialization_1.engine);
64
65
  exports.InputModifier = components.InputModifier(initialization_1.engine);
65
66
  exports.LightSource = components.LightSource(initialization_1.engine);
66
67
  exports.TriggerArea = components.TriggerArea(initialization_1.engine);
68
+ exports.ParticleSystem =
69
+ /* @__PURE__*/ components.ParticleSystem(initialization_1.engine);
67
70
  /**
68
71
  * @alpha
69
72
  * This is going to be used for sync components through a server.
@@ -80,7 +83,6 @@ exports.NetworkEntity = components.NetworkEntity(initialization_1.engine);
80
83
  * Tag a entity to be syncronized through comms
81
84
  */
82
85
  exports.NetworkParent = components.NetworkParent(initialization_1.engine);
83
- exports.CreatedBy = components.CreatedBy(initialization_1.engine);
84
86
  // export components for global engine
85
87
  __exportStar(require("./components/generated/global.gen"), exports);
86
88
  __exportStar(require("./components/generated/types.gen"), exports);
@@ -1,3 +1,4 @@
1
1
  export * from './coordinates';
2
2
  export * from './tree';
3
+ export * from './vectors';
3
4
  export { createTimers, Timers, TimerId, TimerCallback } from './timers';
@@ -17,5 +17,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  exports.createTimers = void 0;
18
18
  __exportStar(require("./coordinates"), exports);
19
19
  __exportStar(require("./tree"), exports);
20
+ __exportStar(require("./vectors"), exports);
20
21
  var timers_1 = require("./timers");
21
22
  Object.defineProperty(exports, "createTimers", { enumerable: true, get: function () { return timers_1.createTimers; } });
@@ -2,6 +2,12 @@ import { Entity } from '../../engine/entity';
2
2
  import { ComponentDefinition, IEngine } from '../../engine';
3
3
  import { Vector3Type } from '../../schemas/custom/Vector3';
4
4
  import { QuaternionType } from '../../schemas/custom/Quaternion';
5
+ /**
6
+ * @public
7
+ * Rotate a vector by a quaternion
8
+ * Uses the formula: v' = q * v * q^(-1), optimized version
9
+ */
10
+ export declare function rotateVectorByQuaternion(v: Vector3Type, q: QuaternionType): Vector3Type;
5
11
  /**
6
12
  * Get an iterator of entities that follow a tree structure for a component
7
13
  * @public
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.getWorldRotation = exports.getWorldPosition = exports.getEntitiesWithParent = exports.removeEntityWithChildren = exports.getComponentEntityTree = void 0;
26
+ exports.getWorldRotation = exports.getWorldPosition = exports.getEntitiesWithParent = exports.removeEntityWithChildren = exports.getComponentEntityTree = exports.rotateVectorByQuaternion = void 0;
27
27
  const components = __importStar(require("../../components"));
28
28
  /**
29
29
  * @internal
@@ -61,7 +61,7 @@ function multiplyQuaternions(q1, q2) {
61
61
  };
62
62
  }
63
63
  /**
64
- * @internal
64
+ * @public
65
65
  * Rotate a vector by a quaternion
66
66
  * Uses the formula: v' = q * v * q^(-1), optimized version
67
67
  */
@@ -80,6 +80,7 @@ function rotateVectorByQuaternion(v, q) {
80
80
  z: iz * qw + iw * -qz + ix * -qy - iy * -qx
81
81
  };
82
82
  }
83
+ exports.rotateVectorByQuaternion = rotateVectorByQuaternion;
83
84
  /** @internal Identity transform values */
84
85
  const IDENTITY_POSITION = { x: 0, y: 0, z: 0 };
85
86
  const IDENTITY_ROTATION = { x: 0, y: 0, z: 0, w: 1 };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Vector3 = void 0;
4
+ /**
5
+ * Lightweight Vector3 math utilities for internal use.
6
+ * Mirrors the subset of @dcl/ecs-math Vector3 API used by the physics helpers.
7
+ *
8
+ * TEMPORARY WORKAROUND: @dcl/ecs-math ships ESM-only, which breaks the dist-cjs build.
9
+ * The proper fix is to add a CJS build to @dcl/ecs-math upstream, then replace this
10
+ * file with `import { Vector3 } from '@dcl/ecs-math'`.
11
+ *
12
+ * @internal
13
+ */
14
+ exports.Vector3 = {
15
+ add(a, b) {
16
+ return { x: a.x + b.x, y: a.y + b.y, z: a.z + b.z };
17
+ },
18
+ subtract(a, b) {
19
+ return { x: a.x - b.x, y: a.y - b.y, z: a.z - b.z };
20
+ },
21
+ scale(v, s) {
22
+ return { x: v.x * s, y: v.y * s, z: v.z * s };
23
+ },
24
+ length(v) {
25
+ return Math.sqrt(v.x * v.x + v.y * v.y + v.z * v.z);
26
+ },
27
+ normalize(v) {
28
+ const len = exports.Vector3.length(v);
29
+ if (len === 0)
30
+ return { x: 0, y: 0, z: 0 };
31
+ return { x: v.x / len, y: v.y / len, z: v.z / len };
32
+ },
33
+ equals(a, b) {
34
+ return a.x === b.x && a.y === b.y && a.z === b.z;
35
+ },
36
+ equalsToFloats(v, x, y, z) {
37
+ return v.x === x && v.y === y && v.z === z;
38
+ }
39
+ };
@@ -12,6 +12,7 @@ import { AssetLoadLoadingStateSystem } from '../../systems/assetLoad';
12
12
  import { TweenSystem } from '../../systems/tween';
13
13
  import { TriggerAreaEventsSystem } from '../../systems/triggerArea';
14
14
  import { createTimers, Timers } from '../helpers/timers';
15
+ import { PhysicsSystem } from '../../systems/physics';
15
16
  /**
16
17
  * @public
17
18
  * The engine is the part of the scene that sits in the middle and manages all of the other parts.
@@ -77,6 +78,12 @@ export { TriggerAreaEventsSystem };
77
78
  */
78
79
  export declare const timers: Timers;
79
80
  export { Timers, createTimers };
81
+ /**
82
+ * @public
83
+ * Physics helpers for applying impulses and forces to the player.
84
+ */
85
+ export declare const Physics: PhysicsSystem;
86
+ export { PhysicsSystem };
80
87
  /**
81
88
  * @public
82
89
  * Runs an async function
@@ -4,7 +4,7 @@
4
4
  * init and it'll be changing.
5
5
  */
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.executeTask = exports.createTimers = exports.timers = exports.triggerAreaEventsSystem = exports.tweenSystem = exports.assetLoadLoadingStateSystem = exports.videoEventsSystem = exports.raycastSystem = exports.pointerEventsSystem = exports.inputSystem = exports.engine = void 0;
7
+ exports.executeTask = exports.Physics = exports.createTimers = exports.timers = exports.triggerAreaEventsSystem = exports.tweenSystem = exports.assetLoadLoadingStateSystem = exports.videoEventsSystem = exports.raycastSystem = exports.pointerEventsSystem = exports.inputSystem = exports.engine = void 0;
8
8
  const engine_1 = require("../../engine");
9
9
  const async_task_1 = require("../../systems/async-task");
10
10
  const events_1 = require("../../systems/events");
@@ -18,6 +18,7 @@ const triggerArea_1 = require("../../systems/triggerArea");
18
18
  const timers_1 = require("../helpers/timers");
19
19
  Object.defineProperty(exports, "createTimers", { enumerable: true, get: function () { return timers_1.createTimers; } });
20
20
  const globals_1 = require("../globals");
21
+ const physics_1 = require("../../systems/physics");
21
22
  /**
22
23
  * @public
23
24
  * The engine is the part of the scene that sits in the middle and manages all of the other parts.
@@ -80,6 +81,11 @@ exports.timers = (0, timers_1.createTimers)(exports.engine);
80
81
  (0, globals_1.setGlobalPolyfill)('clearTimeout', exports.timers.clearTimeout);
81
82
  (0, globals_1.setGlobalPolyfill)('setInterval', exports.timers.setInterval);
82
83
  (0, globals_1.setGlobalPolyfill)('clearInterval', exports.timers.clearInterval);
84
+ /**
85
+ * @public
86
+ * Physics helpers for applying impulses and forces to the player.
87
+ */
88
+ exports.Physics = (0, physics_1.createPhysicsSystem)(exports.engine);
83
89
  /**
84
90
  * Adds pointer event collider system only in DEV env
85
91
  */
@@ -7,4 +7,3 @@ export * from './network/deleteComponentNetwork';
7
7
  export * from './network/deleteEntityNetwork';
8
8
  export * from './types';
9
9
  export * from './crdtMessageProtocol';
10
- export * from './authoritativePutComponent';
@@ -23,4 +23,3 @@ __exportStar(require("./network/deleteComponentNetwork"), exports);
23
23
  __exportStar(require("./network/deleteEntityNetwork"), exports);
24
24
  __exportStar(require("./types"), exports);
25
25
  __exportStar(require("./crdtMessageProtocol"), exports);
26
- __exportStar(require("./authoritativePutComponent"), exports);
@@ -0,0 +1,9 @@
1
+ import { Entity } from '../../../engine';
2
+ import { ReceiveMessage, TransformType } from '../../../runtime/types';
3
+ import { ReceiveNetworkMessage } from '../../../systems/crdt/types';
4
+ import { ByteBuffer } from '../../ByteBuffer';
5
+ import { INetowrkEntityType } from '../../../components/types';
6
+ export declare function isNetworkMessage(message: ReceiveMessage): message is ReceiveNetworkMessage;
7
+ export declare function networkMessageToLocal(message: ReceiveNetworkMessage, localEntityId: Entity, buffer: ByteBuffer, destinationBuffer: ByteBuffer): void;
8
+ export declare function localMessageToNetwork(message: ReceiveMessage, network: INetowrkEntityType, buffer: ByteBuffer, destinationBuffer: ByteBuffer): void;
9
+ export declare function fixTransformParent(message: ReceiveMessage, transformValue?: TransformType, parent?: Entity): Uint8Array;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fixTransformParent = exports.localMessageToNetwork = exports.networkMessageToLocal = exports.isNetworkMessage = void 0;
4
+ const ByteBuffer_1 = require("../../ByteBuffer");
5
+ const putComponent_1 = require("../putComponent");
6
+ const types_1 = require("../types");
7
+ const deleteComponent_1 = require("../deleteComponent");
8
+ const deleteEntity_1 = require("../deleteEntity");
9
+ const putComponentNetwork_1 = require("./putComponentNetwork");
10
+ const deleteComponentNetwork_1 = require("./deleteComponentNetwork");
11
+ const deleteEntityNetwork_1 = require("./deleteEntityNetwork");
12
+ const Transform_1 = require("../../../components/manual/Transform");
13
+ /* istanbul ignore next */
14
+ function isNetworkMessage(message) {
15
+ return [
16
+ types_1.CrdtMessageType.DELETE_COMPONENT_NETWORK,
17
+ types_1.CrdtMessageType.DELETE_ENTITY_NETWORK,
18
+ types_1.CrdtMessageType.PUT_COMPONENT_NETWORK
19
+ ].includes(message.type);
20
+ }
21
+ exports.isNetworkMessage = isNetworkMessage;
22
+ /* istanbul ignore next */
23
+ function networkMessageToLocal(message, localEntityId, buffer, destinationBuffer) {
24
+ const offset = buffer.currentWriteOffset();
25
+ if (message.type === types_1.CrdtMessageType.PUT_COMPONENT_NETWORK) {
26
+ putComponent_1.PutComponentOperation.write(localEntityId, message.timestamp, message.componentId, message.data, buffer);
27
+ }
28
+ else if (message.type === types_1.CrdtMessageType.DELETE_COMPONENT_NETWORK) {
29
+ deleteComponent_1.DeleteComponent.write(localEntityId, message.componentId, message.timestamp, buffer);
30
+ }
31
+ else if (message.type === types_1.CrdtMessageType.DELETE_ENTITY_NETWORK) {
32
+ deleteEntity_1.DeleteEntity.write(localEntityId, buffer);
33
+ }
34
+ destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);
35
+ }
36
+ exports.networkMessageToLocal = networkMessageToLocal;
37
+ /* istanbul ignore next */
38
+ function localMessageToNetwork(message, network, buffer, destinationBuffer) {
39
+ const offset = buffer.currentWriteOffset();
40
+ if (message.type === types_1.CrdtMessageType.PUT_COMPONENT) {
41
+ putComponentNetwork_1.PutNetworkComponentOperation.write(network.entityId, message.timestamp, message.componentId, network.networkId, message.data, buffer);
42
+ }
43
+ else if (message.type === types_1.CrdtMessageType.DELETE_COMPONENT) {
44
+ deleteComponentNetwork_1.DeleteComponentNetwork.write(network.entityId, message.componentId, message.timestamp, network.networkId, buffer);
45
+ }
46
+ else if (message.type === types_1.CrdtMessageType.DELETE_ENTITY) {
47
+ deleteEntityNetwork_1.DeleteEntityNetwork.write(network.entityId, network.networkId, buffer);
48
+ }
49
+ destinationBuffer.writeBuffer(buffer.buffer().subarray(offset, buffer.currentWriteOffset()), false);
50
+ }
51
+ exports.localMessageToNetwork = localMessageToNetwork;
52
+ const buffer = new ByteBuffer_1.ReadWriteByteBuffer();
53
+ /* istanbul ignore next */
54
+ function fixTransformParent(message, transformValue, parent) {
55
+ buffer.resetBuffer();
56
+ let transform = transformValue;
57
+ if (!transform && 'data' in message) {
58
+ transform = Transform_1.TransformSchema.deserialize(new ByteBuffer_1.ReadWriteByteBuffer(message.data));
59
+ }
60
+ if (!transform)
61
+ throw new Error('Invalid parent transform');
62
+ // Generate new transform raw data with the parent
63
+ const newTransform = { ...transform, parent };
64
+ Transform_1.TransformSchema.serialize(newTransform, buffer);
65
+ return buffer.toBinary();
66
+ }
67
+ exports.fixTransformParent = fixTransformParent;
@@ -11,8 +11,7 @@ export declare enum CrdtMessageType {
11
11
  PUT_COMPONENT_NETWORK = 5,
12
12
  DELETE_COMPONENT_NETWORK = 6,
13
13
  DELETE_ENTITY_NETWORK = 7,
14
- AUTHORITATIVE_PUT_COMPONENT = 8,
15
- MAX_MESSAGE_TYPE = 9
14
+ MAX_MESSAGE_TYPE = 8
16
15
  }
17
16
  /**
18
17
  * Min length = 8 bytes
@@ -49,23 +48,6 @@ export type PutNetworkComponentMessageBody = Omit<PutComponentMessageBody, 'type
49
48
  type: CrdtMessageType.PUT_COMPONENT_NETWORK;
50
49
  networkId: number;
51
50
  };
52
- /**
53
- * Server authoritative message - identical to PutComponentMessageBody but with forced processing
54
- * Min. length = header (8 bytes) + 16 bytes = 24 bytes
55
- *
56
- * @param entity - Uint32 number of the entity
57
- * @param componentId - Uint32 number of id
58
- * @param timestamp - Uint32 Lamport timestamp (server's authoritative timestamp)
59
- * @param data - Uint8[] data of component => length(4 bytes) + block of bytes[0..length-1]
60
- * @public
61
- */
62
- export type AuthoritativePutComponentMessageBody = {
63
- type: CrdtMessageType.AUTHORITATIVE_PUT_COMPONENT;
64
- entityId: Entity;
65
- componentId: number;
66
- timestamp: number;
67
- data: Uint8Array;
68
- };
69
51
  /**
70
52
  * Min. length = header (8 bytes) + 16 bytes = 24 bytes
71
53
  *
@@ -132,10 +114,6 @@ export type AppendValueMessage = CrdtMessageHeader & AppendValueMessageBody;
132
114
  * @public
133
115
  */
134
116
  export type PutComponentMessage = CrdtMessageHeader & PutComponentMessageBody;
135
- /**
136
- * @public
137
- */
138
- export type AuthoritativePutComponentMessage = CrdtMessageHeader & AuthoritativePutComponentMessageBody;
139
117
  /**
140
118
  * @public
141
119
  */
@@ -159,7 +137,7 @@ export type DeleteEntityNetworkMessage = CrdtMessageHeader & DeleteEntityNetwork
159
137
  /**
160
138
  * @public
161
139
  */
162
- export type CrdtMessage = PutComponentMessage | AuthoritativePutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
140
+ export type CrdtMessage = PutComponentMessage | DeleteComponentMessage | AppendValueMessage | DeleteEntityMessage | PutNetworkComponentMessage | DeleteComponentNetworkMessage | DeleteEntityNetworkMessage;
163
141
  /**
164
142
  * @public
165
143
  */
@@ -167,7 +145,7 @@ export type CrdtNetworkMessageBody = PutNetworkComponentMessageBody | DeleteComp
167
145
  /**
168
146
  * @public
169
147
  */
170
- export type CrdtMessageBody = PutComponentMessageBody | AuthoritativePutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
148
+ export type CrdtMessageBody = PutComponentMessageBody | DeleteComponentMessageBody | DeleteEntityMessageBody | AppendValueMessageBody | CrdtNetworkMessageBody;
171
149
  export declare enum ProcessMessageResultType {
172
150
  /**
173
151
  * Typical message and new state set.
@@ -16,9 +16,7 @@ var CrdtMessageType;
16
16
  CrdtMessageType[CrdtMessageType["PUT_COMPONENT_NETWORK"] = 5] = "PUT_COMPONENT_NETWORK";
17
17
  CrdtMessageType[CrdtMessageType["DELETE_COMPONENT_NETWORK"] = 6] = "DELETE_COMPONENT_NETWORK";
18
18
  CrdtMessageType[CrdtMessageType["DELETE_ENTITY_NETWORK"] = 7] = "DELETE_ENTITY_NETWORK";
19
- // Server authoritative operation - forces component state regardless of timestamp
20
- CrdtMessageType[CrdtMessageType["AUTHORITATIVE_PUT_COMPONENT"] = 8] = "AUTHORITATIVE_PUT_COMPONENT";
21
- CrdtMessageType[CrdtMessageType["MAX_MESSAGE_TYPE"] = 9] = "MAX_MESSAGE_TYPE";
19
+ CrdtMessageType[CrdtMessageType["MAX_MESSAGE_TYPE"] = 8] = "MAX_MESSAGE_TYPE";
22
20
  })(CrdtMessageType = exports.CrdtMessageType || (exports.CrdtMessageType = {}));
23
21
  /**
24
22
  * @public
@@ -1,6 +1,7 @@
1
1
  import { Entity } from '../../engine/entity';
2
2
  import type { ComponentDefinition } from '../../engine';
3
3
  import { CrdtMessageType } from '../../serialization/crdt/types';
4
+ export declare const LIVEKIT_MAX_SIZE = 12;
4
5
  /**
5
6
  * @public
6
7
  */