summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorAki <please@ignore.pl>2023-02-12 00:26:12 +0100
committerAki <please@ignore.pl>2023-02-12 00:26:12 +0100
commit9e6555c0f3be53d65496b442c4a60c2592fe4f97 (patch)
tree37fda77e5816d9a127d5499b6df251a73a5ab1a9 /sim
parenta5266d3e5da1d9ee9f873124674c68843a407ac0 (diff)
downloadkurator-9e6555c0f3be53d65496b442c4a60c2592fe4f97.zip
kurator-9e6555c0f3be53d65496b442c4a60c2592fe4f97.tar.gz
kurator-9e6555c0f3be53d65496b442c4a60c2592fe4f97.tar.bz2
Extracted system update functions out of sim BaseBattle
Diffstat (limited to 'sim')
-rw-r--r--sim/src/BaseBattle.cpp35
-rw-r--r--sim/src/BaseBattle.h3
-rw-r--r--sim/src/TeamManager.cpp14
-rw-r--r--sim/src/TeamManager.h6
4 files changed, 25 insertions, 33 deletions
diff --git a/sim/src/BaseBattle.cpp b/sim/src/BaseBattle.cpp
index e34af76..6182fec 100644
--- a/sim/src/BaseBattle.cpp
+++ b/sim/src/BaseBattle.cpp
@@ -25,7 +25,6 @@ namespace sim
BaseBattle::BaseBattle(const campaign::Scenario& scenario) :
- time {0.0},
_registry {},
spawner {scenario.last_team(), scenario.radius, 0.1}
{
@@ -57,17 +56,19 @@ BaseBattle::dispatcher()
}
+static void keep_at_range(engine::Context& ctx);
+static void kill_off_dead(engine::Context& ctx);
+
+
void
BaseBattle::update(engine::Context& ctx)
{
- time = ctx.clock.game;
pick_random_targets();
- keep_at_range();
+ keep_at_range(ctx);
FloatingMovement::update(ctx);
TurretControl::update(ctx);
- kill_off_dead();
- manager.clear(_registry); // registry supports on destructions events
- manager.update(_dispatcher);
+ kill_off_dead(ctx);
+ manager.update(ctx);
}
@@ -83,13 +84,13 @@ BaseBattle::pick_random_targets()
void
-BaseBattle::keep_at_range()
+keep_at_range(engine::Context& ctx)
{
- auto view = _registry.view<Transform, AIState>();
+ auto view = ctx.registry.view<Transform, AIState>();
for (auto&& [entity, self, ai] : view.each()) {
- if (!_registry.valid(ai.target))
+ if (!ctx.registry.valid(ai.target))
continue;
- const auto target = _registry.get<Transform>(ai.target);
+ const auto target = ctx.registry.get<Transform>(ai.target);
const auto offset = target.position - self.position;
ai.destination = target.position - offset.normalized().scale(ai.keep_at_range);
}
@@ -97,18 +98,18 @@ BaseBattle::keep_at_range()
void
-BaseBattle::kill_off_dead()
+kill_off_dead(engine::Context& ctx)
{
- auto view = _registry.view<HitPoints>();
+ auto view = ctx.registry.view<HitPoints>();
for (auto&& [entity, points] : view.each()) {
if (points.is_alive())
continue;
- if (_registry.all_of<universe::UniqueIdentifier, Team>(entity)) {
- const auto& [identifier, team] = _registry.get<universe::UniqueIdentifier, Team>(entity);
- _dispatcher.trigger(stats::ShipLeft{time, identifier, team.id, true});
- _dispatcher.trigger(Destroyed{entity});
+ if (ctx.registry.all_of<universe::UniqueIdentifier, Team>(entity)) {
+ const auto& [identifier, team] = ctx.registry.get<universe::UniqueIdentifier, Team>(entity);
+ ctx.dispatcher.trigger(stats::ShipLeft{ctx.clock.game, identifier, team.id, true});
+ ctx.dispatcher.trigger(Destroyed{entity});
}
- _registry.destroy(entity);
+ ctx.registry.destroy(entity);
}
}
diff --git a/sim/src/BaseBattle.h b/sim/src/BaseBattle.h
index d67f33e..7532dd8 100644
--- a/sim/src/BaseBattle.h
+++ b/sim/src/BaseBattle.h
@@ -25,14 +25,11 @@ public:
entt::dispatcher& dispatcher() override;
void update(engine::Context& ctx) override;
private:
- double time;
entt::registry _registry;
entt::dispatcher _dispatcher;
RandomSpawner spawner;
TeamManager manager;
void pick_random_targets();
- void keep_at_range();
- void kill_off_dead();
};
diff --git a/sim/src/TeamManager.cpp b/sim/src/TeamManager.cpp
index d26ed67..0325c0c 100644
--- a/sim/src/TeamManager.cpp
+++ b/sim/src/TeamManager.cpp
@@ -6,8 +6,8 @@
#include <utility>
#include <entt/entity/registry.hpp>
-#include <entt/signal/dispatcher.hpp>
+#include <kurator/engine/Context.h>
#include <kurator/sim/events.h>
@@ -58,21 +58,15 @@ TeamManager::random(const int exclude)
void
-TeamManager::clear(entt::registry& registry)
+TeamManager::update(engine::Context& ctx)
{
for (auto& members : teams) {
- auto is_valid = [&registry](entt::entity entity){ return !registry.valid(entity); };
+ auto is_valid = [&](entt::entity entity){ return !ctx.registry.valid(entity); };
members.erase(std::remove_if(members.begin(), members.end(), is_valid), members.end());
}
-}
-
-
-void
-TeamManager::update(entt::dispatcher& dispatcher)
-{
const auto left = std::count_if(teams.begin(), teams.end(), [](const Team& team){ return team.size() > 0; });
if (left < 2)
- dispatcher.trigger(End{});
+ ctx.dispatcher.trigger(End{});
}
diff --git a/sim/src/TeamManager.h b/sim/src/TeamManager.h
index 502bed2..f7cf1f6 100644
--- a/sim/src/TeamManager.h
+++ b/sim/src/TeamManager.h
@@ -4,7 +4,8 @@
#include <vector>
#include <entt/entity/registry.hpp>
-#include <entt/signal/dispatcher.hpp>
+
+#include <kurator/engine/Context.h>
namespace kurator
@@ -21,8 +22,7 @@ public:
void add(int team, entt::entity entity);
Team get(int team) const;
entt::entity random(int exclude);
- void clear(entt::registry& registry);
- void update(entt::dispatcher& dispatcher);
+ void update(engine::Context& ctx);
private:
std::vector<Team> teams;
std::mt19937 generator;