public void DoTurnAsync(Turn Turn) { try { bool didAnything = false; while (!(_Orders.Peek() is NextPhaseOrder)) { var o = _Orders.Dequeue(); _Match.ExecuteOrder(o); didAnything |= !(o is ResetOrder); } if (didAnything) { Thread.Sleep(WaitMillis(Turn.TurnInfo.TurnComponent)); } if (_Orders.Count < 2) { Thread.Sleep(2500); } _Match.ExecuteOrder(_Orders.Dequeue()); } catch (Exception e) { Console.WriteLine(e); } }
public virtual void EnterUnits(Turn Turn, bool Vehicle) { }
public bool AutomateTurn(Match Match, Turn Turn) { DoBufferedOrders(Match, Turn.TurnInfo); return(false); }
public void DoTurn(Turn Turn) { _PlayerControllers[Turn.TurnInfo.Army].DoTurn(Turn); }
public StartTurnComponentEventArgs(Turn Turn) { this.Turn = Turn; }
public void DoTurn(Turn Turn) { Task.Run(() => DoTurnAsync(Turn)); }
public bool AutomateTurn(Match Match, Turn Turn) { Match.ExecuteOrder(new ResetOrder(Turn.TurnInfo.Army, Turn.TurnInfo.TurnComponent == TurnComponent.RESET)); _MultiTurnAutomater.AutomateTurn(Match, Turn); switch (Turn.TurnInfo.TurnComponent) { case TurnComponent.DEPLOYMENT: Turn.TurnInfo.Army.Deployments.ForEach(i => i.AutomateDeployment()); return(false); case TurnComponent.MINEFIELD_ATTACK: DoMinefieldAttacks(Match, Turn.TurnInfo.Army); return(true); case TurnComponent.ARTILLERY: return(!Turn.TurnInfo.Army.Units.Any( i => i.CanAttack(AttackMethod.INDIRECT_FIRE) == OrderInvalidReason.NONE)); case TurnComponent.ATTACK: return(!Turn.TurnInfo.Army.Units.Any( i => i.CanAttack(AttackMethod.DIRECT_FIRE) == OrderInvalidReason.NONE)); case TurnComponent.AIRCRAFT: return(!Turn.TurnInfo.Army.Units.Any( i => i.Configuration.IsAircraft() && i.Status == UnitStatus.ACTIVE)); case TurnComponent.ANTI_AIRCRAFT: return(!Turn.TurnInfo.Army.Units.Any( i => i.CanAttack(AttackMethod.ANTI_AIRCRAFT) == OrderInvalidReason.NONE) || !Match.Armies.Where(i => i.Configuration.Team != Turn.TurnInfo.Army.Configuration.Team) .SelectMany(i => i.Units) .Any(i => i.Configuration.IsAircraft() && i.Position != null)); case TurnComponent.VEHICLE_COMBAT_MOVEMENT: return(!Turn.TurnInfo.Army.Units.Any(i => i.CanMove(true, true) == OrderInvalidReason.NONE && i.CanAttack(AttackMethod.OVERRUN) == OrderInvalidReason.NONE)); case TurnComponent.VEHICLE_MOVEMENT: Turn.TurnInfo.Army.Deployments.ForEach(i => i.EnterUnits(Turn, true)); Turn.TurnInfo.Army.Deployments.ForEach(i => i.AutomateMovement(true)); return(!Turn.TurnInfo.Army.Units.Any(i => i.CanMove(true, false) == OrderInvalidReason.NONE)); case TurnComponent.CLOSE_ASSAULT: return(!Turn.TurnInfo.Army.Units.Any( i => i.CanAttack(AttackMethod.CLOSE_ASSAULT) == OrderInvalidReason.NONE)); case TurnComponent.NON_VEHICLE_MOVEMENT: Turn.TurnInfo.Army.Deployments.ForEach(i => i.EnterUnits(Turn, false)); Turn.TurnInfo.Army.Deployments.ForEach(i => i.AutomateMovement(false)); return(!Turn.TurnInfo.Army.Units.Any(i => i.CanMove(false, false) == OrderInvalidReason.NONE)); case TurnComponent.WAIT: return(!Match.Scenario.Rules.FogOfWar); case TurnComponent.RESET: return(true); } return(false); }