diff --git a/packages/graphics/packets/trait-visible.packet.js b/packages/graphics/packets/trait-visible.packet.js new file mode 100644 index 0000000..3ee25b0 --- /dev/null +++ b/packages/graphics/packets/trait-visible.packet.js @@ -0,0 +1,12 @@ +import {EntityPacket} from '@avocado/entity'; + +export class TraitVisiblePacket extends EntityPacket { + + static get schema() { + const schema = super.schema; + schema.data.isVisible = 'bool'; + schema.data.opacity = 'uint8'; + return schema; + } + +} diff --git a/packages/graphics/traits/visible.trait.js b/packages/graphics/traits/visible.trait.js index 8f55fa0..c1b766c 100644 --- a/packages/graphics/traits/visible.trait.js +++ b/packages/graphics/traits/visible.trait.js @@ -6,6 +6,7 @@ import {Rectangle, Vector} from '@avocado/math'; import {Container} from '../container'; import {hasGraphics} from '../has-graphics'; +import {TraitVisiblePacket} from '../packets/trait-visible.packet'; const AUTO_ZINDEX = 1 << 16; @@ -70,6 +71,13 @@ export class Visible extends decorate(Trait) { } } + acceptPacket(packet) { + if (packet instanceof TraitVisiblePacket) { + this.entity.isVisible = packet.data.isVisible; + this.entity.opacity = packet.data.opacity / 255; + } + } + get container() { return this._container; } @@ -83,6 +91,18 @@ export class Visible extends decorate(Trait) { } } + packetsForUpdate() { + const packets = []; + if (this.isDirty) { + packets.push(new TraitVisiblePacket({ + isVisible: this.entity.isVisible, + opacity: Math.floor(this.entity.opacity * 255), + }, this.entity)); + this.makeClean(); + } + return packets; + } + get rawVisibleScale() { return this._visibleScale; }