import {compose} from '@avocado/core'; import {Vector} from '@avocado/math'; import {EventEmitter, Property} from '@avocado/mixins'; const decorate = compose( EventEmitter, Property('parent'), Property('rotation', { default: 0, track: true, }), Property('scale', { default: 1, track: true, }), Vector.Mixin('origin', 'originX', 'originY', { default: [0, 0], track: true, }), Vector.Mixin('position', 'x', 'y', { default: [0, 0], track: true, }), ) class ShapeBase { get aabb() { return [0, 0, 0, 0]; } fromJSON(json) { const keys = [ 'origin', 'position', 'rotation', 'scale', ] for (const key of keys) { if (json[key]) { this[key] = json[key]; } } return this; } } export class Shape extends decorate(ShapeBase) { constructor() { super(); this.on([ 'originChanged', 'rotationChanged', 'scaleChanged', ], () => { console.log('change'); this.emit('aabbChanged'); }); } }