fix: net emission
This commit is contained in:
parent
d3152b8dfb
commit
661f6a1d00
|
@ -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,
|
||||
|
|
|
@ -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: {
|
||||
|
|
|
@ -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 || {}),
|
||||
|
|
Loading…
Reference in New Issue
Block a user