From 0e57ea98049658b4d82488c43d71b4ced534c2af Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 12 Nov 2022 13:43:54 +0100 Subject: Extracted basic implementation of concrete Battle --- battles/src/BaseBattle.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 battles/src/BaseBattle.cpp (limited to 'battles/src/BaseBattle.cpp') diff --git a/battles/src/BaseBattle.cpp b/battles/src/BaseBattle.cpp new file mode 100644 index 0000000..a9ac45c --- /dev/null +++ b/battles/src/BaseBattle.cpp @@ -0,0 +1,66 @@ +#include "BaseBattle.h" + +#include +#include + +#include + +#include +#include +#include + + +namespace kurator +{ +namespace battles +{ + + +int total_teams_in(const Scenario& scenario); + + +BaseBattle::BaseBattle(const Scenario& scenario) : + _registry {}, + spawner {total_teams_in(scenario), 2.5, 0.1} +{ + for (const auto& ship : scenario.ships) { + const auto entity = _registry.create(); + _registry.emplace(entity, ship.type); + _registry.emplace(entity, ship.team); + _registry.emplace(entity, spawner.get(ship.team)); + } +} + + +entt::registry& +BaseBattle::registry() +{ + return _registry; +} + + +void +BaseBattle::update(const float dt) +{ + auto view = _registry.view(); + 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); + } +} + + +int +total_teams_in(const Scenario& scenario) +{ + int last_team = 0; + for (const auto& ship : scenario.ships) { + if (ship.team > last_team) + last_team = ship.team; + } + return last_team + 1; +} + + +} // namespace battles +} // namespace kurator -- cgit v1.1