diff --git a/MultiversalDiplomacy/Adjudicate/AdjudicatorHelpers.cs b/MultiversalDiplomacy/Adjudicate/AdjudicatorHelpers.cs index 944a707..c70716b 100644 --- a/MultiversalDiplomacy/Adjudicate/AdjudicatorHelpers.cs +++ b/MultiversalDiplomacy/Adjudicate/AdjudicatorHelpers.cs @@ -77,13 +77,13 @@ internal static class AdjudicatorHelpers { InvalidateIfNotMatching( order => order switch { - ConvoyOrder convoy => convoy.Power == convoy.Unit.Power.Name, - DisbandOrder disband => disband.Power == disband.Unit.Power.Name, - HoldOrder hold => hold.Power == hold.Unit.Power.Name, - MoveOrder move => move.Power == move.Unit.Power.Name, - RetreatOrder retreat => retreat.Power == retreat.Unit.Power.Name, - SupportHoldOrder support => support.Power == support.Unit.Power.Name, - SupportMoveOrder support => support.Power == support.Unit.Power.Name, + ConvoyOrder convoy => convoy.Power == convoy.Unit.Power, + DisbandOrder disband => disband.Power == disband.Unit.Power, + HoldOrder hold => hold.Power == hold.Unit.Power, + MoveOrder move => move.Power == move.Unit.Power, + RetreatOrder retreat => retreat.Power == retreat.Unit.Power, + SupportHoldOrder support => support.Power == support.Unit.Power, + SupportMoveOrder support => support.Power == support.Unit.Power, // Any order not given to a unit, by definition, cannot be given to a unit of the // wrong power _ => true, diff --git a/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs b/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs index bbece30..9b338f9 100644 --- a/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs +++ b/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs @@ -262,7 +262,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator .Where(unit => !orderedUnits.Contains(unit)) .ToList(); List implicitHolds = unorderedUnits - .Select(unit => new HoldOrder(unit.Power.Name, unit)) + .Select(unit => new HoldOrder(unit.Power, unit)) .ToList(); validationResults = validationResults .Concat(implicitHolds.Select(o => o.Validate(ValidationReason.Valid))) @@ -793,7 +793,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator // Is failing to move away || destMoveAway.Outcome == false)) { - Power destPower = destOrder.Unit.Power; + string destPower = destOrder.Unit.Power; if (decision.Order.Unit.Power == destPower) { // Cannot dislodge own unit. @@ -823,7 +823,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator // the case where it doesn't move and the attack strength is mitigated by supports not // helping to dislodge units of the same power as the support. The maximum tracks the // case where it does move and the attack strength is unmitigated. - Power destPower = destMoveAway.Order.Unit.Power; + string destPower = destMoveAway.Order.Unit.Power; int min = 1; int max = 1; foreach (SupportMoveOrder support in decision.Supports) diff --git a/MultiversalDiplomacy/Model/Unit.cs b/MultiversalDiplomacy/Model/Unit.cs index defa273..cba5d0c 100644 --- a/MultiversalDiplomacy/Model/Unit.cs +++ b/MultiversalDiplomacy/Model/Unit.cs @@ -25,7 +25,7 @@ public class Unit /// /// The allegiance of the unit. /// - public Power Power { get; } + public string Power { get; } /// /// The type of unit. @@ -38,7 +38,7 @@ public class Unit [JsonIgnore] public string Key => $"{Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}"; - public Unit(string? past, string location, Season season, Power power, UnitType type) + public Unit(string? past, string location, Season season, string power, UnitType type) { this.Past = past; this.Location = location; @@ -48,13 +48,13 @@ public class Unit } public override string ToString() - => $"{Power.Name[0]} {Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}"; + => $"{Power[0]} {Type.ToShort()} {Season.Timeline}-{Location}@{Season.Turn}"; /// /// Create a new unit. No validation is performed; the adjudicator should only call this /// method after accepting a build order. /// - public static Unit Build(string location, Season season, Power power, UnitType type) + public static Unit Build(string location, Season season, string power, UnitType type) => new(past: null, location, season, power, type); /// diff --git a/MultiversalDiplomacy/Model/World.cs b/MultiversalDiplomacy/Model/World.cs index e6effca..ff1ecd0 100644 --- a/MultiversalDiplomacy/Model/World.cs +++ b/MultiversalDiplomacy/Model/World.cs @@ -202,7 +202,7 @@ public class World : splits.Length == 3 ? Map.GetWater(splits[2]) : Map.GetWater(splits[2], splits[3]); - Unit unit = Unit.Build(location.Key, this.RootSeason, power, type); + Unit unit = Unit.Build(location.Key, this.RootSeason, power.Name, type); return unit; }); return this.Update(units: units); diff --git a/MultiversalDiplomacyTests/TestCaseBuilder.cs b/MultiversalDiplomacyTests/TestCaseBuilder.cs index 909d715..2eb66bd 100644 --- a/MultiversalDiplomacyTests/TestCaseBuilder.cs +++ b/MultiversalDiplomacyTests/TestCaseBuilder.cs @@ -261,7 +261,7 @@ public class TestCaseBuilder { foreach (Unit unit in this.World.Units) { - if (unit.Power == power + if (unit.Power == power.Name && World.Map.GetLocation(unit).Province == location.Province && unit.Season == season) { @@ -270,7 +270,7 @@ public class TestCaseBuilder } // Not found - Unit newUnit = Unit.Build(location.Key, season, power, type); + Unit newUnit = Unit.Build(location.Key, season, power.Name, type); this.World = this.World.Update(units: this.World.Units.Append(newUnit)); return newUnit; } diff --git a/MultiversalDiplomacyTests/TestCaseBuilderTest.cs b/MultiversalDiplomacyTests/TestCaseBuilderTest.cs index 720e660..496e07c 100644 --- a/MultiversalDiplomacyTests/TestCaseBuilderTest.cs +++ b/MultiversalDiplomacyTests/TestCaseBuilderTest.cs @@ -28,15 +28,15 @@ class TestCaseBuilderTest Assert.That(setup.World.Units, Is.Not.Empty, "Expected units to be created"); Unit armyLON = setup.World.GetUnitAt("London"); - Assert.That(armyLON.Power.Name, Is.EqualTo("England"), "Unit created with wrong power"); + Assert.That(armyLON.Power, Is.EqualTo("England"), "Unit created with wrong power"); Assert.That(armyLON.Type, Is.EqualTo(UnitType.Army), "Unit created with wrong type"); Unit fleetIRI = setup.World.GetUnitAt("Irish Sea"); - Assert.That(fleetIRI.Power.Name, Is.EqualTo("England"), "Unit created with wrong power"); + Assert.That(fleetIRI.Power, Is.EqualTo("England"), "Unit created with wrong power"); Assert.That(fleetIRI.Type, Is.EqualTo(UnitType.Fleet), "Unit created with wrong type"); Unit fleetSTP = setup.World.GetUnitAt("Saint Petersburg"); - Assert.That(fleetSTP.Power.Name, Is.EqualTo("Russia"), "Unit created with wrong power"); + Assert.That(fleetSTP.Power, Is.EqualTo("Russia"), "Unit created with wrong power"); Assert.That(fleetSTP.Type, Is.EqualTo(UnitType.Fleet), "Unit created with wrong type"); Assert.That( fleetSTP.Location, diff --git a/MultiversalDiplomacyTests/UnitTests.cs b/MultiversalDiplomacyTests/UnitTests.cs index f95cba9..bd5e2c3 100644 --- a/MultiversalDiplomacyTests/UnitTests.cs +++ b/MultiversalDiplomacyTests/UnitTests.cs @@ -15,7 +15,7 @@ public class UnitTests Tyr = world.Map.GetLand("Tyr"); Power pw1 = world.Map.GetPower("Austria"); Season a0 = world.RootSeason; - Unit u1 = Unit.Build(Mun.Key, a0, pw1, UnitType.Army); + Unit u1 = Unit.Build(Mun.Key, a0, pw1.Name, UnitType.Army); world = world.ContinueOrFork(a0, out Season a1); Unit u2 = u1.Next(Boh.Key, a1);