From 90b3684bf8aab42ddf7523dbf6eee8e46bdbc4af Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 24 Mar 2023 17:21:40 +0800 Subject: [PATCH] 1 --- server/gameserver/buff/reverse.cc | 22 +++++++++++++--------- server/gameserver/glmhelper.cc | 5 +++++ server/gameserver/glmhelper.h | 2 ++ 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/server/gameserver/buff/reverse.cc b/server/gameserver/buff/reverse.cc index 997b5a82..98fb7600 100644 --- a/server/gameserver/buff/reverse.cc +++ b/server/gameserver/buff/reverse.cc @@ -15,16 +15,20 @@ void ReverseBuff::Activate() { hold_param1_ = meta->GetBuffParam1(this); if (caster_.Get()) { - glm::vec3 dir = caster_.Get()->GetPos().CalcDir(owner->GetPos()); - if ((std::isfinite(dir.x) && - std::isfinite(dir.z))) { - dir = dir * 1.0f; - GlmHelper::Normalize(dir); - owner->SetMoveDir(dir); - owner->SetAttackDir(dir); - if (hold_param1_ > 0.001) { - owner->ForwardMove(hold_param1_); + if (!GlmHelper::IsEqual2D(caster_.Get()->GetPos().ToGlmVec3(), + owner->GetPos().ToGlmVec3())) { + glm::vec3 dir = caster_.Get()->GetPos().CalcDir(owner->GetPos()); + if ((std::isfinite(dir.x) && + std::isfinite(dir.z))) { + dir = dir * 1.0f; + GlmHelper::Normalize(dir); + owner->SetMoveDir(dir); + owner->SetAttackDir(dir); + if (hold_param1_ > 0.001) { + owner->ForwardMove(hold_param1_); + } } + } } } diff --git a/server/gameserver/glmhelper.cc b/server/gameserver/glmhelper.cc index b2cdea44..fefb5b64 100644 --- a/server/gameserver/glmhelper.cc +++ b/server/gameserver/glmhelper.cc @@ -71,3 +71,8 @@ void GlmHelper::FillVert(const glm::vec3& v, float* vert) vert[1] = v.y; vert[2] = v.z; } + +bool GlmHelper::IsEqual2D(const glm::vec3& v1, const glm::vec3& v2) +{ + return std::abs(v1.x - v2.x) > 0.00001f || std::abs(v1.z - v2.z) > 0.00001f; +} diff --git a/server/gameserver/glmhelper.h b/server/gameserver/glmhelper.h index 4a799da6..4417e4d9 100644 --- a/server/gameserver/glmhelper.h +++ b/server/gameserver/glmhelper.h @@ -13,6 +13,8 @@ class GlmHelper static float Norm(const glm::vec3& v); static bool IsZero(const glm::vec3& v); + static bool IsEqual2D(const glm::vec3& v1, const glm::vec3& v2); + static float CalcAngle(const glm::vec3& v1, const glm::vec3& v2); static void FillVert(const glm::vec3& v, float* vert);