This commit is contained in:
aozhiwei 2022-09-26 15:20:39 +08:00
parent 162ec0a5ca
commit 4d2995935d
2 changed files with 30 additions and 28 deletions

View File

@ -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);
}
}

View File

@ -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();