From 9e040e8a7e173bc3376cd5dedabb53adf1b96952 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 9 Mar 2023 23:18:24 +0800 Subject: [PATCH] 1 --- server/gameserver/creature.cc | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 4b1e3c81..b888f2d8 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -2944,6 +2944,7 @@ void Creature::ShortFindPath() #if 1 bool right_ok = false; float right_distance = 0.0f; + glm::vec3 right_pos = glm::vec3(0.0f, 0.0f, 0.0f); { float angle = 1.0f; glm::vec3 move_dir = GetMoveDir(); @@ -2953,10 +2954,13 @@ void Creature::ShortFindPath() bool ret = try_move(start_pos, end_pos, new_point); if (ret) { right_ok = true; + right_pos = new_point; + right_distance = GlmHelper::Norm(new_point - GetPos().ToGlmVec3()); } } bool left_ok = false; float left_distance = 0.0f; + glm::vec3 left_pos = glm::vec3(0.0f, 0.0f, 0.0f); { float angle = -1.0f; glm::vec3 move_dir = GetMoveDir(); @@ -2966,6 +2970,33 @@ void Creature::ShortFindPath() bool ret = try_move(start_pos, end_pos, new_point); if (ret) { left_ok = true; + left_pos = new_point; + left_distance = GlmHelper::Norm(new_point - GetPos().ToGlmVec3()); + } + } + if (right_ok || left_ok) { + glm::vec3 finaly_pos = glm::vec3(0.0f, 0.0f, 0.0f); + if (right_ok && left_ok) { + if (right_distance > left_distance) { + finaly_pos = right_pos; + } else { + finaly_pos = left_pos; + } + } else if (right_ok) { + finaly_pos = right_pos; + } else if (left_ok) { + finaly_pos = left_pos; + } + glm::vec3 move_dir = finaly_pos - GetPos().ToGlmVec3(); + GlmHelper::Normalize(move_dir); + glm::vec3 end_pos = start_pos + move_dir * GetSpeed() / 2.0f; + + glm::vec3 new_point = glm::vec3(0.0f, 0.0f, 0.0f); + bool ret = try_move(start_pos, end_pos, new_point); + if (ret) { + Global::Instance()->verify_set_pos = 1; + GetMutablePos().FromGlmVec3(last_pos); + Global::Instance()->verify_set_pos = 0; } } #else