avocado-old/packages/physics/shape.js
2019-03-27 01:47:01 -05:00

63 lines
1.0 KiB
JavaScript

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',
], () => {
this.emit('aabbChanged');
});
}
}