Phase 1: 复合属性修饰器管线与伤害结算系统
This commit is contained in:
@@ -169,5 +169,89 @@ namespace VampireLike.Tests.Gameplay.EditMode
|
||||
stat.Config = new StatConfig(StatType.Dodge, hasMax: true, maxValue: 0.80f);
|
||||
Assert.AreEqual(0.80f, stat.Value, 1e-4f); // 自动标记脏并重新钳制
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void DamagePercentAndAttackSpeed_DefaultBaseValueIsOne_AndPercentAddScalesCorrectly()
|
||||
{
|
||||
// 验证 DamagePercent 配置初值为 1 时,+5% 增伤(PercentAdd = 0.05)正确求值为 1.05
|
||||
var damageConfig = new StatConfig(StatType.DamagePercent, defaultBaseValue: 1.0f);
|
||||
var damageStat = new CharacterStat(StatType.DamagePercent, config: damageConfig);
|
||||
Assert.AreEqual(1.0f, damageStat.Value, 1e-4f);
|
||||
|
||||
// 模拟“肌肉”+5% 伤害
|
||||
damageStat.AddModifier(new StatModifier(0.05f, ModifierType.PercentAdd));
|
||||
Assert.AreEqual(1.05f, damageStat.Value, 1e-4f);
|
||||
|
||||
// 模拟额外叠加 +10% 增伤
|
||||
damageStat.AddModifier(new StatModifier(0.10f, ModifierType.PercentAdd));
|
||||
Assert.AreEqual(1.15f, damageStat.Value, 1e-4f);
|
||||
|
||||
// 验证 AttackSpeed 配置初值为 1 时,+19% 攻速(PercentAdd = 0.19)正确求值为 1.19
|
||||
var speedConfig = new StatConfig(StatType.AttackSpeed, defaultBaseValue: 1.0f);
|
||||
var speedStat = new CharacterStat(StatType.AttackSpeed, config: speedConfig);
|
||||
Assert.AreEqual(1.0f, speedStat.Value, 1e-4f);
|
||||
|
||||
// 模拟“疾风手套”+19% 攻速
|
||||
speedStat.AddModifier(new StatModifier(0.19f, ModifierType.PercentAdd));
|
||||
Assert.AreEqual(1.19f, speedStat.Value, 1e-4f);
|
||||
|
||||
// 模拟叠加“鼻子”+5% 攻速
|
||||
speedStat.AddModifier(new StatModifier(0.05f, ModifierType.PercentAdd));
|
||||
Assert.AreEqual(1.24f, speedStat.Value, 1e-4f);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ItemDescUtility_FormatsDodgeCritPercentAndMoveSpeedCorrectly()
|
||||
{
|
||||
// 1. 闪避率(Dodge)Flat 修饰器以百分比展示: 0.1 -> +10%, 0.27 -> +27%
|
||||
var dodgeMod1 = new StatModifierConfig(StatType.Dodge, 0.1f, ModifierType.Flat);
|
||||
string dodgeDesc1 = SepCore.CustomUtility.ItemDescUtility.Describe(dodgeMod1);
|
||||
Assert.IsTrue(dodgeDesc1.Contains("+10%"), $"Expected +10% in: {dodgeDesc1}");
|
||||
|
||||
var dodgeMod2 = new StatModifierConfig(StatType.Dodge, 0.27f, ModifierType.Flat);
|
||||
string dodgeDesc2 = SepCore.CustomUtility.ItemDescUtility.Describe(dodgeMod2);
|
||||
Assert.IsTrue(dodgeDesc2.Contains("+27%"), $"Expected +27% in: {dodgeDesc2}");
|
||||
|
||||
// 2. 暴击率(CritChance)Flat 修饰器以百分比展示: 0.27 -> +27%, 0.05 -> +5%
|
||||
var critMod1 = new StatModifierConfig(StatType.CritChance, 0.27f, ModifierType.Flat);
|
||||
string critDesc1 = SepCore.CustomUtility.ItemDescUtility.Describe(critMod1);
|
||||
Assert.IsTrue(critDesc1.Contains("+27%"), $"Expected +27% in: {critDesc1}");
|
||||
|
||||
var critMod2 = new StatModifierConfig(StatType.CritChance, 0.05f, ModifierType.Flat);
|
||||
string critDesc2 = SepCore.CustomUtility.ItemDescUtility.Describe(critMod2);
|
||||
Assert.IsTrue(critDesc2.Contains("+5%"), $"Expected +5% in: {critDesc2}");
|
||||
|
||||
// 3. 移速(MoveSpeed)Flat 修饰器展示原小数: 0.8 -> +0.8
|
||||
var speedMod = new StatModifierConfig(StatType.MoveSpeed, 0.8f, ModifierType.Flat);
|
||||
string speedDesc = SepCore.CustomUtility.ItemDescUtility.Describe(speedMod);
|
||||
Assert.IsTrue(speedDesc.Contains("+0.8"), $"Expected +0.8 in: {speedDesc}");
|
||||
Assert.IsFalse(speedDesc.Contains("%"), $"Expected no % in: {speedDesc}");
|
||||
|
||||
// 4. 攻速(AttackSpeed)PercentAdd 修饰器以百分比展示: 0.19 -> +19%
|
||||
var atkSpeedMod = new StatModifierConfig(StatType.AttackSpeed, 0.19f, ModifierType.PercentAdd);
|
||||
string atkSpeedDesc = SepCore.CustomUtility.ItemDescUtility.Describe(atkSpeedMod);
|
||||
Assert.IsTrue(atkSpeedDesc.Contains("+19%"), $"Expected +19% in: {atkSpeedDesc}");
|
||||
|
||||
// 5. 伤害(DamagePercent)PercentAdd 修饰器以百分比展示: 0.05 -> +5%
|
||||
var dmgMod = new StatModifierConfig(StatType.DamagePercent, 0.05f, ModifierType.PercentAdd);
|
||||
string dmgDesc = SepCore.CustomUtility.ItemDescUtility.Describe(dmgMod);
|
||||
Assert.IsTrue(dmgDesc.Contains("+5%"), $"Expected +5% in: {dmgDesc}");
|
||||
|
||||
// 6. 近战伤害(MeleeDamage,非百分比属性)Flat 修饰器展示原数值: 12 -> +12,不带%
|
||||
var meleeFlatMod = new StatModifierConfig(StatType.MeleeDamage, 12f, ModifierType.Flat);
|
||||
string meleeFlatDesc = SepCore.CustomUtility.ItemDescUtility.Describe(meleeFlatMod);
|
||||
Assert.IsTrue(meleeFlatDesc.Contains("+12"), $"Expected +12 in: {meleeFlatDesc}");
|
||||
Assert.IsFalse(meleeFlatDesc.Contains("%"), $"Expected no % in: {meleeFlatDesc}");
|
||||
|
||||
// 7. 移速(MoveSpeed)若为 PercentAdd 修饰器,以百分比展示: 0.15 -> +15%
|
||||
var speedPercentMod = new StatModifierConfig(StatType.MoveSpeed, 0.15f, ModifierType.PercentAdd);
|
||||
string speedPercentDesc = SepCore.CustomUtility.ItemDescUtility.Describe(speedPercentMod);
|
||||
Assert.IsTrue(speedPercentDesc.Contains("+15%"), $"Expected +15% in: {speedPercentDesc}");
|
||||
|
||||
// 8. PercentMult 乘数修饰器以 x 表示: 1.25 -> x1.25
|
||||
var multMod = new StatModifierConfig(StatType.MaxHp, 1.25f, ModifierType.PercentMult);
|
||||
string multDesc = SepCore.CustomUtility.ItemDescUtility.Describe(multMod);
|
||||
Assert.IsTrue(multDesc.Contains("x1.25"), $"Expected x1.25 in: {multDesc}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user