acdream/tests/AcDream.Core.Tests/Player/PlayerSkillMathTests.cs

78 lines
2.6 KiB
C#

using AcDream.Core.Items;
using AcDream.Core.Player;
using AcDream.Core.Properties;
using AcDream.Core.Spells;
namespace AcDream.Core.Tests.Player;
public sealed class PlayerSkillMathTests
{
[Fact]
public void Calculate_PreservesRetailAugmentationOrdering()
{
var augmentations = new PlayerSkillMath.AugmentationBonuses(
AllSkills: 3,
JackOfAllTrades: true,
SkilledSpecialized: 4,
SkilledMelee: false,
SkilledMissile: false,
SkilledMagic: true);
PlayerSkillMath.Value value = PlayerSkillMath.Calculate(
intrinsicLevel: 100,
skillId: 0x1Fu,
advancementClass: 3u,
augmentations,
enchantment: new EnchantmentMath.VitalMod(0.5f, 0f),
vitaeMultiplier: 0.8f);
Assert.Equal(113, value.UnenchantedLevel); // 100 + all 3 + magic 10
Assert.Equal(69, value.EffectiveLevel); // trunc(113 * .5) + JOAT 5 + spec 8
Assert.Equal(-23, value.VitaeModifier); // trunc(113 * .8) - 113
}
[Theory]
[InlineData(0x29u, true, false, false, 10)]
[InlineData(0x2Fu, false, true, false, 10)]
[InlineData(0x22u, false, false, true, 10)]
[InlineData(0x18u, true, true, true, 0)]
public void BeforeEnchantments_UsesRetailSkillCategorySwitch(
uint skillId,
bool melee,
bool missile,
bool magic,
int expectedCategoryBonus)
{
var augmentations = new PlayerSkillMath.AugmentationBonuses(
AllSkills: 2,
JackOfAllTrades: false,
SkilledSpecialized: 0,
SkilledMelee: melee,
SkilledMissile: missile,
SkilledMagic: magic);
Assert.Equal(
2 + expectedCategoryBonus,
augmentations.BeforeEnchantments(skillId));
}
[Fact]
public void FromProperties_MapsNamedRetailQualities()
{
var properties = new PropertyBundle();
properties.Ints[(uint)PropertyInt.LumAugAllSkills] = 7;
properties.Ints[(uint)PropertyInt.AugmentationJackOfAllTrades] = 1;
properties.Ints[(uint)PropertyInt.LumAugSkilledSpec] = 3;
properties.Ints[(uint)PropertyInt.AugmentationSkilledMissile] = 2;
PlayerSkillMath.AugmentationBonuses value =
PlayerSkillMath.AugmentationBonuses.FromProperties(properties);
Assert.Equal(7, value.AllSkills);
Assert.True(value.JackOfAllTrades);
Assert.Equal(3, value.SkilledSpecialized);
Assert.True(value.SkilledMissile);
Assert.False(value.SkilledMelee);
Assert.False(value.SkilledMagic);
}
}