Files
SoulliesOfficial 649b7a5ddc 更新
2026-05-23 08:27:50 -04:00

68 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System;
using Cielonos.MainGame.Characters;
using SLSUtilities.General;
using UnityEngine;
namespace Cielonos.MainGame.Inventory.Collections
{
/// <summary>
/// 过载电池 / Overload Battery
/// 过载完成时,下一次【突破等级:重】攻击造成的伤害增加 50%。
/// </summary>
public class OverloadBattery : PassiveEquipmentBase
{
private bool _isBuffActive = false;
public override void OnObtained()
{
// 直接订阅由 OverloadSubmodule 抛出的满溢满充爆气事件
if (overloadSm != null)
{
overloadSm.OnTriggered += TriggerOverloadEffect;
}
}
public void TriggerOverloadEffect()
{
// 挂载增伤 Buff
_isBuffActive = true;
// 为下一次攻击进行截流修饰(利用上一个阶段优化提升完毕的 EventSubmodule 架构)
Action<AttackAreaBase, CharacterBase, Attack.Context> onStartAttack = OnStartAttack;
if (!player.eventSm.onStartAttack.ContainsKey("OverloadBattery"))
{
player.eventSm.onStartAttack.Add("OverloadBattery", onStartAttack.ToPrioritized());
MainGameManager.BaseCollection.InfoText().Spawn(player.centerPosition, "Overload Battery Boost").SetScale(0.5f);
}
}
private void OnStartAttack(AttackAreaBase attackArea, CharacterBase target, Attack.Context attackContext)
{
if (!_isBuffActive) return;
// 拦截检查必须是重突破等级BreakthroughType.Heavy
// 如果不是重攻击,我们就避让不进行任何修饰,且不消耗掉 Buff 的开启状态
if (attackContext.value.breakthroughType != Breakthrough.Type.Heavy) return;
// 最终伤害提升 50%。上个方案中我们留下了 damageMultiplier天然完美支持翻倍操作。
attackContext.value.damageMultiplier += 0.5f;
_isBuffActive = false;
// "一次性"触发,修饰完毕后从玩家的攻击起手事件池里销毁自身,不沾染下一次无关的攻击。
player.eventSm.onStartAttack.Remove("OverloadBattery");
}
public override void OnDiscarded()
{
base.OnDiscarded();
player.eventSm.onStartAttack.Remove("OverloadBattery");
if (overloadSm != null)
{
overloadSm.OnTriggered -= TriggerOverloadEffect;
}
}
}
}