1
This commit is contained in:
parent
162ec0a5ca
commit
4d2995935d
@ -76,34 +76,7 @@ void Bullet::OnHit(std::set<Entity*>& objects)
|
||||
if (gun_meta->i->equip_subtype() == GUN_SUB_EQUIP_TYPE_FLY_HOOk) {
|
||||
if (sender.Get() && !sender.Get()->dead) {
|
||||
for (auto& target : objects) {
|
||||
float distance = sender.Get()->GetPos().Distance(GetPos());
|
||||
if (distance > 0.001f) {
|
||||
a8::Vec2 new_dir = GetPos() - sender.Get()->GetPos();
|
||||
new_dir.Normalize();
|
||||
if (target->IsCreature(room)) {
|
||||
Creature* c = (Creature*)target;
|
||||
a8::Vec2 old_dir = c->GetMoveDir();
|
||||
new_dir.x = -new_dir.x;
|
||||
new_dir.y = -new_dir.y;
|
||||
c->SetMoveDir(new_dir);
|
||||
c->_UpdateMove(distance);
|
||||
c->SetMoveDir(old_dir);
|
||||
room->frame_event.AddPropChg(c->GetWeakPtrRef(), kPropBeHook, 0, sender.Get()->GetUniId());
|
||||
} else {
|
||||
a8::Vec2 old_dir = sender.Get()->GetMoveDir();
|
||||
sender.Get()->SetMoveDir(new_dir);
|
||||
sender.Get()->_UpdateMove(distance);
|
||||
sender.Get()->SetMoveDir(old_dir);
|
||||
#ifdef DEBUG
|
||||
a8::XPrintf("new_dir:%f,%f distance:%d\n",
|
||||
{
|
||||
new_dir.x,
|
||||
new_dir.y,
|
||||
distance
|
||||
});
|
||||
#endif
|
||||
}
|
||||
}
|
||||
ProcFlyHook(target);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -798,3 +771,31 @@ void Bullet::ClearBuffList()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void Bullet::ProcFlyHook(Entity* target)
|
||||
{
|
||||
float distance = sender.Get()->GetPos().Distance(GetPos());
|
||||
if (distance < 0.001f) {
|
||||
return;
|
||||
}
|
||||
|
||||
a8::Vec2 new_dir = GetPos() - sender.Get()->GetPos();
|
||||
new_dir.Normalize();
|
||||
if (target->IsCreature(room)) {
|
||||
Creature* c = (Creature*)target;
|
||||
a8::Vec2 old_dir = c->GetMoveDir();
|
||||
new_dir.x = -new_dir.x;
|
||||
new_dir.y = -new_dir.y;
|
||||
c->SetMoveDir(new_dir);
|
||||
c->_UpdateMove(distance);
|
||||
c->SetMoveDir(old_dir);
|
||||
room->frame_event.AddPropChg(c->GetWeakPtrRef(), kPropBeHook, 0, sender.Get()->GetUniId());
|
||||
} else {
|
||||
a8::Vec2 old_dir = sender.Get()->GetMoveDir();
|
||||
sender.Get()->SetMoveDir(new_dir);
|
||||
sender.Get()->_UpdateMove(distance);
|
||||
sender.Get()->SetMoveDir(old_dir);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -58,6 +58,7 @@ protected:
|
||||
void ProcSignalGunBomb(int delay_time);
|
||||
void ProcShieldWallBomb(int delay_time);
|
||||
void ProcOilBucketBomb(int delay_time);
|
||||
void ProcFlyHook(Entity* target);
|
||||
inline void MapServiceUpdate();
|
||||
void Check(float distance);
|
||||
void AddGunBuff();
|
||||
|
Loading…
x
Reference in New Issue
Block a user