From 13a82ab13d71a8c07f9f413e2ff766dfdc3d91b7 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Sat, 16 Mar 2019 16:30:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84movement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/CMakeLists.txt | 1 + server/gameserver/movement.cc | 14 ++++++++++++- server/gameserver/types.cc | 34 ++++++++++++++++++++++++++++++++ server/gameserver/types.h | 12 +++++++++-- 4 files changed, 58 insertions(+), 3 deletions(-) diff --git a/server/gameserver/CMakeLists.txt b/server/gameserver/CMakeLists.txt index 32a983c..b1db877 100644 --- a/server/gameserver/CMakeLists.txt +++ b/server/gameserver/CMakeLists.txt @@ -18,6 +18,7 @@ include_directories( /usr/include/mysql /usr/include/jsoncpp /usr/include/hiredis + /usr/include/eigen3 ../../third_party . ) diff --git a/server/gameserver/movement.cc b/server/gameserver/movement.cc index 560e13f..a9da52c 100644 --- a/server/gameserver/movement.cc +++ b/server/gameserver/movement.cc @@ -1,16 +1,28 @@ #include "precompile.h" #include "movement.h" +#include "entity.h" void MovementComponent::Update(int delta_time) { if (path_index_ < paths_.size()) { + MovePathPoint& target_point = paths_[path_index_]; + owner->pos = owner->pos + (target_point.pos - owner->pos) * delta_time * move_speed_; + if (owner->pos == target_point.pos) { + ++path_index_; + } } } bool MovementComponent::GetMovePosition(int delta_time, Vector2D& out_pos) { - return false; + if (path_index_ < paths_.size()) { + MovePathPoint& target_point = paths_[path_index_]; + out_pos = owner->pos + (target_point.pos - owner->pos) * delta_time * move_speed_; + } else { + out_pos = owner->pos; + } + return true; } void MovementComponent::AddPathPoint(Vector2D& pos, float distance, float speed) diff --git a/server/gameserver/types.cc b/server/gameserver/types.cc index c6911d1..9058c0b 100644 --- a/server/gameserver/types.cc +++ b/server/gameserver/types.cc @@ -1,5 +1,8 @@ #include "precompile.h" +#include +#include + #include "cs_proto.pb.h" void Vector2D::ToPB(cs::MFVector2D* pb_obj) @@ -7,3 +10,34 @@ void Vector2D::ToPB(cs::MFVector2D* pb_obj) pb_obj->set_x(x); pb_obj->set_y(y); } + +void Vector2D::Normalize() +{ + Eigen::Vector2f v(x, y); + v.normalize(); + x = v[0]; + y = v[1]; +} + +bool Vector2D::operator == (const Vector2D& b) +{ + return std::abs(x - b.x) < 0.01f && std::abs(y - b.y) < 0.01f; +} + +Vector2D Vector2D::operator + (const Vector2D& b) +{ + Eigen::Vector2f v = Eigen::Vector2f(x, y) + Eigen::Vector2f(b.x, b.y); + return Vector2D(v[0], v[1]); +} + +Vector2D Vector2D::operator - (const Vector2D& b) +{ + Eigen::Vector2f v = Eigen::Vector2f(x, y) - Eigen::Vector2f(b.x, b.y); + return Vector2D(v[0], v[1]); +} + +Vector2D Vector2D::operator * (float scale) +{ + Eigen::Vector2f v = Eigen::Vector2f(x, y) * scale; + return Vector2D(v[0], v[1]); +} diff --git a/server/gameserver/types.h b/server/gameserver/types.h index 00001ab..c54ceda 100755 --- a/server/gameserver/types.h +++ b/server/gameserver/types.h @@ -16,8 +16,16 @@ namespace cs struct Vector2D { - float x = 0.0; - float y = 0.0; + float x = 0.0f; + float y = 0.0f; + + Vector2D(float _x = 0.0f, float _y = 0.0f):x(_x), y(_y) {}; void ToPB(cs::MFVector2D* pb_obj); + void Normalize(); + + bool operator == (const Vector2D& b); + Vector2D operator + (const Vector2D& b); + Vector2D operator - (const Vector2D& b); + Vector2D operator * (float scale); };