game2001/server/gameserver/movement.cc
aozhiwei 62373e21b4 1
2019-03-22 17:40:23 +08:00

58 lines
1.4 KiB
C++

#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_];
if (owner->pos == target_point.pos) {
++path_index_;
return;
}
#if 1
assert(false);
#else
Vector2D dir = target_point.pos - owner->pos;
dir.Normalize();
float distance = path.Norm();
owner->pos = owner->pos + dir * std::min(move_speed_, distance);
if (owner->pos == target_point.pos) {
++path_index_;
}
#endif
}
}
bool MovementComponent::GetMovePosition(int delta_time, Vector2D& out_pos)
{
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;
}
bool MovementComponent::Arrived()
{
return path_index_ >= paths_.size();
}
void MovementComponent::AddPathPoint(Vector2D& pos, float distance, float speed)
{
MovePathPoint& point = a8::FastAppend(paths_);
point.pos = pos;
point.distance = distance;
move_speed_ = speed;
}
void MovementComponent::ClearPath()
{
move_speed_ = 0.0f;
path_index_ = 0;
paths_.clear();
}