1
This commit is contained in:
parent
3a41ec1f53
commit
bee91b360a
@ -273,6 +273,12 @@ void CallFuncBuff::Activate()
|
||||
ShowExplosion();
|
||||
}
|
||||
break;
|
||||
case BuffCallFunc_e::kAddArmorShield:
|
||||
{
|
||||
hold_param2_ = meta->GetBuffParam2(this);
|
||||
AddArmorShield();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
@ -323,6 +329,14 @@ void CallFuncBuff::Deactivate()
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BuffCallFunc_e::kAddArmorShield:
|
||||
{
|
||||
float dur_time = meta->GetBuffParam3(this);
|
||||
if (dur_time > 0.00001f) {
|
||||
owner->ClearArmorShield();
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
{
|
||||
}
|
||||
@ -1860,3 +1874,50 @@ void CallFuncBuff::ShowExplosion()
|
||||
explosion_effect,
|
||||
0);
|
||||
}
|
||||
|
||||
void CallFuncBuff::AddArmorShield()
|
||||
{
|
||||
if (!owner->dead && !owner->downed) {
|
||||
float dur_time = meta->GetBuffParam3(this);
|
||||
if (dur_time < 0.00001f) {
|
||||
dur_time = 99999999;
|
||||
}
|
||||
if (owner->armor_shield > 0) {
|
||||
is_valid_ = false;
|
||||
#if 0
|
||||
owner->GetTrigger()->UpdateArmorShield(hold_param2_, dur_time);
|
||||
#endif
|
||||
} else {
|
||||
owner->AddArmorShield(hold_param2_);
|
||||
#if 0
|
||||
event_handlers_.push_back(owner->GetTrigger()->AddListener
|
||||
(
|
||||
kUpdateArmorShieldEvent,
|
||||
[this] (const a8::Args& args) mutable
|
||||
{
|
||||
int value = args.Get<int>(0);
|
||||
int new_time = args.Get<int>(1);
|
||||
owner->AddArmorShield(value);
|
||||
}));
|
||||
event_handlers_.push_back(owner->GetTrigger()->AddListener
|
||||
(
|
||||
kDestoryArmorShieldEvent,
|
||||
[this] (const a8::Args& args) mutable
|
||||
{
|
||||
owner->RemoveBuffByUniId(buff_uniid);
|
||||
}));
|
||||
#endif
|
||||
owner->room->xtimer.SetTimeoutWpEx
|
||||
(
|
||||
dur_time / FRAME_RATE_MS,
|
||||
[owner = owner, buff_uniid = buff_uniid] (int event, const a8::Args* args) mutable
|
||||
{
|
||||
if (a8::TIMER_DELETE_EVENT == event) {
|
||||
owner->ClearArmorShield();
|
||||
owner->RemoveBuffByUniId(buff_uniid);
|
||||
}
|
||||
},
|
||||
&owner->xtimer_attacher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -45,9 +45,9 @@ A8_DECLARE_CLASS_ENUM(BuffCallFunc_e, int,
|
||||
kBuffEffectCondAdd = 45,
|
||||
kRandAdd = 46,
|
||||
kShowExplosion = 47,
|
||||
kAddArmorShield = 48,
|
||||
);
|
||||
|
||||
|
||||
class CallFuncBuff : public Buff
|
||||
{
|
||||
public:
|
||||
@ -90,6 +90,7 @@ class CallFuncBuff : public Buff
|
||||
void BuffEffectCondAdd();
|
||||
void RandAdd();
|
||||
void ShowExplosion();
|
||||
void AddArmorShield();
|
||||
|
||||
void InternalRangeHoldBuff(std::function<bool(glm::vec3&)> get_center_func);
|
||||
|
||||
|
@ -3079,6 +3079,32 @@ void Creature::ClearEnergyShield()
|
||||
false);
|
||||
}
|
||||
|
||||
void Creature::AddArmorShield(int value)
|
||||
{
|
||||
armor_shield = value;
|
||||
max_armor_shield = value;
|
||||
room->frame_event.AddPropChg
|
||||
(
|
||||
GetWeakPtrRef(),
|
||||
kPropArmorShield,
|
||||
armor_shield,
|
||||
max_armor_shield,
|
||||
true);
|
||||
}
|
||||
|
||||
void Creature::ClearArmorShield()
|
||||
{
|
||||
armor_shield = 0;
|
||||
max_armor_shield = 0;
|
||||
room->frame_event.AddPropChg
|
||||
(
|
||||
GetWeakPtrRef(),
|
||||
kPropArmorShield,
|
||||
armor_shield,
|
||||
max_armor_shield,
|
||||
true);
|
||||
}
|
||||
|
||||
std::weak_ptr<Effect> Creature::AddEffect(int effect_id)
|
||||
{
|
||||
auto effect = std::make_shared<Effect>();
|
||||
|
@ -268,6 +268,9 @@ class Creature : public MoveableEntity
|
||||
void AddEnergyShield(int value);
|
||||
void ClearEnergyShield();
|
||||
|
||||
void AddArmorShield(int value);
|
||||
void ClearArmorShield();
|
||||
|
||||
void StartAction(ActionType_e action_type,
|
||||
int action_duration,
|
||||
int item_id,
|
||||
|
Loading…
x
Reference in New Issue
Block a user