aozhiwei 1e87d4adc1 1
2023-02-13 13:45:30 +08:00

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()
{
}