diff options
author | Aki <please@ignore.pl> | 2023-04-23 12:54:14 +0200 |
---|---|---|
committer | Aki <please@ignore.pl> | 2024-04-05 19:41:19 +0200 |
commit | 975339d07aeb193564221adff31b55a913d92a1e (patch) | |
tree | 957b37e922e494780874bbc8e495a1a5e412fb76 /sim/src/TurretControl.cpp | |
parent | bdfb27ba04528f213dcadc00afdcf1f35a61f6fc (diff) | |
download | kurator-975339d07aeb193564221adff31b55a913d92a1e.zip kurator-975339d07aeb193564221adff31b55a913d92a1e.tar.gz kurator-975339d07aeb193564221adff31b55a913d92a1e.tar.bz2 |
Separated Turret from AI, shuffled their units
Diffstat (limited to 'sim/src/TurretControl.cpp')
-rw-r--r-- | sim/src/TurretControl.cpp | 72 |
1 files changed, 0 insertions, 72 deletions
diff --git a/sim/src/TurretControl.cpp b/sim/src/TurretControl.cpp deleted file mode 100644 index 51f2a46..0000000 --- a/sim/src/TurretControl.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include <kurator/sim/TurretControl.h> - -#include <kurator/sim/components.h> -#include <kurator/sim/FloatingMovement.h> -#include <kurator/sim/HitPoints.h> -#include <kurator/sim/events.h> -#include <kurator/sim/State.h> -#include <kurator/universe/TurretType.h> - - -namespace kurator -{ -namespace sim -{ - - -bool consume(float& dt, double& target); - - -void -TurretControl::update(State& ctx) -{ - auto view = ctx.registry.view<TurretControl, universe::TurretType>(); - for (auto&& [entity, control, def] : view.each()) { - if (!ctx.registry.valid(control.owner)) { - ctx.registry.destroy(entity); - continue; - } - if (!ctx.registry.all_of<AIState, Transform>(control.owner)) - continue; - const auto& [state, transform] = ctx.registry.get<AIState, Transform>(control.owner); - if (!ctx.registry.valid(state.target)) - continue; - const auto& target = ctx.registry.get<Transform>(state.target); - const auto distance = transform.position.distance(target.position); - if (distance > def.effective_range()) - continue; - auto remaining_dt = ctx.clock.dt; - while (remaining_dt > 0.0) { - if (control.rounds < 1 && consume(remaining_dt, control.reload)) - control.rounds = def.rounds; - if (control.rounds > 0 && consume(remaining_dt, control.delay)) { - auto& target_points = ctx.registry.get<HitPoints>(state.target); - const auto& movement = ctx.registry.get<FloatingMovement>(state.target); - auto damage = def.effective_damage(distance, movement.speed.magnitude()); - if (damage > 0.0) { - damage = target_points.deal(damage); - ctx.dispatcher.trigger(Hit{damage, control.owner, state.target}); - } - control.delay = def.rate_of_fire; - if (--control.rounds < 1) - control.reload = def.reload; - } - } - } -} - - -bool -consume(float& dt, double& target) -{ - if (target <= 0.0) - return true; - const auto _dt = dt; - dt -= target; - target -= _dt; - return target <= 0.0; -} - - -} // namespace sim -} // namespace kurator |