diff --git a/server/gameserver/metadata.cc b/server/gameserver/metadata.cc index 80905998..7df5fbaf 100644 --- a/server/gameserver/metadata.cc +++ b/server/gameserver/metadata.cc @@ -19,6 +19,13 @@ namespace MetaData void Map::Init() { + { + metatable::Map* mutable_pb = (metatable::Map*)pb; +#if DEBUG + mutable_pb->set_scale(0.1f); +#else +#endif + } rand_space = 0; { std::vector strings; diff --git a/server/gameserver/movehelper.cc b/server/gameserver/movehelper.cc index 96a8a3f7..2e5c694f 100644 --- a/server/gameserver/movehelper.cc +++ b/server/gameserver/movehelper.cc @@ -79,24 +79,31 @@ void MoveHelper::CalcTargetPos(float distance) a8::XPrintf("CalcTaretPos old_size:%d\n", {paths_.size()}); } #endif - glm::vec3 start; + glm::vec3 start = owner_->GetPos().ToGlmVec3(); glm::vec3 end; glm::vec3 hit_point; + #if 1 + start *= owner_->room->GetMapMeta()->pb->scale(); + #else start.x = owner_->GetPos().x / 10.0f; start.y = 0; start.z = owner_->GetPos().y / 10.0f; + #endif + #if 1 + #else a8::Vec2 target_pos2d = owner_->GetPos() + owner_->GetMoveDir() * distance; end.x = target_pos2d.x / 10.0f; end.y = 0; end.z = target_pos2d.y / 10.0f; + #endif bool is_hit = false; MovePathPoint point; - if (c->HasBuffEffect(kBET_ThroughWall) || - c->HasBuffEffect(kBET_Fly) || - c->HasBuffEffect(kBET_Jump)) { + if (owner_->HasBuffEffect(kBET_ThroughWall) || + owner_->HasBuffEffect(kBET_Fly) || + owner_->HasBuffEffect(kBET_Jump)) { point.tar_pos = end * 10.f; if (point.tar_pos.x > owner_->room->GetMapMeta()->pb->map_width() + 10) { point.tar_pos.x = owner_->room->GetMapMeta()->pb->map_width() - 10; @@ -122,7 +129,7 @@ void MoveHelper::CalcTargetPos(float distance) a8::Vec2 v2; v2.x = point.tar_pos.x; v2.y = point.tar_pos.z; - point.distance = v2.Distance(owner_->GetPos()); + point.distance = owner_->GetPos().Distance2D(v2); point.src_pos.x = owner_->GetPos().x; point.src_pos.z = owner_->GetPos().y; point.curr_pos.x = owner_->GetPos().x; @@ -152,14 +159,21 @@ void MoveHelper::CalcTargetPos(float distance) }); #endif - if (v2.Distance(owner_->GetPos()) < 0.00001f) { + if (point.distance < 0.00001f / owner_->room->GetMapMeta()->pb->scale()) { return; } + #if 1 + a8::Vec2 dir = owner_->GetPos().CalcDir2DEx(v2); + dir.Normalize(); + point.dir.x = dir.x; + point.dir.z = dir.y; + #else a8::Vec2 dir = (v2 - owner_->GetPos()); dir.Normalize(); point.dir.x = dir.x; point.dir.z = dir.y; + #endif paths_.push_back(point); } diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index 6f5c7ef9..67d25b4d 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -25,6 +25,16 @@ a8::Vec2 Position::CalcDir2D(const Position& target_pos) return target_pos.ToVec2() - ToVec2(); } +a8::Vec2 Position::CalcDir2DEx(const a8::Vec2& target_pos) +{ + return target_pos - ToVec2(); +} + +a8::Vec2 Position::CalcDirGlm2DEx(const glm::vec2& target_pos) +{ + return a8::Vec2(target_pos.x, target_pos.y) - ToVec2(); +} + void Position::FromVec2(const a8::Vec2 v) { x = v.x; @@ -45,7 +55,7 @@ void Position::FromVec3(const a8::Vec3 v) z = v.z; } -void Position::FromGlmVec2Ex(const glm::vec2 v) +void Position::FromGlmVec2(const glm::vec2 v) { x = v.x; y = v.y; diff --git a/server/gameserver/types.h b/server/gameserver/types.h index d88e215a..fed59060 100644 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -76,6 +76,8 @@ struct Position float Distance2D2(const Position& pos); float ManhattanDistance2D(const Position& target_pos); a8::Vec2 CalcDir2D(const Position& target_pos); + a8::Vec2 CalcDir2DEx(const a8::Vec2& target_pos); + a8::Vec2 CalcDirGlm2DEx(const glm::vec2& target_pos); void FromVec2(const a8::Vec2 v); void FromVec2Ex(const a8::Vec2 v);