From ff3e213d1b6831d932755950c6aa759159f96036 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 2 Dec 2022 13:19:43 +0800 Subject: [PATCH] 1 --- server/gameserver/android.ai.cc | 3 ++- server/gameserver/movehelper.cc | 43 ++++++++++++++++++++++++++++++--- server/gameserver/movehelper.h | 1 + 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/server/gameserver/android.ai.cc b/server/gameserver/android.ai.cc index 21144c45..79a2090a 100644 --- a/server/gameserver/android.ai.cc +++ b/server/gameserver/android.ai.cc @@ -495,7 +495,8 @@ void AndroidAI::UpdatePursuit() paths ); if (ret > 0) { - + myself->GetMoveHelper()->ClearPath(); + myself->GetMoveHelper()->AddPaths(center, paths); } } #else diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc index 1ae651b3..31e5c099 100644 --- a/server/gameserver/movehelper.cc +++ b/server/gameserver/movehelper.cc @@ -1,5 +1,7 @@ #include "precompile.h" +#include + #include "movehelper.h" #include "moveableentity.h" #include "room.h" @@ -13,7 +15,6 @@ struct MovePathPoint glm::vec3 tar_pos; glm::vec3 curr_pos; glm::vec3 dir; - long long frameno = 0; float distance = 0.0f; }; @@ -53,7 +54,6 @@ bool MoveHelper::GetMovePosition(glm::vec3& out_pos) ++path_index_; if (path_index_ < paths_.size()) { auto& next_point = paths_[path_index_]; - next_point->frameno = owner_->room->GetFrameNo(); a8::Vec2 v2; v2.x = next_point->tar_pos.x; @@ -125,7 +125,6 @@ void MoveHelper::CalcTargetPos(float distance) point->src_pos.z = owner_->GetPos().y; point->curr_pos.x = owner_->GetPos().x; point->curr_pos.z = owner_->GetPos().y; - point->frameno = owner_->room->GetFrameNo() - 1; if (point->tar_pos.x < 0 || point->tar_pos.z < 0) { @@ -170,3 +169,41 @@ void MoveHelper::ClearPath() } paths_.clear(); } + +void MoveHelper::AddPaths(const a8::Vec3& start, std::vector& paths) +{ + glm::vec3 last_pos; + last_pos.x = start.x; + last_pos.y = start.y; + last_pos.z = start.z; + + for (size_t i = 0; i < paths.size(); ++i) { + MovePathPoint* p = new MovePathPoint(); + p->src_pos = last_pos; + + p->tar_pos.x = paths[i].x; + p->tar_pos.y = paths[i].y; + p->tar_pos.z = paths[i].z; + + p->curr_pos = p->src_pos; + + glm::vec2 src_pos; + glm::vec2 tar_pos; + + src_pos.x = p->src_pos.x; + src_pos.y = p->src_pos.y; + + tar_pos.x = p->tar_pos.x; + tar_pos.y = p->tar_pos.y; + + //p->distance = glm::norm(tar_pos - src_pos); + glm::vec2 dir = tar_pos - src_pos; + glm::normalize(dir); + + p->dir.x = dir.x; + p->dir.y = 0; + p->dir.z = dir.y; + + paths_.push_back(p); + } +} diff --git a/server/gameserver/movehelper.h b/server/gameserver/movehelper.h index 1741f135..3dc8ecef 100644 --- a/server/gameserver/movehelper.h +++ b/server/gameserver/movehelper.h @@ -9,6 +9,7 @@ class MoveHelper bool GetMovePosition(glm::vec3& out_pos); void CalcTargetPos(float distance); void ClearPath(); + void AddPaths(const a8::Vec3& start, std::vector& paths); private: std::vector paths_;