refactor the skill system to adhere to the lore handbook
This commit is contained in:
@@ -14,6 +14,26 @@ namespace NightclubArcadia.Skills.Tests
|
||||
public int Roll(int sides) => _value;
|
||||
}
|
||||
|
||||
static SkillBibleEntry Entry(string id, string display, int rank)
|
||||
{
|
||||
return new SkillBibleEntry
|
||||
{
|
||||
id = id,
|
||||
displayName = display,
|
||||
axis = "Social",
|
||||
domain = string.Empty,
|
||||
notes = string.Empty,
|
||||
targetFiringsPerHour = 5f,
|
||||
opposedTo = string.Empty,
|
||||
alliedWith = System.Array.Empty<string>(),
|
||||
primaryChannel = "Testimonial",
|
||||
secondaryChannel = "None",
|
||||
clueYield = "Low",
|
||||
startingRank = rank,
|
||||
accentColor = Color.white,
|
||||
};
|
||||
}
|
||||
|
||||
SkillDatabase CreateDatabase(params (string id, string display, int rank)[] skills)
|
||||
{
|
||||
var db = ScriptableObject.CreateInstance<SkillDatabase>();
|
||||
@@ -21,7 +41,7 @@ namespace NightclubArcadia.Skills.Tests
|
||||
foreach (var (id, display, rank) in skills)
|
||||
{
|
||||
var def = ScriptableObject.CreateInstance<SkillDefinition>();
|
||||
def.EditorSet(id, display, SkillDomain.Presence, string.Empty, rank, Color.white);
|
||||
def.EditorSet(Entry(id, display, rank));
|
||||
list.Add(def);
|
||||
}
|
||||
|
||||
@@ -32,12 +52,12 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_SumsModifiers_AndSucceedsWhenTotalMeetsDc()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 2));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 2));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(10));
|
||||
|
||||
var result = system.Resolve("persuasion", 12, 1);
|
||||
var result = system.Resolve("placement", 12, 1);
|
||||
|
||||
Assert.AreEqual(13, result.Total);
|
||||
Assert.IsTrue(result.Success);
|
||||
@@ -50,12 +70,12 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_NaturalOne_IsCriticalFailureEvenIfModifiersWouldPass()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 10));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 10));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(1));
|
||||
|
||||
var result = system.Resolve("persuasion", 5, 5);
|
||||
var result = system.Resolve("placement", 5, 5);
|
||||
|
||||
Assert.IsFalse(result.Success);
|
||||
Assert.AreEqual(SkillCheckDegree.CriticalFailure, result.Degree);
|
||||
@@ -64,12 +84,12 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_NaturalTwenty_IsCriticalSuccessEvenIfBelowDc()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 0));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 0));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(20));
|
||||
|
||||
var result = system.Resolve("persuasion", 25, 0);
|
||||
var result = system.Resolve("placement", 25, 0);
|
||||
|
||||
Assert.IsTrue(result.Success);
|
||||
Assert.AreEqual(SkillCheckDegree.CriticalSuccess, result.Degree);
|
||||
@@ -78,12 +98,12 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_ExactDc_IsSuccess()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 1));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 1));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(10));
|
||||
|
||||
var result = system.Resolve("persuasion", 11, 0);
|
||||
var result = system.Resolve("placement", 11, 0);
|
||||
|
||||
Assert.AreEqual(11, result.Total);
|
||||
Assert.IsTrue(result.Success);
|
||||
@@ -92,14 +112,14 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_AppliesNegativeAndWildcardStateModifiers()
|
||||
{
|
||||
var db = CreateDatabase(("reflexes", "Reflexes", 1));
|
||||
var db = CreateDatabase(("long_shift", "THE LONG SHIFT", 1));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
state.Set("drunk", "reflexes", -2);
|
||||
state.Set("drunk", "long_shift", -2);
|
||||
state.Set("crowd", "*", -1);
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(10));
|
||||
|
||||
var result = system.Resolve("reflexes", 5, 0);
|
||||
var result = system.Resolve("long_shift", 5, 0);
|
||||
|
||||
Assert.AreEqual(-3, result.StateMod);
|
||||
Assert.AreEqual(8, result.Total);
|
||||
@@ -108,7 +128,7 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_UnknownSkill_DoesNotThrow_AndUsesZeroRank()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 3));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 3));
|
||||
var skills = new PlayerSkills(db);
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(10));
|
||||
@@ -122,15 +142,15 @@ namespace NightclubArcadia.Skills.Tests
|
||||
[Test]
|
||||
public void Resolve_DoesNotMutatePlayerSkills()
|
||||
{
|
||||
var db = CreateDatabase(("persuasion", "Persuasion", 2));
|
||||
var db = CreateDatabase(("placement", "PLACEMENT", 2));
|
||||
var skills = new PlayerSkills(db);
|
||||
var before = skills.GetRank("persuasion");
|
||||
var before = skills.GetRank("placement");
|
||||
var state = new SkillStateModifiers();
|
||||
var system = new SkillCheckSystem(db, skills, state, new FixedRollSource(10));
|
||||
|
||||
system.Resolve("persuasion", 10, 0);
|
||||
system.Resolve("placement", 10, 0);
|
||||
|
||||
Assert.AreEqual(before, skills.GetRank("persuasion"));
|
||||
Assert.AreEqual(before, skills.GetRank("placement"));
|
||||
Assert.AreEqual(1, skills.AllRanks.Count);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user