fix: visible packet

This commit is contained in:
cha0s 2019-09-30 21:05:00 -05:00
parent 0305d24c73
commit a2b5583d44
3 changed files with 34 additions and 22 deletions

View File

@ -0,0 +1,27 @@
import {Packet} from '@avocado/net';
export class TraitUpdateVisiblePacket extends Packet {
static pack(packet) {
const data = packet.data[1];
data.opacity = Math.floor(data.opacity * 255);
return super.pack(packet);
}
static get schema() {
return {
...super.schema,
data: {
isVisible: 'bool',
opacity: 'uint8',
},
};
}
static unpack(packet) {
const data = super.unpack(packet);
data.opacity = data.opacity / 255;
return data;
}
}

View File

@ -1,12 +0,0 @@
import {Packet} from '@avocado/net';
export class TraitVisiblePacket extends Packet {
static get schema() {
const schema = super.schema;
schema.data.isVisible = 'bool';
schema.data.opacity = 'uint8';
return schema;
}
}

View File

@ -6,7 +6,9 @@ import {Rectangle, Vector} from '@avocado/math';
import {Container} from '../container'; import {Container} from '../container';
import {hasGraphics} from '../has-graphics'; import {hasGraphics} from '../has-graphics';
import {TraitVisiblePacket} from '../packets/trait-visible.packet'; import {
TraitUpdateVisiblePacket,
} from '../packets/trait-update-visible.packet';
const AUTO_ZINDEX = 1 << 16; const AUTO_ZINDEX = 1 << 16;
@ -72,7 +74,7 @@ export class Visible extends decorate(Trait) {
} }
acceptPacket(packet) { acceptPacket(packet) {
if (packet instanceof TraitVisiblePacket) { if (packet instanceof TraitUpdatedVisiblePacket) {
this.entity.isVisible = packet.data.isVisible; this.entity.isVisible = packet.data.isVisible;
this.entity.opacity = packet.data.opacity / 255; this.entity.opacity = packet.data.opacity / 255;
} }
@ -92,15 +94,10 @@ export class Visible extends decorate(Trait) {
} }
packetsForUpdate() { packetsForUpdate() {
const packets = []; const {isVisible, opacity} = this.stateDifferences();
if (this.isDirty) { if (isVisible || opacity) {
packets.push(new TraitVisiblePacket({ return new TraitUpdateVisiblePacket(this.state);
isVisible: this.entity.isVisible,
opacity: Math.floor(this.entity.opacity * 255),
}, this.entity));
this.makeClean();
} }
return packets;
} }
get rawVisibleScale() { get rawVisibleScale() {