58 lines
1.4 KiB
C++
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();
|
|
}
|