diff options
author | Aki <please@ignore.pl> | 2022-11-13 00:20:42 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2022-11-13 00:20:42 +0100 |
commit | 1b39b8aaf6be5be56530979044fb893a5b51b489 (patch) | |
tree | 6c9499db7a07be5dbbfa69d3641c6a489ff13f8f /battles/src/BaseBattle.cpp | |
parent | c6d17ef545978bec555c8af8ef5eaef82c44e5f1 (diff) | |
download | kurator-1b39b8aaf6be5be56530979044fb893a5b51b489.zip kurator-1b39b8aaf6be5be56530979044fb893a5b51b489.tar.gz kurator-1b39b8aaf6be5be56530979044fb893a5b51b489.tar.bz2 |
Implemented dumb keep-at-range behaviour
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 } |