@dcl/ecs 7.3.40-7698451743.commit-c9c61fe → 7.3.40-7717066166.commit-ece036d

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 (33) hide show
  1. package/dist/components/generated/global.gen.d.ts +8 -0
  2. package/dist/components/generated/global.gen.js +4 -0
  3. package/dist/components/generated/index.gen.d.ts +16 -0
  4. package/dist/components/generated/index.gen.js +22 -0
  5. package/dist/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.d.ts +2 -13
  6. package/dist/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.js +14 -43
  7. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +1 -1
  8. package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +3 -3
  9. package/dist/engine/component.d.ts +6 -0
  10. package/dist/engine/entity.d.ts +8 -4
  11. package/dist/engine/entity.js +13 -48
  12. package/dist/engine/grow-only-value-set-component-definition.js +9 -1
  13. package/dist/engine/index.js +28 -9
  14. package/dist/engine/lww-element-set-component-definition.js +8 -1
  15. package/dist/engine/types.d.ts +2 -1
  16. package/dist/systems/crdt/index.js +1 -1
  17. package/dist-cjs/components/generated/global.gen.d.ts +8 -0
  18. package/dist-cjs/components/generated/global.gen.js +5 -1
  19. package/dist-cjs/components/generated/index.gen.d.ts +16 -0
  20. package/dist-cjs/components/generated/index.gen.js +27 -1
  21. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.d.ts +2 -13
  22. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.js +15 -44
  23. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +1 -1
  24. package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +3 -3
  25. package/dist-cjs/engine/component.d.ts +6 -0
  26. package/dist-cjs/engine/entity.d.ts +8 -4
  27. package/dist-cjs/engine/entity.js +15 -50
  28. package/dist-cjs/engine/grow-only-value-set-component-definition.js +9 -1
  29. package/dist-cjs/engine/index.js +27 -8
  30. package/dist-cjs/engine/lww-element-set-component-definition.js +8 -1
  31. package/dist-cjs/engine/types.d.ts +2 -1
  32. package/dist-cjs/systems/crdt/index.js +1 -1
  33. package/package.json +2 -2
@@ -24,6 +24,7 @@ function createValueSetComponentDefinitionFromSchema(componentName, componentId,
24
24
  const data = new Map();
25
25
  const dirtyIterator = new Set();
26
26
  const queuedCommands = [];
27
+ const onChangeCallbacks = new Map();
27
28
  // only sort the array if the latest (N) element has a timestamp <= N-1
28
29
  function shouldSort(row) {
29
30
  const len = row.raw.length;
@@ -126,7 +127,8 @@ function createValueSetComponentDefinitionFromSchema(componentName, componentId,
126
127
  updateFromCrdt(_body) {
127
128
  if (_body.type === crdt_1.CrdtMessageType.APPEND_VALUE) {
128
129
  const buf = new ByteBuffer_1.ReadWriteByteBuffer(_body.data);
129
- append(_body.entityId, schema.deserialize(buf));
130
+ const { value } = append(_body.entityId, schema.deserialize(buf));
131
+ return [null, value];
130
132
  }
131
133
  return [null, undefined];
132
134
  },
@@ -140,6 +142,12 @@ function createValueSetComponentDefinitionFromSchema(componentName, componentId,
140
142
  crdt_1.AppendValueOperation.write(entity, 0, componentId, buf.toBinary(), buffer);
141
143
  }
142
144
  }
145
+ },
146
+ onChange(entity, cb) {
147
+ onChangeCallbacks.set(entity, cb);
148
+ },
149
+ __onChangeCallbacks(entity) {
150
+ return onChangeCallbacks.get(entity);
143
151
  }
144
152
  };
145
153
  return ret;
@@ -37,11 +37,12 @@ const entity_1 = require("./entity");
37
37
  const systems_1 = require("./systems");
38
38
  const grow_only_value_set_component_definition_1 = require("./grow-only-value-set-component-definition");
39
39
  const tree_1 = require("../runtime/helpers/tree");
40
+ const crdt_2 = require("../serialization/crdt");
40
41
  __exportStar(require("./input"), exports);
41
42
  __exportStar(require("./readonly"), exports);
42
43
  __exportStar(require("./types"), exports);
