#include "ai.h" #include #include #include #include "TeamManager.h" namespace kurator { namespace sim { void pick_random_targets(State& ctx, TeamManager& manager) { auto view = ctx.registry.view(); for (auto&& [entity, team, ai] : view.each()) { if (!ctx.registry.valid(ai.target)) ai.target = manager.random(team.id); } } void keep_at_range(State& ctx) { auto view = ctx.registry.view(); for (auto&& [entity, self, ai] : view.each()) { if (!ctx.registry.valid(ai.target)) continue; const auto target = ctx.registry.get(ai.target); const auto offset = target.position - self.position; ai.destination = target.position - offset.normalized().scale(ai.keep_at_range); } } void shoot_at_targets(State& ctx) { auto view = ctx.registry.view(); for (auto&& [entity, turret] : view.each()) { if (!ctx.registry.all_of(turret.owner)) continue; const auto& [state, transform] = ctx.registry.get(turret.owner); if (!ctx.registry.valid(state.target)) continue; const auto& target = ctx.registry.get(state.target); const auto distance = transform.position.distance(target.position); if (distance <= turret.type.effective_range()) turret.shoot_at(ctx, state.target, distance); // passing distance here is wrong } } } // namespace sim } // namespace kurator