add context_dir

This commit is contained in:
aozhiwei 2021-07-20 05:46:33 +00:00
parent 5d5837abb2
commit 7d50b5df6f
6 changed files with 20 additions and 0 deletions

View File

@ -78,7 +78,9 @@ void Buff::ProcIntervalAddBuff()
void Buff::ProcBatchAddBuff()
{
std::shared_ptr<Ability> old_context_ability = owner->context_ability;
a8::Vec2 old_context_dir = owner->context_dir;
a8::Vec2 old_context_pos = owner->context_pos;
owner->context_dir = owner->GetAttackDir()();
owner->context_pos = owner->GetPos();
for (auto& tuple : meta->batch_add_list) {
@ -112,6 +114,7 @@ void Buff::ProcBatchAddBuff()
}
}
owner->context_dir = old_context_dir;
owner->context_pos = old_context_pos;
owner->context_ability = old_context_ability;
}
@ -128,7 +131,9 @@ void Buff::InternalTimerAddBuff()
SkillCasterState* caster_state = (SkillCasterState*)param.param1.GetUserData();
if (caster_state->caster.Get()) {
std::shared_ptr<Ability> old_context_ability = receiver->context_ability;
a8::Vec2 old_context_dir = receiver->context_dir;
a8::Vec2 old_context_pos = receiver->context_pos;
receiver->context_dir = receiver->GetAttackDir();
receiver->context_pos = receiver->GetPos();
int buff_id = param.param2;
@ -142,6 +147,7 @@ void Buff::InternalTimerAddBuff()
caster_state->caster.Get()->RecoverSkillCasterState(&old_caster_state);
}
receiver->context_dir = old_context_dir;
receiver->context_pos = old_context_pos;
receiver->context_ability = old_context_ability;
}

View File

@ -531,7 +531,9 @@ void Bullet::AddGunBuff()
{
if (sender.Get()) {
std::shared_ptr<Ability> old_context_ability = sender.Get()->context_ability;
a8::Vec2 old_context_dir = sender.Get()->context_dir;
a8::Vec2 old_context_pos = sender.Get()->context_pos;
sender.Get()->context_dir = dir;
sender.Get()->context_pos = GetPos();
if (IsCurrWeapon()) {
sender.Get()->context_ability = ability_;
@ -545,6 +547,7 @@ void Bullet::AddGunBuff()
1
);
}
sender.Get()->context_dir = old_context_dir;
sender.Get()->context_pos = old_context_pos;
sender.Get()->context_ability = old_context_ability;
}

View File

@ -102,7 +102,9 @@ void InternalShot(Creature* c,
{
if (weapon_meta->i->_inventory_slot() == IS_TRAP ||
weapon_meta->i->_inventory_slot() == IS_MINE) {
a8::Vec2 old_context_dir = c->context_dir;
a8::Vec2 old_context_pos = c->context_pos;
c->context_dir =c->GetAttackDir();
c->context_pos = c->GetPos() + c->GetAttackDir() * fly_distance;
MetaData::Buff * buff_meta = MetaMgr::Instance()->GetBuff(bullet_meta->i->buffid());
if (buff_meta) {
@ -111,6 +113,7 @@ void InternalShot(Creature* c,
1
);
}
c->context_dir = old_context_dir;
c->context_pos = old_context_pos;
return;
}
@ -747,6 +750,7 @@ void Creature::DoSkill(int skill_id,
skill_distance_ = skill_distance;
curr_skill_ = skill;
playing_skill = true;
context_dir = skill_dir_;
context_pos = GetPos() + skill_dir_ * skill_distance_;
CurrentSkill()->last_use_frameno = room->GetFrameNo();
if (CurrentSkill()->meta->i->skill_target() == kST_Self

View File

@ -69,6 +69,7 @@ class Creature : public MoveableEntity
Weapon second_weapon;
a8::Vec2 context_pos;
a8::Vec2 context_dir;
std::shared_ptr<Ability> context_ability;
bool need_sync_active_player = false;

View File

@ -764,12 +764,15 @@ std::tuple<long long, a8::Vec2>* Obstacle::GetInteractionData(Human* sender)
void Obstacle::AddObstacleBuff(Creature* c)
{
a8::Vec2 old_context_dir = c->context_dir;
a8::Vec2 old_context_pos = c->context_pos;
c->context_dir = c->GetAttackDir();
c->context_pos = c->GetPos();
for (int buff_id : meta->buff_list) {
c->TryAddBuff(c, buff_id);
}
c->context_pos = old_context_pos;
c->context_dir = old_context_dir;
}
void Obstacle::ClearObstacleBuff(Creature* c)

View File

@ -219,7 +219,9 @@ void Trigger::TraverseCondBuffs(int cond, std::function<void (Buff*, bool&)> fun
void Trigger::TriggeCondBuffAll(int cond)
{
std::shared_ptr<Ability> old_context_ability = owner_->context_ability;
a8::Vec2 old_context_dir = owner_->context_dir;
a8::Vec2 old_context_pos = owner_->context_pos;
owner_->context_dir = owner_->GetAttackDir();
owner_->context_pos = owner_->GetPos();
TraverseCondBuffs
(cond,
@ -227,6 +229,7 @@ void Trigger::TriggeCondBuffAll(int cond)
{
AddBuffs(cond, buff->meta->param4_int_list);
});
owner_->context_dir = old_context_dir;
owner_->context_pos = old_context_pos;
owner_->context_ability = old_context_ability;
}