@dcl/ecs 1.0.0-20220511175240.commit-459bc31 → 1.0.0-20220525093820.commit-c20b8cd

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 (98) hide show
  1. package/dist/components/definitions/AudioSource.proto +16 -0
  2. package/dist/components/definitions/AudioStream.proto +13 -0
  3. package/dist/components/definitions/ConeShape.proto +15 -0
  4. package/dist/components/definitions/CylinderShape.proto +15 -0
  5. package/dist/components/definitions/PlaneShape.proto +14 -0
  6. package/dist/components/definitions/SphereShape.proto +13 -0
  7. package/dist/components/generated/AudioSource.d.ts +5 -0
  8. package/dist/components/generated/AudioSource.d.ts.map +1 -0
  9. package/dist/components/generated/AudioSource.js +17 -0
  10. package/dist/components/generated/AudioSource.js.map +1 -0
  11. package/dist/components/generated/AudioStream.d.ts +5 -0
  12. package/dist/components/generated/AudioStream.d.ts.map +1 -0
  13. package/dist/components/generated/AudioStream.js +17 -0
  14. package/dist/components/generated/AudioStream.js.map +1 -0
  15. package/dist/components/generated/ConeShape.d.ts +5 -0
  16. package/dist/components/generated/ConeShape.d.ts.map +1 -0
  17. package/dist/components/generated/ConeShape.js +17 -0
  18. package/dist/components/generated/ConeShape.js.map +1 -0
  19. package/dist/components/generated/CylinderShape.d.ts +5 -0
  20. package/dist/components/generated/CylinderShape.d.ts.map +1 -0
  21. package/dist/components/generated/CylinderShape.js +17 -0
  22. package/dist/components/generated/CylinderShape.js.map +1 -0
  23. package/dist/components/generated/PlaneShape.d.ts +5 -0
  24. package/dist/components/generated/PlaneShape.d.ts.map +1 -0
  25. package/dist/components/generated/PlaneShape.js +17 -0
  26. package/dist/components/generated/PlaneShape.js.map +1 -0
  27. package/dist/components/generated/SphereShape.d.ts +5 -0
  28. package/dist/components/generated/SphereShape.d.ts.map +1 -0
  29. package/dist/components/generated/SphereShape.js +17 -0
  30. package/dist/components/generated/SphereShape.js.map +1 -0
  31. package/dist/components/generated/index.d.ts +8 -2
  32. package/dist/components/generated/index.d.ts.map +1 -1
  33. package/dist/components/generated/index.js +13 -1
  34. package/dist/components/generated/index.js.map +1 -1
  35. package/dist/components/generated/pb/AudioSource.d.ts +15 -0
  36. package/dist/components/generated/pb/AudioSource.d.ts.map +1 -0
  37. package/dist/components/generated/pb/AudioSource.js +95 -0
  38. package/dist/components/generated/pb/AudioSource.js.map +1 -0
  39. package/dist/components/generated/pb/AudioStream.d.ts +12 -0
  40. package/dist/components/generated/pb/AudioStream.d.ts.map +1 -0
  41. package/dist/components/generated/pb/AudioStream.js +70 -0
  42. package/dist/components/generated/pb/AudioStream.js.map +1 -0
  43. package/dist/components/generated/pb/ConeShape.d.ts +14 -0
  44. package/dist/components/generated/pb/ConeShape.d.ts.map +1 -0
  45. package/dist/components/generated/pb/ConeShape.js +88 -0
  46. package/dist/components/generated/pb/ConeShape.js.map +1 -0
  47. package/dist/components/generated/pb/CylinderShape.d.ts +14 -0
  48. package/dist/components/generated/pb/CylinderShape.d.ts.map +1 -0
  49. package/dist/components/generated/pb/CylinderShape.js +88 -0
  50. package/dist/components/generated/pb/CylinderShape.js.map +1 -0
  51. package/dist/components/generated/pb/PlaneShape.d.ts +13 -0
  52. package/dist/components/generated/pb/PlaneShape.d.ts.map +1 -0
  53. package/dist/components/generated/pb/PlaneShape.js +91 -0
  54. package/dist/components/generated/pb/PlaneShape.js.map +1 -0
  55. package/dist/components/generated/pb/SphereShape.d.ts +12 -0
  56. package/dist/components/generated/pb/SphereShape.d.ts.map +1 -0
  57. package/dist/components/generated/pb/SphereShape.js +70 -0
  58. package/dist/components/generated/pb/SphereShape.js.map +1 -0
  59. package/dist/components/index.d.ts +8 -2
  60. package/dist/components/index.d.ts.map +1 -1
  61. package/dist/components/index.js.map +1 -1
  62. package/dist/components/legacy/index.d.ts +8 -2
  63. package/dist/components/legacy/index.d.ts.map +1 -1
  64. package/dist/components/legacy/index.js.map +1 -1
  65. package/dist/ecs.api.json +2 -216
  66. package/dist/engine/index.d.ts +2 -20
  67. package/dist/engine/index.d.ts.map +1 -1
  68. package/dist/engine/index.js +2 -5
  69. package/dist/engine/index.js.map +1 -1
  70. package/dist/engine/types.d.ts +18 -0
  71. package/dist/engine/types.d.ts.map +1 -1
  72. package/dist/engine/utils.d.ts.map +1 -1
  73. package/dist/engine/utils.js.map +1 -1
  74. package/dist/serialization/ByteBuffer/index.d.ts +12 -4
  75. package/dist/serialization/ByteBuffer/index.d.ts.map +1 -1
  76. package/dist/serialization/ByteBuffer/index.js +20 -6
  77. package/dist/serialization/ByteBuffer/index.js.map +1 -1
  78. package/dist/serialization/crdt/componentOperation.d.ts +3 -3
  79. package/dist/serialization/crdt/componentOperation.d.ts.map +1 -1
  80. package/dist/serialization/crdt/componentOperation.js +4 -4
  81. package/dist/serialization/crdt/componentOperation.js.map +1 -1
  82. package/dist/systems/crdt/index.d.ts +2 -7
  83. package/dist/systems/crdt/index.d.ts.map +1 -1
  84. package/dist/systems/crdt/index.js +116 -82
  85. package/dist/systems/crdt/index.js.map +1 -1
  86. package/dist/systems/crdt/transport.d.ts +8 -1
  87. package/dist/systems/crdt/transport.d.ts.map +1 -1
  88. package/dist/systems/crdt/transport.js +22 -4
  89. package/dist/systems/crdt/transport.js.map +1 -1
  90. package/dist/systems/crdt/types.d.ts +11 -0
  91. package/dist/systems/crdt/types.d.ts.map +1 -0
  92. package/dist/systems/crdt/types.js +3 -0
  93. package/dist/systems/crdt/types.js.map +1 -0
  94. package/dist/systems/crdt/utils.d.ts +2 -4
  95. package/dist/systems/crdt/utils.d.ts.map +1 -1
  96. package/dist/systems/crdt/utils.js +10 -9
  97. package/dist/systems/crdt/utils.js.map +1 -1
  98. package/package.json +2 -2
