From c600d53b20867c0ee4207594f229318473b937f2 Mon Sep 17 00:00:00 2001 From: Orange Date: Sun, 26 May 2024 08:01:05 +0300 Subject: [PATCH] updated projectile prediction --- include/uml/ProjectilePredictor.h | 3 +++ source/ProjectilePredictor.cpp | 20 ++++++++++++++++---- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/include/uml/ProjectilePredictor.h b/include/uml/ProjectilePredictor.h index ad7dc47..20a0a75 100644 --- a/include/uml/ProjectilePredictor.h +++ b/include/uml/ProjectilePredictor.h @@ -50,6 +50,9 @@ namespace uml::prediction std::optional ProjectileTravelTime(const Vector3& end, const Projectile& projectile, float angle) const; + + [[nodiscard]] + bool IsTargetWasHit(const Vector3& end, const Projectile& projectile, float angle, float time) const; }; }; diff --git a/source/ProjectilePredictor.cpp b/source/ProjectilePredictor.cpp index e94e1be..7145452 100644 --- a/source/ProjectilePredictor.cpp +++ b/source/ProjectilePredictor.cpp @@ -32,10 +32,7 @@ namespace uml::prediction if (!projectilePitch.has_value()) [[unlikely]] return std::nullopt; - const auto timeToHit = ProjectileTravelTime(predictedTargetPosition, - projectile, - projectilePitch.value()); - if (!timeToHit.has_value() || timeToHit.value() > time) + if (!IsTargetWasHit(predictedTargetPosition, projectile, projectilePitch.value(), time)) continue; const auto delta2d = (predictedTargetPosition - projectile.m_origin).Length2D(); @@ -103,4 +100,19 @@ namespace uml::prediction return std::nullopt; } + + bool ProjectilePredictor::IsTargetWasHit(const Vector3 &end, const Projectile &projectile, const float angle, + const float time) const + { + auto launchAngles = projectile.m_origin.ViewAngleTo(end); + launchAngles.x = angle; + + const auto velocity = Vector3::CreateVelocity(launchAngles, projectile.m_velocity); + + auto currentPos = projectile.m_origin + velocity * time; + currentPos.z -= m_gravity * projectile.m_gravityMultiplier * std::pow(time, 2.f) * 0.5f; + + + return currentPos.DistTo(end) <= 10.f; + } }