48 lines
1.6 KiB
C#
48 lines
1.6 KiB
C#
using Cielonos.MainGame.Characters;
|
|
using UnityEngine;
|
|
|
|
namespace Cielonos.MainGame.Inventory.Collections
|
|
{
|
|
/// <summary>
|
|
/// 量子护盾发生器 / Quantum Shield Generator
|
|
/// 每次首次进入新区域时,将护盾补至 ShieldRecover 下限。
|
|
/// Shield 可超量累积,无上限。
|
|
/// </summary>
|
|
public class QuantumShieldGenerator : PassiveEquipmentBase
|
|
{
|
|
private const string ItemAttrShieldRecover = "ShieldRecover";
|
|
|
|
public override void OnObtained()
|
|
{
|
|
base.OnObtained();
|
|
RunManager.Instance.OnZoneEntered += OnZoneEntered;
|
|
}
|
|
|
|
public override void OnDiscarded()
|
|
{
|
|
RunManager.Instance.OnZoneEntered -= OnZoneEntered;
|
|
base.OnDiscarded();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 玩家进入区域时触发。
|
|
/// 仅首次进入该区域时将护盾补至 ShieldRecover 下限。
|
|
/// </summary>
|
|
private void OnZoneEntered(ZoneEntryContext context)
|
|
{
|
|
if (!context.isFirstVisit) return;
|
|
|
|
float shieldRecover = passiveAttributeSm.GetItemAttribute(ItemAttrShieldRecover);
|
|
if (shieldRecover <= 0f) return;
|
|
|
|
float currentShield = player.attributeSm[CharacterAttribute.Shield];
|
|
if (currentShield < shieldRecover)
|
|
{
|
|
int addValue = Mathf.RoundToInt(shieldRecover - currentShield);
|
|
player.attributeSm[CharacterAttribute.Shield] = shieldRecover;
|
|
MainGameBaseCollection.Instance.InfoText()?.Spawn(player.centerPosition, "+" + addValue);
|
|
}
|
|
}
|
|
}
|
|
}
|