@@ -11,111 +11,145 @@ const componentOperation_1 = require("../../serialization/crdt/componentOperatio
11
11
  const wireMessage_1 = __importDefault(require("../../serialization/wireMessage"));
12
12
  const transport_1 = require("./transport");
13
13
  const utils_1 = __importDefault(require("./utils"));
14
- /**
15
- * TODO:
16
- * What about when we remove the SyncComponent ? Should we notify all the clients? How ?
17
- * Where do we create the transport and process the received messages?
18
- */
19
14
  function crdtSceneSystem(engine) {
15
+ // CRDT Client
20
16
  const crdtClient = (0, crdt_1.crdtProtocol)();
21
- const messages = [];
17
+ // Messages that we received at transport.onMessage waiting to be processed
18
+ const receivedMessages = [];
19
+ // Messages already processed by the engine but that we need to broadcast to other transports.
20
+ const transportMessages = [];
21
+ // Map of entities already processed at least once
22
22
  const crdtEntities = new Map();
23
- const transport = (0, transport_1.createTransport)();
24
- transport.onmessage = parseChunkMessage;
25
- function parseChunkMessage(chunkMessage) {
26
- if (!chunkMessage.data?.length)
27
- return;
28
- const buffer = (0, ByteBuffer_1.createByteBuffer)({
29
- reading: { buffer: chunkMessage.data, currentOffset: 0 }
30
- });
31
- while (wireMessage_1.default.validate(buffer)) {
32
- const message = componentOperation_1.PutComponentOperation.read(buffer);
33
- const { entityId, componentId, data, timestamp } = message;
34
- messages.push({
35
- key: utils_1.default.getKey(entityId, componentId),
36
- data,
37
- timestamp
23
+ const transports = (0, transport_1.getTransports)();
24
+ transports.forEach((transport) => (transport.onmessage = parseChunkMessage(transport.type)));
25
+ /**
26
+ *
27
+ * @param transportType tranport id to identiy messages
28
+ * @returns a function to process received messages
29
+ */
30
+ function parseChunkMessage(transportType) {
31
+ /**
32
+ * Receives a chunk of binary messages and stores all the valid
33
+ * Component Operation Messages at messages queue
34
+ * @param chunkMessage A chunk of binary messages
35
+ */
36
+ return function parseChunkMessage(chunkMessage) {
37
+ if (!chunkMessage.data?.length)
38
+ return;
39
+ const buffer = (0, ByteBuffer_1.createByteBuffer)({
40
+ reading: { buffer: chunkMessage.data, currentOffset: 0 }
38
41
  });
39
- }
42
+ while (wireMessage_1.default.validate(buffer)) {
43
+ const offset = buffer.currentReadOffset();
44
+ const message = componentOperation_1.PutComponentOperation.read(buffer);
45
+ const { entity, componentId, data, timestamp } = message;
46
+ receivedMessages.push({
47
+ entity,
48
+ componentId,
49
+ data,
50
+ timestamp,
51
+ transportType,
52
+ messageBuffer: buffer
53
+ .buffer()
54
+ .subarray(offset, buffer.currentReadOffset())
55
+ });
56
+ }
57
+ };
40
58
  }
41
- function getMessages() {
42
- const messagesToProcess = Array.from(messages);
43
- messages.length = 0;
59
+ /**
60
+ * Return and clear the messaes queue
61
+ * @returns messages recieved by the transport to process on the next tick
62
+ */
63
+ function getMessages(value) {
64
+ const messagesToProcess = Array.from(value);
65
+ value.length = 0;
44
66
  return messagesToProcess;
45
67
  }
46
68
  /**
47
- * This messages will be processed on every tick.
69
+ * This fn will be called on every tick.
70
+ * Process all the messages queue received by the transport
48
71
  */
49
- function processMessages() {
50
- const buffer = (0, ByteBuffer_1.createByteBuffer)();
51
- const messagesToProcess = getMessages();
52
- for (const message of messagesToProcess) {
53
- const [entity, componentId] = utils_1.default.parseKey(message.key);
54
- const msg = crdtClient.processMessage(message);
55
- const component = engine.getComponent(componentId);
56
- // CRDT outdated message. Resend this message through the wire
57
- // TODO: perf transactor
58
- if (msg !== message) {
59
- componentOperation_1.PutComponentOperation.write(entity, msg.timestamp, component, buffer);
72
+ function receiveMessages() {
73
+ const messagesToProcess = getMessages(receivedMessages);
74
+ for (const transport of transports) {
75
+ const buffer = (0, ByteBuffer_1.createByteBuffer)();
76
+ for (const message of messagesToProcess) {
77
+ const { data, timestamp, componentId, entity } = message;
78
+ const crdtMessage = {
79
+ key: utils_1.default.getKey(entity, componentId),
80
+ data: data,
81
+ timestamp: timestamp
82
+ };
83
+ const component = engine.getComponent(componentId);
84
+ const currentMessage = crdtClient.processMessage(crdtMessage);
85
+ // CRDT outdated message. Resend this message through the wire
86
+ // TODO: perf transactor
87
+ if (crdtMessage !== currentMessage) {
88
+ // CRDT outdated message. Resend this message through the wire
89
+ componentOperation_1.PutComponentOperation.write(entity, currentMessage.timestamp, component, buffer);
90
+ }
91
+ else {
92
+ const opts = { reading: { buffer: message.data, currentOffset: 0 } };
93
+ const bb = (0, ByteBuffer_1.createByteBuffer)(opts);
94
+ // Update engine component
95
+ component.upsertFromBinary(message.entity, bb);
96
+ component.clearDirty();
97
+ // Add message to transport queue to be processed by others transports
98
+ transportMessages.push(message);
99
+ }
60
100
  }
61
- else {
62
- const bb = (0, ByteBuffer_1.createByteBuffer)({
63
- reading: {
64
- buffer: message.data,
65
- currentOffset: 0
66
- }
67
- });
68
- component.upsertFromBinary(entity, bb);
69
- component.clearDirty();
101
+ if (buffer.size()) {
102
+ transport.send(buffer.toBinary());
70
103
  }
71
104
  }
72
- if (buffer.size()) {
73
- transport.send(buffer.toBinary());
74
- }
75
105
  }
76
- function send(dirtyMap) {
106
+ /**
107
+ * Iterates the dirty map and generates crdt messages to be send
108
+ * @param dirtyMap a map of { entities: [componentId] }
109
+ */
110
+ function createMessages(dirtyMap) {
111
+ // CRDT Messages will be the merge between the recieved transport messages and the new crdt messages
112
+ const crdtMessages = getMessages(transportMessages);
77
113
  const buffer = (0, ByteBuffer_1.createByteBuffer)();
78
114
  for (const [entity, componentsId] of dirtyMap) {
79
- if (entity_utils_1.default.isStaticEntity(entity) && !crdtEntities.has(entity)) {
80
- crdtEntities.set(entity, true);
81
- continue;
82
- }
83
- crdtEntities.set(entity, true);
84
115
  for (const componentId of componentsId) {
85
116
  const component = engine.getComponent(componentId);
86
- const key = utils_1.default.getKey(entity, componentId);
87
- const event = crdtClient.createEvent(key, component.toBinary(entity).toBinary());
88
- componentOperation_1.PutComponentOperation.write(entity, event.timestamp, component, buffer);
117
+ const event = crdtClient.createEvent(utils_1.default.getKey(entity, componentId), component.toBinary(entity).toBinary());
118
+ const offset = buffer.currentWriteOffset();
119
+ // There is no need to create messages for the static entities the first time they are created
120
+ // They are part of the scene loading. Send only updates.
121
+ if (!entity_utils_1.default.isStaticEntity(entity) || crdtEntities.has(entity)) {
122
+ componentOperation_1.PutComponentOperation.write(entity, event.timestamp, component, buffer);
123
+ crdtMessages.push({
124
+ componentId,
125
+ entity,
126
+ timestamp: event.timestamp,
127
+ messageBuffer: buffer
128
+ .buffer()
129
+ .subarray(offset, buffer.currentWriteOffset())
130
+ });
131
+ }
89
132
  }
133
+ crdtEntities.set(entity, true);
90
134
  }
91
- if (buffer.size()) {
92
- transport.send(buffer.toBinary());
135
+ // Send messages to transports
136
+ const transportBuffer = (0, ByteBuffer_1.createByteBuffer)();
137
+ for (const transport of transports) {
138
+ transportBuffer.resetBuffer();
139
+ for (const message of crdtMessages) {
140
+ if (transport.filter(message)) {
141
+ transportBuffer.writeBuffer(message.messageBuffer, false);
142
+ }
143
+ }
144
+ if (transportBuffer.size()) {
145
+ transport.send(transportBuffer.toBinary());
146
+ }
93
147
  }
94
148
  }
95
149
  return {
96
- send,
97
- processMessages
150
+ createMessages,
151
+ receiveMessages
98
152
  };
99
153
  }
100
154
  exports.crdtSceneSystem = crdtSceneSystem;
101
- // const { Sync } = engine.baseComponents
102
- // for (const [entity] of engine.groupOf(Dirty)) {
103
- // const components = engine.getEntityComponents(entity)
104
- // for (const p of )
105
- // }
106
- // for (const [entity] of engine.mutableGroupOf(Sync)) {
107
- // for (const component of engine.getEntityComponents(entity)) {
108
- // // If its a new entity, we should send all the components.
109
- // // Otherwise, we send only the updates (dirty)
110
- // if (!crdtEntities.has(entity) || component.isDirty(entity)) {
111
- // const event = crdtClient.createEvent(
112
- // getKey(entity, component._id),
113
- // component.toBinary(entity)
114
- // )
115
- // void crdtClient.sendMessage(event)
116
- // return
117
- // }
118
- // }
119
- // crdtEntities.add(entity)
120
- // }
121
155
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/systems/crdt/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/systems/crdt/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,9 @@
1
- export declare function createTransport(_type?: 'ws'): WebSocket;
1
+ import { TransportMessage } from './types';
2
+ export declare type Transport = {
3
+ type: string;
4
+ send(message: Uint8Array): void;
5
+ onmessage?(message: MessageEvent<Uint8Array>): void;
6
+ filter(message: TransportMessage): boolean;
7
+ };
8
+ export declare function getTransports(): Transport[];
2
9
  //# sourceMappingURL=transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/systems/crdt/transport.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,CAAC,KAAK,CAAC,EAAE,IAAI,aAE3C"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../../src/systems/crdt/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C,oBAAY,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/B,SAAS,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI,CAAA;IACnD,MAAM,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAA;CAC3C,CAAA;AAuBD,wBAAgB,aAAa,gBAE5B"}
@@ -1,8 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createTransport = void 0;
4
- function createTransport(_type) {
5
- return new WebSocket('ws://localhost:8000');
3
+ exports.getTransports = void 0;
4
+ function networkTransport() {
5
+ // const rpc = new RpcTransport()
6
+ const rpc = {
7
+ send: () => { }
8
+ };
9
+ const type = 'network-transport';
10
+ return {
11
+ ...rpc,
12
+ type,
13
+ filter(message) {
14
+ // Echo message, ignore them
15
+ if (message.transportType === type) {
16
+ return false;
17
+ }
18
+ return !!message; // validComponents.includes(componentId)
19
+ }
20
+ };
6
21
  }
7
- exports.createTransport = createTransport;
22
+ function getTransports() {
23
+ return [networkTransport()];
24
+ }
25
+ exports.getTransports = getTransports;
8
26
  //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/systems/crdt/transport.ts"],"names":[],"mappings":";;;AAAA,SAAgB,eAAe,CAAC,KAAY;IAC1C,OAAO,IAAI,SAAS,CAAC,qBAAqB,CAAC,CAAA;AAC7C,CAAC;AAFD,0CAEC"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../src/systems/crdt/transport.ts"],"names":[],"mappings":";;;AASA,SAAS,gBAAgB;IACvB,iCAAiC;IACjC,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;KACf,CAAA;IAED,MAAM,IAAI,GAAG,mBAAmB,CAAA;IAChC,OAAO;QACL,GAAG,GAAG;QACN,IAAI;QACJ,MAAM,CAAC,OAAyB;YAC9B,4BAA4B;YAC5B,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE;gBAClC,OAAO,KAAK,CAAA;aACb;YAED,OAAO,CAAC,CAAC,OAAO,CAAA,CAAC,wCAAwC;QAC3D,CAAC;KACF,CAAA;AACH,CAAC;AAED,SAAgB,aAAa;IAC3B,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAA;AAC7B,CAAC;AAFD,sCAEC"}
@@ -0,0 +1,11 @@
1
+ import { Entity } from '../../engine/entity';
2
+ export declare type ReceiveMessage = {
3
+ entity: Entity;
4
+ componentId: number;
5
+ timestamp: number;
6
+ transportType?: string;
7
+ data: Uint8Array;
8
+ messageBuffer: Uint8Array;
9
+ };
10
+ export declare type TransportMessage = Omit<ReceiveMessage, 'data'>;
11
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/systems/crdt/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,oBAAY,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,UAAU,CAAA;IAChB,aAAa,EAAE,UAAU,CAAA;CAC1B,CAAA;AAED,oBAAY,gBAAgB,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/systems/crdt/types.ts"],"names":[],"mappings":""}
@@ -2,12 +2,10 @@ import { ComponentDefinition } from '../../engine/component';
2
2
  import { Entity } from '../../engine/entity';
3
3
  export declare namespace CrdtUtils {
4
4
  type ComponentID = ComponentDefinition['_id'];
5
- function parseKey(key: string): [Entity, ComponentID];
6
5
  function getKey(entity: Entity, componentId: ComponentID): string;
7
6
  enum SynchronizedEntityType {
8
- ALL = 0,
9
- NETWORKED = 1,
10
- RENDERER = 2
7
+ NETWORKED = 0,
8
+ RENDERER = 1
11
9
  }
12
10
  }
13
11
  export default CrdtUtils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/systems/crdt/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,yBAAiB,SAAS,CAAC;IACzB,KAAY,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAEpD,SAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAM3D;IAED,SAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAEvE;IAED,KAAY,sBAAsB;QAEhC,GAAG,IAAA;QAEH,SAAS,IAAA;QAET,QAAQ,IAAA;KACT;CACF;AACD,eAAe,SAAS,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/systems/crdt/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,yBAAiB,SAAS,CAAC;IACzB,KAAY,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAA;IAWpD,SAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,GAAG,MAAM,CAEvE;IAED,KAAY,sBAAsB;QAEhC,SAAS,IAAA;QAET,QAAQ,IAAA;KACT;CACF;AAED,eAAe,SAAS,CAAA"}
@@ -3,23 +3,24 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CrdtUtils = void 0;
4
4
  var CrdtUtils;
5
5
  (function (CrdtUtils) {
6
- function parseKey(key) {
7
- const [entity, componentId] = key.split('.').map(Number);
8
- return [entity, componentId];
9
- }
10
- CrdtUtils.parseKey = parseKey;
6
+ // TODO: use this again
7
+ // export function parseKey(key: string): [Entity, ComponentID] {
8
+ // const [entity, componentId] = key.split('.').map(Number) as [
9
+ // Entity,
10
+ // ComponentID
11
+ // ]
12
+ // return [entity, componentId]
13
+ // }
11
14
  function getKey(entity, componentId) {
12
15
  return `${entity}.${componentId}`;
13
16
  }
14
17
  CrdtUtils.getKey = getKey;
15
18
  let SynchronizedEntityType;
16
19
  (function (SynchronizedEntityType) {
17
- // synchronizes all entities without filter. used for renderers
18
- SynchronizedEntityType[SynchronizedEntityType["ALL"] = 0] = "ALL";
19
20
  // synchronizes entities with the NetworkSynchronized component only, used for networked games
20
- SynchronizedEntityType[SynchronizedEntityType["NETWORKED"] = 1] = "NETWORKED";
21
+ SynchronizedEntityType[SynchronizedEntityType["NETWORKED"] = 0] = "NETWORKED";
21
22
  // synchronizes entities needed by the renderer
22
- SynchronizedEntityType[SynchronizedEntityType["RENDERER"] = 2] = "RENDERER";
23
+ SynchronizedEntityType[SynchronizedEntityType["RENDERER"] = 1] = "RENDERER";
23
24
  })(SynchronizedEntityType = CrdtUtils.SynchronizedEntityType || (CrdtUtils.SynchronizedEntityType = {}));
24
25
  })(CrdtUtils = exports.CrdtUtils || (exports.CrdtUtils = {}));
25
26
  exports.default = CrdtUtils;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/systems/crdt/utils.ts"],"names":[],"mappings":";;;AAIA,IAAiB,SAAS,CAuBzB;AAvBD,WAAiB,SAAS;IAGxB,SAAgB,QAAQ,CAAC,GAAW;QAClC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAGtD,CAAA;QACD,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC9B,CAAC;IANe,kBAAQ,WAMvB,CAAA;IAED,SAAgB,MAAM,CAAC,MAAc,EAAE,WAAwB;QAC7D,OAAO,GAAG,MAAM,IAAI,WAAW,EAAE,CAAA;IACnC,CAAC;IAFe,gBAAM,SAErB,CAAA;IAED,IAAY,sBAOX;IAPD,WAAY,sBAAsB;QAChC,+DAA+D;QAC/D,iEAAG,CAAA;QACH,8FAA8F;QAC9F,6EAAS,CAAA;QACT,+CAA+C;QAC/C,2EAAQ,CAAA;IACV,CAAC,EAPW,sBAAsB,GAAtB,gCAAsB,KAAtB,gCAAsB,QAOjC;AACH,CAAC,EAvBgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAuBzB;AACD,kBAAe,SAAS,CAAA;AAExB,mEAAmE;AACnE,8CAA8C;AAC9C,iCAAiC;AACjC,4DAA4D;AAC5D,2FAA2F;AAC3F,2CAA2C;AAE3C,oCAAoC;AACpC,gDAAgD;AAChD,+HAA+H;AAC/H,uBAAuB;AACvB,MAAM;AACN,KAAK;AAEL,sDAAsD;AACtD,WAAW;AACX,IAAI;AAEJ,8BAA8B;AAC9B,2CAA2C;AAE3C,2CAA2C;AAC3C,gDAAgD;AAChD,MAAM;AAEN,sBAAsB;AACtB,0BAA0B;AAC1B,MAAM;AAEN,4BAA4B;AAC5B,IAAI;AAEJ,2BAA2B;AAC3B,4CAA4C;AAC5C,IAAI"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/systems/crdt/utils.ts"],"names":[],"mappings":";;;AAGA,IAAiB,SAAS,CAsBzB;AAtBD,WAAiB,SAAS;IAGxB,uBAAuB;IACvB,iEAAiE;IACjE,kEAAkE;IAClE,cAAc;IACd,kBAAkB;IAClB,MAAM;IACN,iCAAiC;IACjC,IAAI;IAEJ,SAAgB,MAAM,CAAC,MAAc,EAAE,WAAwB;QAC7D,OAAO,GAAG,MAAM,IAAI,WAAW,EAAE,CAAA;IACnC,CAAC;IAFe,gBAAM,SAErB,CAAA;IAED,IAAY,sBAKX;IALD,WAAY,sBAAsB;QAChC,8FAA8F;QAC9F,6EAAS,CAAA;QACT,+CAA+C;QAC/C,2EAAQ,CAAA;IACV,CAAC,EALW,sBAAsB,GAAtB,gCAAsB,KAAtB,gCAAsB,QAKjC;AACH,CAAC,EAtBgB,SAAS,GAAT,iBAAS,KAAT,iBAAS,QAsBzB;AAED,kBAAe,SAAS,CAAA;AAExB,mEAAmE;AACnE,8CAA8C;AAC9C,iCAAiC;AACjC,4DAA4D;AAC5D,2FAA2F;AAC3F,2CAA2C;AAE3C,oCAAoC;AACpC,gDAAgD;AAChD,+HAA+H;AAC/H,uBAAuB;AACvB,MAAM;AACN,KAAK;AAEL,sDAAsD;AACtD,WAAW;AACX,IAAI;AAEJ,8BAA8B;AAC9B,2CAA2C;AAE3C,2CAA2C;AAC3C,gDAAgD;AAChD,MAAM;AAEN,sBAAsB;AACtB,0BAA0B;AAC1B,MAAM;AAEN,4BAA4B;AAC5B,IAAI;AAEJ,2BAA2B;AAC3B,4CAA4C;AAC5C,IAAI"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dcl/ecs",
3
- "version": "1.0.0-20220511175240.commit-459bc31",
3
+ "version": "1.0.0-20220525093820.commit-c20b8cd",
4
4
  "description": "Decentraland ECS",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -41,5 +41,5 @@
41
41
  "files": [
42
42
  "dist"
43
43
  ],
44
- "commit": "459bc313d065cf48708becb60d5858d561e9b81d"
44
+ "commit": "c20b8cd2582224d6bc67d3b7ca86f3c00e2e9952"
45
45
  }