fix: net emission

This commit is contained in:
cha0s 2021-02-17 11:28:09 -06:00
parent d3152b8dfb
commit 661f6a1d00
3 changed files with 14 additions and 25 deletions

View File

@ -29,7 +29,7 @@ export default (latus) => class Entity extends decorate(BaseEntity) {
#markedAsDirty = true;
#originalJson = {};
#originalJson;
#tickingPromisesTickers = [];
@ -255,25 +255,6 @@ export default (latus) => class Entity extends decorate(BaseEntity) {
this.#markedAsDirty = true;
}
mergeDiff(json) {
if (!this.uri || !this.#originalJson || 0 === Object.keys(this.#originalJson).length) {
return json;
}
const Traits = latus.get('%traits');
const traits = Object.fromEntries(
Object.entries(this.#originalJson.traits)
.map(([type, json]) => Traits[type] && [
type,
{
params: Traits[type].defaultParamsWith(json.params),
state: Traits[type].defaultStateWith(json.state),
},
])
.filter((e) => !!e),
);
return mergeDiff({traits}, json);
}
packets(informed) {
const packets = [];
const updates = [];
@ -396,18 +377,23 @@ export default (latus) => class Entity extends decorate(BaseEntity) {
}
toNetwork(informed) {
const pristine = {traits: {}};
const json = {
traits: {},
};
const traits = Object.entries(this.#traits);
for (let i = 0; i < traits.length; i++) {
const [type, trait] = traits[i];
pristine.traits[type] = trait.constructor.withDefaults(
this.#originalJson ? this.#originalJson.traits[type] : {},
);
json.traits[type] = trait.toNetwork(informed);
}
const merged = mergeDiff(pristine, json) || {};
return {
instanceUuid: this.instanceUuid,
...(this.uri ? {extends: this.uri} : {}),
...this.mergeDiff(json),
...merged,
};
}
@ -423,7 +409,7 @@ export default (latus) => class Entity extends decorate(BaseEntity) {
return Object.keys(this.#traits);
}
static withDefaults(json) {
static withDefaults(json = {}) {
const Traits = latus.get('%traits');
return {
...json,

View File

@ -327,7 +327,7 @@ export default (latus) => class Emitter extends decorate(Trait) {
}
}
static withDefaults(json) {
static withDefaults(json = {}) {
const {Entity} = latus.get('%resources');
return {
params: {

View File

@ -146,10 +146,13 @@ export default class Trait extends decorate(JsonResource) {
}
toJSON() {
return this.constructor.withoutDefaults(this);
return {
params: this.params,
state: this.state,
};
}
static withDefaults(json) {
static withDefaults(json = {}) {
return {
params: this.defaultParamsWith(json.params || {}),
state: this.defaultStateWith(json.state || {}),