From bd8b0a9ba1bdd68b915fed75f1e901851b340efd Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 11 Nov 2022 17:02:58 +0100 Subject: Extracted random spawning mechanism to a dedicated class --- battles/src/Battle.cpp | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) (limited to 'battles/src/Battle.cpp') diff --git a/battles/src/Battle.cpp b/battles/src/Battle.cpp index 99ed076..a28cdc6 100644 --- a/battles/src/Battle.cpp +++ b/battles/src/Battle.cpp @@ -9,6 +9,8 @@ #include #include +#include "RandomSpawner.h" + namespace kurator { @@ -16,6 +18,9 @@ namespace battles { +int total_teams_in(const Scenario& scenario); + + class BaseBattle : public Battle { public: @@ -24,18 +29,19 @@ public: void update(float dt) override; private: entt::registry _registry; + RandomSpawner spawner; }; -BaseBattle::BaseBattle(const Scenario& scenario) +BaseBattle::BaseBattle(const Scenario& scenario) : + _registry {}, + spawner {total_teams_in(scenario), 2.5, 0.1} { - 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(entity, ship.type); _registry.emplace(entity, ship.team); - _registry.emplace(entity, Point{pos(dev), pos(dev)}, Point{0.0, 0.0}); + _registry.emplace(entity, spawner.get(ship.team)); } } @@ -63,5 +69,17 @@ prepare(const Scenario& scenario) } +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