添加 ShopForm 下的 StatForm,展示玩家属性

This commit is contained in:
2026-09-25 00:03:39 +08:00
parent c61eb7fb68
commit 051c075183
29 changed files with 6574 additions and 51 deletions
@@ -0,0 +1,73 @@
using NUnit.Framework;
using SepCore.Definition;
using SepCore.UI;
namespace VampireLike.Tests.Gameplay.EditMode
{
[TestFixture]
public class StatPresentationTests
{
[Test]
public void StatRawData_StoresAndRetrievesValues()
{
var rawData = new StatRawData();
rawData.SetValue(StatType.MaxHp, 150f);
rawData[StatType.MeleeDamage] = 12f;
Assert.AreEqual(150f, rawData.GetValue(StatType.MaxHp));
Assert.AreEqual(12f, rawData[StatType.MeleeDamage]);
Assert.AreEqual(0f, rawData.GetValue(StatType.Armor));
}
[Test]
public void StatContext_FormatsDamagePercentAndAttackSpeedAsBonus()
{
var rawData = new StatRawData();
rawData.SetValue(StatType.DamagePercent, 1.05f);
rawData.SetValue(StatType.AttackSpeed, 1.19f);
var context = new StatContext(rawData);
string damageStr = context.GetFormattedValue(StatType.DamagePercent);
string attackSpeedStr = context.GetFormattedValue(StatType.AttackSpeed);
Assert.IsTrue(damageStr.Contains("+5%"), $"Expected '+5%' in '{damageStr}'");
Assert.IsTrue(attackSpeedStr.Contains("+19%"), $"Expected '+19%' in '{attackSpeedStr}'");
}
[Test]
public void StatContext_FormatsProbabilityStatsAsPercent()
{
var rawData = new StatRawData();
rawData.SetValue(StatType.CritChance, 0.25f);
rawData.SetValue(StatType.Dodge, 0.15f);
rawData.SetValue(StatType.LifeSteal, 0.05f);
var context = new StatContext(rawData);
string critStr = context.GetFormattedValue(StatType.CritChance);
string dodgeStr = context.GetFormattedValue(StatType.Dodge);
string lifeStealStr = context.GetFormattedValue(StatType.LifeSteal);
Assert.IsTrue(critStr.Contains("25%"), $"Expected '25%' in '{critStr}'");
Assert.IsTrue(dodgeStr.Contains("15%"), $"Expected '15%' in '{dodgeStr}'");
Assert.IsTrue(lifeStealStr.Contains("5%"), $"Expected '5%' in '{lifeStealStr}'");
}
[Test]
public void StatContext_FormatsScalarStatsAccurately()
{
var rawData = new StatRawData();
rawData.SetValue(StatType.MaxHp, 120f);
rawData.SetValue(StatType.Armor, 8f);
var context = new StatContext(rawData);
string hpStr = context.GetFormattedValue(StatType.MaxHp);
string armorStr = context.GetFormattedValue(StatType.Armor);
Assert.IsTrue(hpStr.Contains("120"), $"Expected '120' in '{hpStr}'");
Assert.IsTrue(armorStr.Contains("8"), $"Expected '8' in '{armorStr}'");
}
}
}