2026-06-12 17:11:39 -04:00
|
|
|
|
using Cielonos.MainGame.Characters;
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
|
|
namespace Cielonos.MainGame.Inventory.Collections
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// 激情系统配套被动装备
|
|
|
|
|
|
/// - 提供与激情系统等级相关的属性加成。
|
|
|
|
|
|
/// - 加成效果根据激情等级逐级递增,最高可达 SSS 级别。
|
|
|
|
|
|
/// 具体效果如下:
|
2026-06-27 12:52:03 -04:00
|
|
|
|
/// - C级:+4 能量回复,+0 攻击获得能量,0% 攻击速度,0% 暴击率,0% 受到的最终伤害倍率
|
|
|
|
|
|
/// - B级:+2 能量回复,+0 攻击获得能量,1% 攻击速度,2% 暴击率,0% 受到的最终伤害倍率
|
|
|
|
|
|
/// - A级:+1 能量回复,+0 攻击获得能量,2% 攻击速度,4% 暴击率,0% 受到的最终伤害倍率
|
|
|
|
|
|
/// - S级:+0 能量回复,+1 攻击获得能量,3% 攻击速度,6% 暴击率,5% 受到的最终伤害倍率
|
|
|
|
|
|
/// - SS级:+0 能量回复,+1 攻击获得能量,4% 攻击速度,8% 暴击率,10% 受到的最终伤害倍率
|
|
|
|
|
|
/// - SSS级:+0 能量回复,+1 攻击获得能量,5% 攻击速度,10% 暴击率,20% 受到的最终伤害倍率
|
2026-06-12 17:11:39 -04:00
|
|
|
|
/// </summary>
|
|
|
|
|
|
public partial class Passion : PassiveEquipmentBase
|
|
|
|
|
|
{
|
|
|
|
|
|
private PassionSystem _passionSystem;
|
|
|
|
|
|
|
|
|
|
|
|
private int PassionLevel => _passionSystem.LevelIndex;
|
|
|
|
|
|
|
|
|
|
|
|
public override void Initialize()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.Initialize();
|
|
|
|
|
|
_passionSystem = CombatManager.GetCombatSystem<PassionSystem>();
|
|
|
|
|
|
passiveAttributeSm = new AttributeSubmodule(this, passiveAttributeData);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void OnObtained()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnObtained();
|
|
|
|
|
|
_passionSystem.OnLevelChanged += Refresh;
|
|
|
|
|
|
UpdateAttributes();
|
|
|
|
|
|
passiveAttributeSm.RefreshAllModifiedAttributes();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public override void OnDiscarded()
|
|
|
|
|
|
{
|
|
|
|
|
|
base.OnDiscarded();
|
|
|
|
|
|
_passionSystem.OnLevelChanged -= Refresh;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void Refresh(int oldLevel, int newLevel)
|
|
|
|
|
|
{
|
|
|
|
|
|
UpdateAttributes();
|
|
|
|
|
|
passiveAttributeSm.RefreshAllModifiedAttributes();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private void UpdateAttributes()
|
|
|
|
|
|
{
|
|
|
|
|
|
passiveAttributeSm.charAttrNumericChange[CharacterAttribute.EnergyRegeneration] = GetEnergyRegen();
|
|
|
|
|
|
passiveAttributeSm.chaAttrPercentageChangeOfAccumulation[CharacterAttribute.AttackSpeed] = GetAttackSpeed();
|
2026-06-27 12:52:03 -04:00
|
|
|
|
passiveAttributeSm.charAttrNumericChange[CharacterAttribute.CriticalAttackChance] = GetCriticalAttackChance();
|
2026-06-12 17:11:39 -04:00
|
|
|
|
passiveAttributeSm.chaAttrPercentageChangeOfMultiplication[CharacterAttribute.FinalDamageReceivedMultiplier] = GetFinalDamageReceivedMultiplier();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public partial class Passion
|
|
|
|
|
|
{
|
|
|
|
|
|
private float GetEnergyRegen()
|
|
|
|
|
|
{
|
|
|
|
|
|
return PassionLevel switch
|
|
|
|
|
|
{
|
2026-06-27 12:52:03 -04:00
|
|
|
|
0 => 4.0f, // C-Rank
|
|
|
|
|
|
1 => 2.0f, // B-Rank
|
|
|
|
|
|
2 => 1.0f, // A-Rank
|
|
|
|
|
|
_ => 0.0f // S, SS, SSS (Ranks 3, 4, 5)
|
2026-06-12 17:11:39 -04:00
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private float GetEnergyGainByAttack()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (PassionLevel < 3) return 0f; // C, B, A ranks have no extra energy gain
|
|
|
|
|
|
return 1f; // S, SS, SSS ranks provide +1 energy gain on attack
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private float GetAttackSpeed()
|
|
|
|
|
|
{
|
|
|
|
|
|
return PassionLevel * 0.01f;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-27 12:52:03 -04:00
|
|
|
|
private float GetCriticalAttackChance()
|
2026-06-12 17:11:39 -04:00
|
|
|
|
{
|
|
|
|
|
|
return PassionLevel * 0.02f;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private float GetFinalDamageReceivedMultiplier()
|
|
|
|
|
|
{
|
|
|
|
|
|
return PassionLevel switch
|
|
|
|
|
|
{
|
|
|
|
|
|
3 => 1.05f, // S-Rank (LevelIndex 3)
|
|
|
|
|
|
4 => 1.10f, // SS-Rank (LevelIndex 4)
|
|
|
|
|
|
5 => 1.20f, // SSS-Rank (LevelIndex 5)
|
|
|
|
|
|
_ => 1.00f // C, B, A-Ranks (0, 1, 2)
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|