diff options
Diffstat (limited to 'battles/src/BaseBattle.cpp')
-rw-r--r-- | battles/src/BaseBattle.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/battles/src/BaseBattle.cpp b/battles/src/BaseBattle.cpp index 8527a56..92ab351 100644 --- a/battles/src/BaseBattle.cpp +++ b/battles/src/BaseBattle.cpp @@ -30,6 +30,7 @@ BaseBattle::BaseBattle(const Scenario& scenario) : _registry.emplace<Transform>(entity, spawner.get(ship.team)); _registry.emplace<FloatingMovement>(entity, 0.4); _registry.emplace<AIState>(entity, Point{0.0, 0.0}); + manager.add(ship.team, entity); // registry supports on construction events } } @@ -44,16 +45,22 @@ BaseBattle::registry() void BaseBattle::update(const float dt) { - auto view = _registry.view<Transform, AIState, FloatingMovement>(); - for (auto&& [entity, transform, state, movement] : view.each()) { + auto view = _registry.view<Team, Transform, AIState, FloatingMovement>(); + for (auto&& [entity, team, transform, state, movement] : view.each()) { + if (!_registry.valid(state.target)) + state.target = manager.random((team.id + 1) % 2); + const auto target = _registry.get<Transform>(state.target); const double speed = movement.speed * dt; - const Point diff = (state.destination - transform.position); - if (diff.magnitude() > speed) { - const Point eff = diff.normalized().scale(speed); + const Point diff = target.position - transform.position; + const Point dest = target.position - diff.normalized(); + const Point move = dest - transform.position; + if (move.magnitude() > speed) { + const Point eff = move.normalized().scale(speed); transform.position.x += eff.x; transform.position.y += eff.y; } } + manager.clear(_registry); // registry supports on destructions events } |