summaryrefslogtreecommitdiff
path: root/battles/src/BaseBattle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'battles/src/BaseBattle.cpp')
-rw-r--r--battles/src/BaseBattle.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/battles/src/BaseBattle.cpp b/battles/src/BaseBattle.cpp
index a9ac45c..8527a56 100644
--- a/battles/src/BaseBattle.cpp
+++ b/battles/src/BaseBattle.cpp
@@ -28,6 +28,8 @@ BaseBattle::BaseBattle(const Scenario& scenario) :
_registry.emplace<universe::ShipType>(entity, ship.type);
_registry.emplace<Team>(entity, ship.team);
_registry.emplace<Transform>(entity, spawner.get(ship.team));
+ _registry.emplace<FloatingMovement>(entity, 0.4);
+ _registry.emplace<AIState>(entity, Point{0.0, 0.0});
}
}
@@ -42,10 +44,15 @@ BaseBattle::registry()
void
BaseBattle::update(const float dt)
{
- auto view = _registry.view<Transform>();
- for (auto&& [entity, transform] : view.each()) {
- transform.position.x += 0.1 * dt * std::cos(transform.angle);
- transform.position.y += 0.1 * dt * std::sin(transform.angle);
+ auto view = _registry.view<Transform, AIState, FloatingMovement>();
+ for (auto&& [entity, transform, state, movement] : view.each()) {
+ const double speed = movement.speed * dt;
+ const Point diff = (state.destination - transform.position);
+ if (diff.magnitude() > speed) {
+ const Point eff = diff.normalized().scale(speed);
+ transform.position.x += eff.x;
+ transform.position.y += eff.y;
+ }
}
}