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