This commit is contained in:
aozhiwei 2023-04-12 14:12:25 +08:00
parent 2594ab3610
commit deb8ec286d
4 changed files with 41 additions and 2 deletions

View File

@ -190,6 +190,11 @@ void CallFuncBuff::Deactivate()
owner->GetCurrWeapon()->buff_id = 0; owner->GetCurrWeapon()->buff_id = 0;
} }
break; break;
case BuffCallFunc_e::kAddEnergyShield:
{
owner->ClearEnergyShield();
}
break;
default: default:
{ {
} }
@ -333,7 +338,26 @@ void CallFuncBuff::ProcFlashMove()
void CallFuncBuff::ProcAddEnergyShield() void CallFuncBuff::ProcAddEnergyShield()
{ {
owner->AddEnergyShield(hold_param2_); if (!owner->dead && !owner->downed) {
if (owner->energy_shield > 0) {
is_valid_ = false;
owner->GetTrigger()->UpdateEnergyShield(hold_param2_, meta->GetDurationTime(this) * FRAME_RATE_MS);
} else {
owner->AddEnergyShield(hold_param2_);
event_handlers_.push_back(owner->GetTrigger()->AddListener
(
kUpdateEnergyShieldEvent,
[this] (const a8::Args& args) mutable
{
}));
event_handlers_.push_back(owner->GetTrigger()->AddListener
(
kDestoryEnergyShieldEvent,
[this] (const a8::Args& args) mutable
{
}));
}
}
} }
void CallFuncBuff::ProcAddHp() void CallFuncBuff::ProcAddHp()

View File

@ -261,6 +261,7 @@ void Human::DecHP(float dec_hp, int killer_id, const std::string killer_name, in
energy_shield, energy_shield,
max_energy_shield, max_energy_shield,
true); true);
GetTrigger()->ReceiveDmg();
} else { } else {
float old_health = GetHP(); float old_health = GetHP();
float new_health = std::max(0.0f, GetHP() - dec_hp); float new_health = std::max(0.0f, GetHP() - dec_hp);

View File

@ -574,3 +574,13 @@ void Trigger::EndReload()
{ {
DispatchEvent(kEndReloadEvent, {}); DispatchEvent(kEndReloadEvent, {});
} }
void Trigger::UpdateEnergyShield(int value, int new_time)
{
DispatchEvent(kUpdateEnergyShieldEvent, {value, new_time});
}
void Trigger::DestoryEnergyShield()
{
DispatchEvent(kDestoryEnergyShieldEvent, {});
}

View File

@ -46,7 +46,9 @@ enum EventId_e
kAttackTargetEvent, kAttackTargetEvent,
kStartReloadEvent, kStartReloadEvent,
kEndReloadEvent, kEndReloadEvent,
kDownedEvent kDownedEvent,
kUpdateEnergyShieldEvent,
kDestoryEnergyShieldEvent
}; };
class Weapon; class Weapon;
@ -92,6 +94,8 @@ public:
void Downed(); void Downed();
void StartReload(); void StartReload();
void EndReload(); void EndReload();
void UpdateEnergyShield(int value, int new_time);
void DestoryEnergyShield();
std::weak_ptr<EventHandlerPtr> AddListener(int event_id, a8::CommonCbProc cb); std::weak_ptr<EventHandlerPtr> AddListener(int event_id, a8::CommonCbProc cb);
void RemoveEventHandler(std::weak_ptr<EventHandlerPtr> handler_ptr); void RemoveEventHandler(std::weak_ptr<EventHandlerPtr> handler_ptr);