From 75440771ca95a28556586233a0a8399022a5559f Mon Sep 17 00:00:00 2001 From: Aki Date: Fri, 27 Jan 2023 00:27:39 +0100 Subject: Added effective range calculation for turrets This is now used when deciding if turret should start shooting or not. --- sim/src/Builder.cpp | 2 +- sim/src/TurretControl.cpp | 2 +- universe/include/kurator/universe/TurretType.h | 1 + universe/src/TurretType.cpp | 9 +++++++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sim/src/Builder.cpp b/sim/src/Builder.cpp index e6984fe..b5762b3 100644 --- a/sim/src/Builder.cpp +++ b/sim/src/Builder.cpp @@ -38,7 +38,7 @@ Builder::operator()(const universe::ShipType& ship_type, const int team) const ship_type.max_speed, ship_type.max_speed * 2.0, ship_type.max_speed * 3.0); - registry.emplace(entity, 6000.0, Point{0.0, 0.0}); + registry.emplace(entity, 15000.0, Point{0.0, 0.0}); registry.emplace( entity, ship_type.base_shield_points, diff --git a/sim/src/TurretControl.cpp b/sim/src/TurretControl.cpp index e2596c8..bfac27f 100644 --- a/sim/src/TurretControl.cpp +++ b/sim/src/TurretControl.cpp @@ -34,7 +34,7 @@ TurretControl::update(entt::registry& registry, entt::dispatcher& dispatcher, co continue; const auto& target = registry.get(state.target); const auto distance = transform.position.distance(target.position); - if (distance > def.optimal_range * 2.5) + if (distance > def.effective_range()) continue; auto remaining_dt = dt; while (remaining_dt > 0.0) { diff --git a/universe/include/kurator/universe/TurretType.h b/universe/include/kurator/universe/TurretType.h index 553894b..0a0c5fd 100644 --- a/universe/include/kurator/universe/TurretType.h +++ b/universe/include/kurator/universe/TurretType.h @@ -20,6 +20,7 @@ struct TurretType double falloff_modifier = 0.05; double falloff_intensity = 0.2; double effective_damage(double distance) const; + double effective_range() const; }; diff --git a/universe/src/TurretType.cpp b/universe/src/TurretType.cpp index d213d07..a215b32 100644 --- a/universe/src/TurretType.cpp +++ b/universe/src/TurretType.cpp @@ -19,5 +19,14 @@ TurretType::effective_damage(const double distance) const } +double +TurretType::effective_range() const +{ + const double target = std::log2(0.01) / std::log2(falloff_intensity); + const double one_percent_falloff = target * falloff_modifier * optimal_range; + return one_percent_falloff + optimal_range; +} + + } // namespace universe } // namespace kurator -- cgit v1.1