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