silphius/app/ecs-systems/calculate-aabbs.js
2024-07-02 12:00:12 -05:00

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));
}
}
}
}