43
- function preEngine() {
44
- const entityContainer = (0, entity_1.EntityContainer)();
44
+ function preEngine(options) {
45
+ const entityContainer = options?.entityContainer ?? (0, entity_1.createEntityContainer)();
45
46
  const componentsDefinition = new Map();
46
47
  const systems = (0, systems_1.SystemContainer)();
47
48
  let sealed = false;
@@ -57,8 +58,9 @@ function preEngine() {
57
58
  }
58
59
  function removeEntity(entity) {
59
60
  for (const [, component] of componentsDefinition) {
60
- // TODO: hack for the moment. It should be enough to delete the entity, but the renderer is not cleaning the components.
61
- // So we still need the NetworkEntity to forward this message to the SyncTransport.
61
+ // TODO: hack for the moment.
62
+ // We still need the NetworkEntity to forward this message to the SyncTransport.
63
+ // If we remove it then we can't notify the other users which entity was deleted.
62
64
  if (component.componentName === 'core-schema::Network-Entity')
63
65
  continue;
64
66
  component.entityDeleted(entity, true);
@@ -159,8 +161,8 @@ function preEngine() {
159
161
  }
160
162
  }
161
163
  function getEntityOrNullByName(value) {
162
- const LabelComponent = components.Name({ defineComponent });
163
- for (const [entity, name] of getEntitiesWith(LabelComponent)) {
164
+ const NameComponent = components.Name({ defineComponent });
165
+ for (const [entity, name] of getEntitiesWith(NameComponent)) {
164
166
  if (name.value === value)
165
167
  return entity;
166
168
  }
@@ -226,8 +228,25 @@ function preEngine() {
226
228
  * @deprecated Prevent manual usage prefer "engine" for scene development
227
229
  */
228
230
  function Engine(options) {
229
- const partialEngine = preEngine();
230
- const crdtSystem = (0, crdt_1.crdtSceneSystem)(partialEngine, options?.onChangeFunction || null);
231
+ const partialEngine = preEngine(options);
232
+ const onChangeFunction = (entity, operation, component, componentValue) => {
233
+ if (operation === crdt_2.CrdtMessageType.DELETE_ENTITY) {
234
+ for (const component of partialEngine.componentsIter()) {
235
+ const onChange = component?.__onChangeCallbacks(entity);
236
+ if (onChange) {
237
+ onChange(undefined);
238
+ }
239
+ }
240
+ }
241
+ else {
242
+ const onChange = component?.__onChangeCallbacks(entity);
243
+ if (onChange) {
244
+ onChange(componentValue);
245
+ }
246
+ }
247
+ return options?.onChangeFunction(entity, operation, component, componentValue);
248
+ };
249
+ const crdtSystem = (0, crdt_1.crdtSceneSystem)(partialEngine, onChangeFunction);
231
250
  async function update(dt) {
232
251
  await crdtSystem.receiveMessages();
233
252
  for (const system of partialEngine.getSystems()) {
@@ -177,6 +177,7 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
177
177
  const data = new Map();
178
178
  const dirtyIterator = new Set();
179
179
  const timestamps = new Map();
180
+ const onChangeCallbacks = new Map();
180
181
  return {
181
182
  get componentId() {
182
183
  return componentId;
@@ -268,7 +269,13 @@ function createComponentDefinitionFromSchema(componentName, componentId, schema)
268
269
  },
269
270
  getCrdtUpdates: createGetCrdtMessagesForLww(componentId, timestamps, dirtyIterator, schema, data),
270
271
  updateFromCrdt: createUpdateLwwFromCrdt(componentId, timestamps, schema, data),
271
- dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data)
272
+ dumpCrdtStateToBuffer: createDumpLwwFunctionFromCrdt(componentId, timestamps, schema, data),
273
+ onChange(entity, cb) {
274
+ onChangeCallbacks.set(entity, cb);
275
+ },
276
+ __onChangeCallbacks(entity) {
277
+ return onChangeCallbacks.get(entity);
278
+ }
272
279
  };
273
280
  }
274
281
  exports.createComponentDefinitionFromSchema = createComponentDefinitionFromSchema;
@@ -3,7 +3,7 @@ import { MapResult, Spec } from '../schemas/Map';
3
3
  import { OnChangeFunction } from '../systems/crdt';
4
4
  import { Transport } from '../systems/crdt/types';
5
5
  import { ComponentDefinition, GrowOnlyValueSetComponentDefinition, LastWriteWinElementSetComponentDefinition } from './component';
6
- import { Entity, EntityState } from './entity';
6
+ import { Entity, IEntityContainer, EntityState } from './entity';
7
7
  import { ValueSetOptions } from './grow-only-value-set-component-definition';
8
8
  import { ReadonlyComponentSchema } from './readonly';
9
9
  import { SystemFn } from './systems';
@@ -38,6 +38,7 @@ export interface MapComponentDefinition<T> extends LastWriteWinElementSetCompone
38
38
  */
39
39
  export interface IEngineOptions {
40
40
  onChangeFunction: OnChangeFunction;
41
+ entityContainer?: IEntityContainer;
41
42
  }
42
43
  /**
43
44
  * @public
@@ -165,7 +165,7 @@ function crdtSceneSystem(engine, onProcessEntityComponentChange) {
165
165
  if (!conflictMessage) {
166
166
  // Add message to transport queue to be processed by others transports
167
167
  broadcastMessages.push(msg);
168
- onProcessEntityComponentChange && onProcessEntityComponentChange(msg.entityId, msg.type, component, value);
168
+ onProcessEntityComponentChange && onProcessEntityComponentChange(entityId, msg.type, component, value);
169
169
  }
170
170
  }
171
171
  else {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dcl/ecs",
3
3
  "description": "Decentraland ECS",
4
- "version": "7.3.40-7698451743.commit-c9c61fe",
4
+ "version": "7.3.40-7717066166.commit-ece036d",
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": "c9c61fe791438f55937546344bdd16b4f8f0cd6c"
36
+ "commit": "ece036db9e954a6f07bc175aa6f139d48680be87"
37
37
  }