@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.
- package/dist/components/generated/global.gen.d.ts +8 -0
- package/dist/components/generated/global.gen.js +4 -0
- package/dist/components/generated/index.gen.d.ts +16 -0
- package/dist/components/generated/index.gen.js +22 -0
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.d.ts +2 -13
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.js +14 -43
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +1 -1
- package/dist/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +3 -3
- package/dist/engine/component.d.ts +6 -0
- package/dist/engine/entity.d.ts +8 -4
- package/dist/engine/entity.js +13 -48
- package/dist/engine/grow-only-value-set-component-definition.js +9 -1
- package/dist/engine/index.js +28 -9
- package/dist/engine/lww-element-set-component-definition.js +8 -1
- package/dist/engine/types.d.ts +2 -1
- package/dist/systems/crdt/index.js +1 -1
- package/dist-cjs/components/generated/global.gen.d.ts +8 -0
- package/dist-cjs/components/generated/global.gen.js +5 -1
- package/dist-cjs/components/generated/index.gen.d.ts +16 -0
- package/dist-cjs/components/generated/index.gen.js +27 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.d.ts +2 -13
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_emote_command.gen.js +15 -44
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.d.ts +1 -1
- package/dist-cjs/components/generated/pb/decentraland/sdk/components/avatar_equipped_data.gen.js +3 -3
- package/dist-cjs/engine/component.d.ts +6 -0
- package/dist-cjs/engine/entity.d.ts +8 -4
- package/dist-cjs/engine/entity.js +15 -50
- package/dist-cjs/engine/grow-only-value-set-component-definition.js +9 -1
- package/dist-cjs/engine/index.js +27 -8
- package/dist-cjs/engine/lww-element-set-component-definition.js +8 -1
- package/dist-cjs/engine/types.d.ts +2 -1
- package/dist-cjs/systems/crdt/index.js +1 -1
- 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;
|
package/dist-cjs/engine/index.js
CHANGED
|
@@ -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.
|
|
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.
|
|
61
|
-
//
|
|
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
|
|
163
|
-
for (const [entity, name] of getEntitiesWith(
|
|
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
|
|
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(
|
|
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-
|
|
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": "
|
|
36
|
+
"commit": "ece036db9e954a6f07bc175aa6f139d48680be87"
|
|
37
37
|
}
|