45 lines
1.4 KiB
C++
45 lines
1.4 KiB
C++
#include "precompile.h"
|
|
|
|
#include "buff/bepull.h"
|
|
|
|
#include "creature.h"
|
|
|
|
#include "mt/Buff.h"
|
|
|
|
void BePullBuff::Activate()
|
|
{
|
|
if (caster_.Get() == owner) {
|
|
A8_ABORT();
|
|
}
|
|
if (caster_.Get()->GetEntitySubType() == EST_Android) {
|
|
float target_distance = caster_.Get()->GetPos().Distance2D2(owner->GetPos());
|
|
if (target_distance <= 0.000001f) {
|
|
owner->SetPos(caster_.Get()->GetPos());
|
|
owner->target_pos = caster_.Get()->GetPos();
|
|
} else {
|
|
if (target_distance <= meta->_buff_param3) {
|
|
owner->SetPos(caster_.Get()->GetPos());
|
|
owner->target_pos = caster_.Get()->GetPos();
|
|
} else {
|
|
glm::vec3 move_dir = owner->GetPos().CalcDir(caster_.Get()->GetPos());
|
|
GlmHelper::Normalize(move_dir);
|
|
owner->SetMoveDir(move_dir);
|
|
owner->target_pos = owner->GetPos();
|
|
owner->target_pos.AddGlmVec3(owner->GetMoveDir() * (target_distance - meta->_buff_param3));
|
|
}
|
|
}
|
|
} else {
|
|
GlmHelper::Normalize(caster_.Get()->skill_dir_);
|
|
owner->target_pos = caster_.Get()->GetPos();
|
|
owner->target_pos.AddGlmVec3(caster_.Get()->skill_dir_ * caster_.Get()->skill_distance_);
|
|
glm::vec3 move_dir = owner->GetPos().CalcDir(owner->target_pos);
|
|
GlmHelper::Normalize(move_dir);
|
|
owner->SetMoveDir(move_dir);
|
|
}
|
|
}
|
|
|
|
void BePullBuff::Deactivate()
|
|
{
|
|
|
|
}
|