39 lines
883 B
JavaScript
39 lines
883 B
JavaScript
import {RESOLUTION} from '@/constants.js'
|
|
import {System} from '@/ecs/index.js';
|
|
|
|
export default class FollowCamera extends System {
|
|
|
|
static queries() {
|
|
return {
|
|
default: ['Camera', 'Position'],
|
|
};
|
|
}
|
|
|
|
reindex(entities) {
|
|
super.reindex(entities);
|
|
for (const id of entities) {
|
|
this.updateCamera(this.ecs.get(parseInt(id)));
|
|
}
|
|
}
|
|
|
|
tick() {
|
|
const {diff} = this.ecs;
|
|
for (const id in diff) {
|
|
if (diff[id].Position) {
|
|
this.updateCamera(this.ecs.get(parseInt(id)));
|
|
}
|
|
}
|
|
}
|
|
|
|
updateCamera(entity) {
|
|
const {Camera, Position} = entity;
|
|
if (Camera && Position) {
|
|
const {AreaSize: {x, y}} = this.ecs.get(1);
|
|
const [hx, hy] = [RESOLUTION[0] / 2, RESOLUTION[1] / 2];
|
|
Camera.x = Math.max(hx, Math.min(Position.x, x - hx));
|
|
Camera.y = Math.max(hy, Math.min(Position.y, y - hy));
|
|
}
|
|
}
|
|
|
|
}
|