From c2356b57b922cc561b5e8a56505ffac10ffbfdd6 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 26 Jun 2023 14:23:29 +0800 Subject: [PATCH] 1 --- server/gameserver/movement.cc | 29 +++++++++++++++++++++++++++++ server/gameserver/movement.h | 1 + 2 files changed, 30 insertions(+) diff --git a/server/gameserver/movement.cc b/server/gameserver/movement.cc index e4e68c27..b5a00723 100644 --- a/server/gameserver/movement.cc +++ b/server/gameserver/movement.cc @@ -216,3 +216,32 @@ size_t Movement::GetPathSize() { return paths_.size(); } + +bool Movement::FindPath(const glm::vec3& target_pos, float distance) +{ + ClearPath(); + + glm::vec3 start = owner_->GetPos().ToGlmVec3(); + glm::vec3 end = target_pos; + std::vector paths; + + owner_->room->map_instance->FindStraightPath(start, end, paths); + if (paths.size() > 0) { + glm::vec3 last_pos = owner_->GetPos().ToGlmVec3(); + for (const glm::vec3& pos : paths) { + glm::vec3 dir = pos - last_pos; + GlmHelper::Normalize(dir); + MovePathPoint point; + point.src_pos.FromGlmVec3(last_pos); + point.dir.x = dir.x; + point.dir.y = dir.y; + point.dir.z = dir.z; + point.distance -= GlmHelper::Norm(pos - last_pos); + point.tar_pos.FromGlmVec3(pos); + paths_.push_back(point); + + last_pos = pos; + } + } + return !paths.empty(); +} diff --git a/server/gameserver/movement.h b/server/gameserver/movement.h index 79b2247b..68004ef1 100644 --- a/server/gameserver/movement.h +++ b/server/gameserver/movement.h @@ -28,6 +28,7 @@ class Movement void AddPaths(const glm::vec3& start, std::vector& paths); size_t GetPathSize(); bool IsFindPath() { return is_find_path_; } + bool FindPath(const glm::vec3& target_pos, float distance); private: std::vector paths_;