Log recursive decision traversal
This commit is contained in:
parent
c0a9330d2e
commit
25d707b3b8
|
@ -275,18 +275,21 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
|
|
||||||
public List<AdjudicationDecision> AdjudicateOrders(World world, List<Order> orders)
|
public List<AdjudicationDecision> AdjudicateOrders(World world, List<Order> orders)
|
||||||
{
|
{
|
||||||
|
logger.Log(0, "Beginning adjudication");
|
||||||
// Define all adjudication decisions to be made.
|
// Define all adjudication decisions to be made.
|
||||||
MovementDecisions decisions = new(world, orders);
|
MovementDecisions decisions = new(world, orders);
|
||||||
|
|
||||||
// Adjudicate all decisions.
|
// Adjudicate all decisions.
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
int loopNum = 1;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
logger.Log(1, "Beginning loop {0}", loopNum++);
|
||||||
progress = false;
|
progress = false;
|
||||||
foreach (AdjudicationDecision decision in decisions.Values)
|
foreach (AdjudicationDecision decision in decisions.Values)
|
||||||
{
|
{
|
||||||
// This will noop without progress if the decision is already resolved
|
// This will noop without progress if the decision is already resolved
|
||||||
progress |= ResolveDecision(decision, world, decisions, depth: 0);
|
progress |= ResolveDecision(decision, world, decisions, depth: 2);
|
||||||
}
|
}
|
||||||
} while (progress);
|
} while (progress);
|
||||||
|
|
||||||
|
@ -294,6 +297,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
{
|
{
|
||||||
throw new ApplicationException("Some orders not resolved!");
|
throw new ApplicationException("Some orders not resolved!");
|
||||||
}
|
}
|
||||||
|
logger.Log(0, "Completed adjudication");
|
||||||
|
|
||||||
return decisions.Values.ToList();
|
return decisions.Values.ToList();
|
||||||
}
|
}
|
||||||
|
@ -396,6 +400,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "ResolveDecision({0})", decision);
|
||||||
return decision.Resolved ? false : decision switch
|
return decision.Resolved ? false : decision switch
|
||||||
{
|
{
|
||||||
IsDislodged d => ResolveIsUnitDislodged(d, world, decisions, depth + 1),
|
IsDislodged d => ResolveIsUnitDislodged(d, world, decisions, depth + 1),
|
||||||
|
@ -416,6 +421,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "IsUnitDislodged({0})", decision.Order.Unit);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// If this unit was ordered to move and is doing so successfully, it cannot be dislodged
|
// If this unit was ordered to move and is doing so successfully, it cannot be dislodged
|
||||||
|
@ -478,6 +484,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "DoesMoveHavePath({0})", decision.Order);
|
||||||
bool progress= false;
|
bool progress= false;
|
||||||
|
|
||||||
// If the origin and destination are adjacent, then there is a path.
|
// If the origin and destination are adjacent, then there is a path.
|
||||||
|
@ -508,6 +515,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "IsSupportGiven({0})", decision.Order);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// Support is cut when a unit moves into the supporting unit's province with nonzero
|
// Support is cut when a unit moves into the supporting unit's province with nonzero
|
||||||
|
@ -561,6 +569,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "HoldStrength({0})", decision.Province);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// If no unit is in the province, the hold strength is zero.
|
// If no unit is in the province, the hold strength is zero.
|
||||||
|
@ -603,6 +612,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "AttackStrength({0})", decision.Order);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// If there is no path, the attack strength is zero.
|
// If there is no path, the attack strength is zero.
|
||||||
|
@ -705,6 +715,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "DefendStrength({0})", decision.Order);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// The defend strength is equal to one plus, at least, the number of known successful
|
// The defend strength is equal to one plus, at least, the number of known successful
|
||||||
|
@ -729,6 +740,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "PreventStrength({0})", decision.Order);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// If there is no path, the prevent strength is zero.
|
// If there is no path, the prevent strength is zero.
|
||||||
|
@ -782,6 +794,7 @@ public class MovementPhaseAdjudicator : IPhaseAdjudicator
|
||||||
MovementDecisions decisions,
|
MovementDecisions decisions,
|
||||||
int depth)
|
int depth)
|
||||||
{
|
{
|
||||||
|
logger.Log(depth, "DoesUnitMove({0})", decision.Order);
|
||||||
bool progress = false;
|
bool progress = false;
|
||||||
|
|
||||||
// Resolve the move's attack strength.
|
// Resolve the move's attack strength.
|
||||||
|
|
Loading…
Reference in New Issue