From b241d206f4416ecc988303edbd3d68343fe066f3 Mon Sep 17 00:00:00 2001 From: Jaculabilis Date: Tue, 8 Nov 2022 19:12:03 -0800 Subject: [PATCH] Only fork on new moves into a season --- .../Adjudicate/MovementPhaseAdjudicator.cs | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs b/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs index df0693c..bc675c7 100644 --- a/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs +++ b/MultiversalDiplomacy/Adjudicate/MovementPhaseAdjudicator.cs @@ -492,13 +492,12 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator return progress; } - // The season target of a successful move always advances. - IEnumerable incomingMoveOrders = decision.Orders + // The season target of a new (i.e. not previously adjudicated) and successful move always advances. + IEnumerable newIncomingMoves = decision.Orders .OfType() - .Where(order => order.Season == decision.Season); - logger.Log(depth, "decision.Orders = {0}", string.Join(", ", decision.Orders)); - logger.Log(depth, "incomingMoveOrders = {0}", string.Join(", ", incomingMoveOrders)); - foreach (MoveOrder moveOrder in incomingMoveOrders) + .Where(order => order.Season == decision.Season + && !world.OrderHistory[order.Season].DoesMoveOutcomes.ContainsKey(order)); + foreach (MoveOrder moveOrder in newIncomingMoves) { DoesMove doesMove = decisions.DoesMove[moveOrder]; progress |= ResolveDecision(doesMove, world, decisions, depth + 1); @@ -513,8 +512,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator // The outcome of a battle is changed if: // 1. The outcome of a dislodge decision is changed, // 2. The outcome of an intra-timeline move decision is changed, or - // 3. The outcome of an inter-timeline move decision with that season as the destination is - // changed. + // 3. The outcome of an inter-timeline move decision with that season as the destination is changed. OrderHistory history = world.OrderHistory[decision.Season]; bool anyUnresolved = false; foreach (UnitOrder order in decision.Orders)