From 8f2bfd1a158f825641d82c4a075e33bfc41235e8 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Wed, 14 Dec 2022 18:52:21 +0800 Subject: [PATCH] 1 --- server/gameserver/movehelper.cc | 70 ++++++++++----------------------- 1 file changed, 20 insertions(+), 50 deletions(-) diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc index 2f079cb5..86ede187 100644 --- a/server/gameserver/movehelper.cc +++ b/server/gameserver/movehelper.cc @@ -17,58 +17,28 @@ MoveHelper::MoveHelper(Creature* owner) bool MoveHelper::GetMovePosition(glm::vec3& out_pos) { - // 999 - #if 1 - #else - Creature* c = owner_; - if (path_index_ < paths_.size()) { - a8::Vec2 src_pos; - a8::Vec2 tar_pos; - a8::Vec2 curr_pos; - a8::Vec2 dir; - - auto& point = paths_[path_index_]; - src_pos.x = point.src_pos.x; - src_pos.y = point.src_pos.z; - - curr_pos.x = point.curr_pos.x; - curr_pos.y = point.curr_pos.z; - - tar_pos.x = point.tar_pos.x; - tar_pos.y = point.tar_pos.z; - - dir.x = point.dir.x; - dir.y = point.dir.z; - - curr_pos = (curr_pos + dir * owner_->GetSpeed() * 1); - point.curr_pos.x = curr_pos.x; - point.curr_pos.z = curr_pos.y; - owner_->SetPos(curr_pos); - if (owner_->GetPos().Distance(src_pos) - point.distance >= 0.0001f) { - owner_->SetPos(tar_pos); - ++path_index_; - if (path_index_ < paths_.size()) { - auto& next_point = paths_[path_index_]; - - a8::Vec2 v2; - v2.x = next_point.tar_pos.x; - v2.y = next_point.tar_pos.z; - a8::Vec2 dir = (v2 - owner_->GetPos()); - dir.Normalize(); - next_point.dir.x = dir.x; - next_point.dir.z = dir.y; - } - } - if (owner_->GetPos().x < 0 || - owner_->GetPos().y < 0) { - abort(); - } - return true; - } else { + if (path_index_ >= paths_.size()) { ClearPath(); + return false; } - #endif - return false; + MovePathPoint& curr_point = paths_[path_index_]; + owner_->SetPos(curr_point.curr_pos); + if (owner_->GetPos().Distance2D2(curr_point.src_pos) - curr_point.distance >= 0.0001f) { + owner_->SetPos(curr_point.tar_pos); + ++path_index_; + if (path_index_ < paths_.size()) { + MovePathPoint& next_point = paths_[path_index_]; + a8::Vec2 dir = owner_->GetPos().CalcDir2D(next_point.tar_pos); + dir.Normalize(); + next_point.dir.x = dir.x; + next_point.dir.z = dir.y; + } + } + if (owner_->GetPos().x < 0 || + owner_->GetPos().y < 0) { + abort(); + } + return true; } void MoveHelper::CalcTargetPos(float distance)