perf: faster remembered entities
This commit is contained in:
parent
9e7666de53
commit
31f2883292
|
@ -25,7 +25,8 @@ export class Informed extends decorate(Trait) {
|
|||
constructor(entity, params, state) {
|
||||
super(entity, params, state);
|
||||
this._packer = new Packer();
|
||||
this._rememberedEntities = {};
|
||||
this._rememberedEntities = [];
|
||||
this._rememberedUuids = [];
|
||||
this._socket = undefined;
|
||||
this._state = I.Map();
|
||||
}
|
||||
|
@ -35,7 +36,8 @@ export class Informed extends decorate(Trait) {
|
|||
delete this._socket.entity;
|
||||
delete this._socket;
|
||||
}
|
||||
this._rememberedEntities = {};
|
||||
this._rememberedEntities = [];
|
||||
this._rememberedUuids = [];
|
||||
this._state = this._state.clear();
|
||||
}
|
||||
|
||||
|
@ -103,16 +105,17 @@ export class Informed extends decorate(Trait) {
|
|||
steps = steps.withMutations((steps) => {
|
||||
const iterator = adds.values();
|
||||
for (const add of iterator) {
|
||||
// Remember the entity.
|
||||
// Entity we remember?.
|
||||
const parts = add.get('parts');
|
||||
const layerId = parts[3];
|
||||
const uuid = parts[5];
|
||||
if (!(uuid in this._rememberedEntities)) {
|
||||
const index = this._rememberedUuids.indexOf(uuid);
|
||||
if (-1 === index) {
|
||||
continue;
|
||||
}
|
||||
const rememberedEntity = this._rememberedEntities[uuid].entity;
|
||||
const rememberedEntity = this._rememberedEntities[index].entity;
|
||||
// Reset remembrance timeout.
|
||||
this._rememberedEntities[uuid].rememberFor = 60;
|
||||
this._rememberedEntities[index].rememberFor = 60;
|
||||
// Take a diff from what the client remembers to now.
|
||||
const currentState = state.getIn(
|
||||
['room', 'layers', layerId, 'entityList', uuid]
|
||||
|
@ -142,13 +145,16 @@ export class Informed extends decorate(Trait) {
|
|||
}
|
||||
const parts = step.get('parts');
|
||||
const uuid = parts[5];
|
||||
return !(uuid in this._rememberedEntities);
|
||||
const index = this._rememberedUuids.indexOf(uuid);
|
||||
return -1 === index;
|
||||
});
|
||||
// Forget all remembered entities.
|
||||
adds.forEach((step) => {
|
||||
const parts = step.get('parts');
|
||||
const uuid = parts[5];
|
||||
delete this._rememberedEntities[uuid];
|
||||
const index = this._rememberedUuids.indexOf(uuid);
|
||||
this._rememberedEntities.splice(index, 1);
|
||||
this._rememberedUuids.splice(index, 1);
|
||||
});
|
||||
return steps;
|
||||
}
|
||||
|
@ -172,11 +178,12 @@ export class Informed extends decorate(Trait) {
|
|||
if (!remembered) {
|
||||
return;
|
||||
}
|
||||
this._rememberedEntities[uuid] = {
|
||||
this._rememberedUuids.push(uuid);
|
||||
this._rememberedEntities.push({
|
||||
entity: remembered,
|
||||
// Remember entities for one minute.
|
||||
rememeberFor: 60,
|
||||
};
|
||||
});
|
||||
// Add overrides.
|
||||
const overrides = this.entityOverrides(
|
||||
removal.get('path'),
|
||||
|
@ -194,7 +201,8 @@ export class Informed extends decorate(Trait) {
|
|||
}
|
||||
const parts = step.get('parts');
|
||||
const uuid = parts[5];
|
||||
return !(uuid in this._rememberedEntities);
|
||||
const index = this._rememberedUuids.indexOf(uuid);
|
||||
return -1 === index;
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -269,13 +277,19 @@ export class Informed extends decorate(Trait) {
|
|||
}
|
||||
|
||||
tick(elapsed) {
|
||||
const rememberedEntities = this._rememberedEntities;
|
||||
for (const uuid in rememberedEntities) {
|
||||
const rememberFor = rememberedEntities[uuid].rememberFor -= elapsed;
|
||||
if (rememberFor <= 0) {
|
||||
delete rememberedEntities[uuid];
|
||||
const removeUuids = [];
|
||||
for (let i = 0; i < this._rememberedEntities.length; i++) {
|
||||
this._rememberedEntities[i].rememberFor -= elapsed;
|
||||
if (this._rememberedEntities[i].rememberFor <= 0) {
|
||||
removeUuids.push(this._rememberedUuids[i]);
|
||||
}
|
||||
}
|
||||
for (let i = 0; i < removeUuids.length; i++) {
|
||||
const uuid = removeUuids[i];
|
||||
const index = this._rememberedUuids.indexOf(uuid);
|
||||
this._rememberedEntities.splice(index, 1);
|
||||
this._rememberedUuids.splice(index, 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user