diff options
Diffstat (limited to 'battles/src')
-rw-r--r-- | battles/src/Battle.cpp | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/battles/src/Battle.cpp b/battles/src/Battle.cpp index 454cbfd..99ed076 100644 --- a/battles/src/Battle.cpp +++ b/battles/src/Battle.cpp @@ -1,7 +1,10 @@ #include <kurator/battles/Battle.h> +#include <memory> #include <random> +#include <entt/entity/registry.hpp> + #include <kurator/battles/components.h> #include <kurator/battles/Scenario.h> #include <kurator/universe/ShipType.h> @@ -13,27 +16,52 @@ namespace battles { -Battle::Battle(Scenario scenario) +class BaseBattle : public Battle +{ +public: + BaseBattle(const Scenario& scenario); + entt::registry& registry() override; + void update(float dt) override; +private: + entt::registry _registry; +}; + + +BaseBattle::BaseBattle(const Scenario& scenario) { std::random_device dev; std::uniform_real_distribution<> pos{-2.5, 2.5}; for (const auto& ship : scenario.ships) { - const auto entity = registry.create(); - registry.emplace<universe::ShipType>(entity, ship.type); - registry.emplace<Team>(entity, ship.team); - registry.emplace<Transform>(entity, Point{pos(dev), pos(dev)}, Point{0.0, 0.0}); + const auto entity = _registry.create(); + _registry.emplace<universe::ShipType>(entity, ship.type); + _registry.emplace<Team>(entity, ship.team); + _registry.emplace<Transform>(entity, Point{pos(dev), pos(dev)}, Point{0.0, 0.0}); } } +entt::registry& +BaseBattle::registry() +{ + return _registry; +} + + void -Battle::update(const float dt) +BaseBattle::update(const float dt) { - auto view = registry.view<Transform, Team>(); + auto view = _registry.view<Transform, Team>(); for (auto&& [entity, transform, team] : view.each()) transform.position.x += 0.1 * dt * (team.id * 2 - 1); } +std::unique_ptr<Battle> +prepare(const Scenario& scenario) +{ + return std::make_unique<BaseBattle>(scenario); +} + + } // namespace battles } // namespace kurator |