diff --git a/server/entities/enemy.ts b/server/entities/enemy.ts index 494826d..a1decc7 100644 --- a/server/entities/enemy.ts +++ b/server/entities/enemy.ts @@ -17,20 +17,26 @@ export class CompEnemy { this.life = 10; } - get_target_pos(engine: Engine) { - if (this.target === null) return null; - const result = engine.one(Query.with(CompId).filter(([c]) => c.id === this.target).with(CompPos)); - if (result === null) return null; - const [_, pos] = result; - return pos.pos; - } - find_target_from(engine: Engine, pos: Vec2, range: number) { const radius = v2(range, range); const found = engine.one(Query.with(CompPlayer).with(CompId).and(query_in_rect(pos.sub(radius), pos.add(radius)))); - if (found === null) return this.target = null; + if (found === null) { + this.target = null; + return; + } const [_, id, __] = found; - return this.target = id.id; + this.target = id.id; + } + + get_target_pos(engine: Engine) { + if (this.target === null) return null; + const result = engine.one(Query.with(CompId).filter(([c]) => c.id === this.target).with(CompPos)); + if (result === null) { + this.target = null; + return null; + } + const [_, pos] = result; + return pos.pos; } } @@ -47,14 +53,15 @@ export function sys_spawn_enemy(pos: Vec2) { } export function sys_update_enemy() { + const trigger_range = 5; + const forget_range = 10; return (engine: Engine) => { for (const [enemy, enemy_pos] of engine.all(Query.with(CompEnemy).with(CompPos))) { - if (enemy.target === null) enemy.find_target_from(engine, enemy_pos.pos, 3); - if (enemy.target === null) continue; + if (enemy.target === null) enemy.find_target_from(engine, enemy_pos.pos, trigger_range); const pos = enemy.get_target_pos(engine); - assert(pos !== null); + if (pos === null) continue; const direction = pos.sub(enemy_pos.pos); - if (direction.len() <= 5) { + if (direction.len() <= forget_range) { const displacement = direction.normalize(); const moved = enemy_pos.move_collide(engine, displacement); if (!moved) {