diff options
author | Aki <please@ignore.pl> | 2023-02-13 01:06:31 +0100 |
---|---|---|
committer | Aki <please@ignore.pl> | 2023-02-13 01:06:31 +0100 |
commit | 03bb1614c25a56ef6225db09c4c59b7a5f8fa808 (patch) | |
tree | 11216b0104103d07ebbe7a707c967c42ccc93c3e | |
parent | 6f8db05c02f941ce75da34e3c50c987d03c23e54 (diff) | |
download | kurator-03bb1614c25a56ef6225db09c4c59b7a5f8fa808.zip kurator-03bb1614c25a56ef6225db09c4c59b7a5f8fa808.tar.gz kurator-03bb1614c25a56ef6225db09c4c59b7a5f8fa808.tar.bz2 |
Externalized part of simulation systems
-rw-r--r-- | sim/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sim/include/kurator/sim/systems.h | 17 | ||||
-rw-r--r-- | sim/src/BaseBattle.cpp | 39 | ||||
-rw-r--r-- | sim/src/systems.cpp | 49 |
4 files changed, 68 insertions, 38 deletions
diff --git a/sim/CMakeLists.txt b/sim/CMakeLists.txt index 9d24182..27f312b 100644 --- a/sim/CMakeLists.txt +++ b/sim/CMakeLists.txt @@ -7,6 +7,7 @@ add_library( src/FloatingMovement.cpp src/HitPoints.cpp src/RandomSpawner.cpp + src/systems.cpp src/TeamManager.cpp src/TurretControl.cpp ) diff --git a/sim/include/kurator/sim/systems.h b/sim/include/kurator/sim/systems.h new file mode 100644 index 0000000..76353c2 --- /dev/null +++ b/sim/include/kurator/sim/systems.h @@ -0,0 +1,17 @@ +#pragma once + +#include <kurator/engine/Context.h> + + +namespace kurator +{ +namespace sim +{ + + +void keep_at_range(engine::Context& ctx); +void kill_off_dead(engine::Context& ctx); + + +} // namespace sim +} // namespace kurator diff --git a/sim/src/BaseBattle.cpp b/sim/src/BaseBattle.cpp index 0c23065..888379e 100644 --- a/sim/src/BaseBattle.cpp +++ b/sim/src/BaseBattle.cpp @@ -8,11 +8,9 @@ #include <kurator/engine/Context.h> #include <kurator/campaign/Scenario.h> #include <kurator/sim/components.h> -#include <kurator/sim/events.h> #include <kurator/sim/FloatingMovement.h> -#include <kurator/sim/HitPoints.h> +#include <kurator/sim/systems.h> #include <kurator/sim/TurretControl.h> -#include <kurator/stats/events.h> #include <kurator/universe/UniqueIdentifier.h> #include "Builder.h" @@ -67,10 +65,6 @@ BaseBattle::dispatcher() } -static void keep_at_range(engine::Context& ctx); -static void kill_off_dead(engine::Context& ctx); - - void BaseBattle::update(engine::Context& ctx) { @@ -94,36 +88,5 @@ BaseBattle::pick_random_targets() } -void -keep_at_range(engine::Context& ctx) -{ - auto view = ctx.registry.view<Transform, AIState>(); - for (auto&& [entity, self, ai] : view.each()) { - if (!ctx.registry.valid(ai.target)) - continue; - 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); - } -} - - -void -kill_off_dead(engine::Context& ctx) -{ - auto view = ctx.registry.view<HitPoints>(); - for (auto&& [entity, points] : view.each()) { - if (points.is_alive()) - continue; - 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}); - } - ctx.registry.destroy(entity); - } -} - - } // namespace sim } // namespace kurator diff --git a/sim/src/systems.cpp b/sim/src/systems.cpp new file mode 100644 index 0000000..114ed2f --- /dev/null +++ b/sim/src/systems.cpp @@ -0,0 +1,49 @@ +#include <kurator/sim/systems.h> + +#include <kurator/engine/Context.h> +#include <kurator/sim/components.h> +#include <kurator/sim/events.h> +#include <kurator/sim/HitPoints.h> +#include <kurator/stats/events.h> +#include <kurator/universe/UniqueIdentifier.h> + + +namespace kurator +{ +namespace sim +{ + + +void +keep_at_range(engine::Context& ctx) +{ + auto view = ctx.registry.view<Transform, AIState>(); + for (auto&& [entity, self, ai] : view.each()) { + if (!ctx.registry.valid(ai.target)) + continue; + 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); + } +} + + +void +kill_off_dead(engine::Context& ctx) +{ + auto view = ctx.registry.view<HitPoints>(); + for (auto&& [entity, points] : view.each()) { + if (points.is_alive()) + continue; + 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}); + } + ctx.registry.destroy(entity); + } +} + + +} // namespace sim +} // namespace kurator |