2019-09-30 01:36:02 -05:00
|
|
|
import {BundlePacket, SynchronizedUpdatePacket} from '@avocado/net';
|
|
|
|
|
2019-09-30 19:23:11 -05:00
|
|
|
import {idFromTrait, lookupTrait, traitFromId} from '../trait/registry';
|
|
|
|
|
2019-09-30 01:36:02 -05:00
|
|
|
export class EntityUpdateTraitPacket extends SynchronizedUpdatePacket {
|
|
|
|
|
|
|
|
static pack(packet) {
|
|
|
|
const data = packet.data[1];
|
|
|
|
for (let i = 0; i < data.traits.length; i++) {
|
2019-09-30 19:23:11 -05:00
|
|
|
const Trait = lookupTrait(data.traits[i].type);
|
|
|
|
data.traits[i].type = idFromTrait(Trait);
|
2019-09-30 01:36:02 -05:00
|
|
|
data.traits[i].packets = BundlePacket.packPacket(
|
|
|
|
new BundlePacket(data.traits[i].packets)
|
|
|
|
);
|
|
|
|
}
|
|
|
|
return super.pack(packet);
|
|
|
|
}
|
|
|
|
|
|
|
|
static get synchronizationSchema() {
|
|
|
|
return {
|
|
|
|
traits: [
|
|
|
|
{
|
2019-09-30 19:23:11 -05:00
|
|
|
type: 'uint8',
|
2019-09-30 01:36:02 -05:00
|
|
|
packets: 'buffer',
|
|
|
|
},
|
|
|
|
],
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
static unpack(packet) {
|
|
|
|
const data = super.unpack(packet);
|
|
|
|
for (let i = 0; i < data.traits.length; i++) {
|
2019-09-30 19:23:11 -05:00
|
|
|
const Trait = traitFromId(data.traits[i].type);
|
|
|
|
data.traits[i].type = Trait.type();
|
2019-09-30 01:36:02 -05:00
|
|
|
data.traits[i].packets = BundlePacket.unpack(data.traits[i].packets);
|
|
|
|
}
|
|
|
|
return data;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|