// Choose next unit for orders. If all units ended turn, update cities. public void ChooseNextUnit() { var units = _activeCiv.Units.Where(u => !u.Dead).ToList(); var player = Players[_activeCiv.Id]; //Look for units on this square or neighbours of this square var nextUnit = NextUnit(player, units); ActiveUnit = nextUnit; // End turn if no units awaiting orders if (nextUnit == null) { var anyUnitsMoved = units.Any(u => u.MovePointsLost > 0); if ((!anyUnitsMoved || Options.AlwaysWaitAtEndOfTurn) && _activeCiv.PlayerType != PlayerType.AI) { OnPlayerEvent?.Invoke(null, new PlayerEventArgs(PlayerEventType.WaitingAtEndOfTurn, _activeCiv.Id)); } else { if (ProcessEndOfTurn()) { ChoseNextCiv(); return; } } } }
public void ChoseNextCiv() { if (_activeCiv == AllCivilizations[^ 1]) { StartNextTurn(); } else { _activeCiv = AllCivilizations[_activeCiv.Id + 1]; if (_activeCiv.Alive) { TurnBeginning(Players[_activeCiv.Id]); OnPlayerEvent?.Invoke(null, new PlayerEventArgs(PlayerEventType.NewTurn, _activeCiv.Id)); if (_activeCiv.PlayerType == PlayerType.AI) { AiTurn(); } else { // Choose next unit ChooseNextUnit(); } } else if (!Options.DontRestartIfEliminated) { //Look to restart if possible } } }
void Kill() { OnPlayerEvent?.Invoke(PlayerEventType.DEATH); maxHealth = 3; health = 3; lockedHearts = 0; }
private void ChoseNextCiv() { // Make a list of active civs var civIds = new List <int>(); foreach (var civ in GetActiveCivs) { civIds.Add(civ.Id); } // Increase game turn if (_activeCiv.Id == civIds.Last()) { _turnNumber++; } // Chose next civ for (int id = 0; id < civIds.Count; id++) { if (civIds[id] == _activeCiv.Id) { if (civIds[id] == civIds.Last()) { _activeCiv = GetActiveCivs[0]; } else { _activeCiv = GetActiveCivs[id + 1]; } break; } } // Reset turns of all units foreach (var unit in GetActiveUnits.Where(n => n.Owner == _activeCiv)) { unit.TurnEnded = false; unit.MovePointsLost = 0; // Increase counters if ((unit.Order == OrderType.BuildIrrigation) || (unit.Order == OrderType.BuildRoad) || (unit.Order == OrderType.BuildMine)) { unit.Counter += 1; } } // Update all cities CitiesTurn(); // Choose next unit ChooseNextUnit(); OnPlayerEvent?.Invoke(null, new PlayerEventArgs(PlayerEventType.NewTurn)); }
private void Update() { switch (currentStates) { case States.Start: OnStartEvent.Invoke(); break; case States.Playtime: OnPlayerEvent.Invoke(); break; case States.End: OnEndEvent.Invoke(); break; default: throw new ArgumentOutOfRangeException(); } }
// Choose next unit for orders. If all units ended turn, update cities. public void ChooseNextUnit() { var units = _activeCiv.Units.Where(u => !u.Dead).ToList(); //Look for units on this square or neighbours of this square var nextUnit = ActiveTile.UnitsHere.FirstOrDefault(u => u.AwaitingOrders) ?? CurrentMap .Neighbours(ActiveTile) .SelectMany(t => t.UnitsHere.Where(u => u.Owner == _activeCiv && u.AwaitingOrders)) .FirstOrDefault(); nextUnit ??= units.FirstOrDefault(u => u.AwaitingOrders); ActiveUnit = nextUnit; // End turn if no units awaiting orders if (nextUnit == null) { var anyUnitsMoved = units.Any(u => u.MovePointsLost > 0); if ((!anyUnitsMoved || Options.AlwaysWaitAtEndOfTurn) && _activeCiv.PlayerType != PlayerType.AI) { OnPlayerEvent?.Invoke(null, new PlayerEventArgs(PlayerEventType.WaitingAtEndOfTurn, _activeCiv.Id)); } else { if (ProcessEndOfTurn()) { ChoseNextCiv(); return; } } } // // // if (_activeUnit != null) // { // TriggerUnitEvent(new ActivationEventArgs(_activeUnit, false, false)); // } }