36 lines
1.0 KiB
JavaScript
36 lines
1.0 KiB
JavaScript
import {System} from '@/ecs/index.js';
|
|
|
|
export default class CalculateAabbs extends System {
|
|
|
|
static get priority() {
|
|
return {
|
|
after: 'IntegratePhysics',
|
|
};
|
|
}
|
|
|
|
tick() {
|
|
for (const entity of this.ecs.changed(['Position'])) {
|
|
const {Position: {x, y}, Sprite, VisibleAabb} = entity;
|
|
if (VisibleAabb) {
|
|
let size = undefined;
|
|
if (Sprite) {
|
|
const frame = Sprite.animation
|
|
? Sprite.$$sourceJson.animations[Sprite.animation][Sprite.frame]
|
|
: '';
|
|
size = Sprite.$$sourceJson.frames[frame].sourceSize;
|
|
}
|
|
/* v8 ignore next 3 */
|
|
if (!size) {
|
|
throw new Error(`no size for aabb for entity ${entity.id}(${JSON.stringify(entity.toJSON(), null, 2)})`);
|
|
}
|
|
VisibleAabb.x0 = x - ((size.w ) * (Sprite.anchor.x));
|
|
VisibleAabb.x1 = x + ((size.w ) * (1 - Sprite.anchor.x));
|
|
VisibleAabb.y0 = y - ((size.h ) * (Sprite.anchor.y));
|
|
VisibleAabb.y1 = y + ((size.h ) * (1 - Sprite.anchor.y));
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|