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)); }
public void UpdateActiveUnit() { if (_activeCiv == _playerCiv) { // If active unit died OR is not waiting order, chose next unit in line, otherwise update its orders if (!_activeUnit.AwaitingOrders || !GetActiveUnits.Contains(_activeUnit)) { ChooseNextUnit(); } else { switch (_activeUnit.Order) { case OrderType.BuildIrrigation: if (_activeUnit.Counter == 2) { if (Map.TileC2(_activeUnit.X, _activeUnit.Y).Irrigation == false) // Build irrigation { Map.TileC2(_activeUnit.X, _activeUnit.Y).Irrigation = true; } else if ((Map.TileC2(_activeUnit.X, _activeUnit.Y).Irrigation == true) && (Map.TileC2(_activeUnit.X, _activeUnit.Y).Farmland == false)) // Build farms { Map.TileC2(_activeUnit.X, _activeUnit.Y).Farmland = true; } //Game.TerrainTile = Draw.DrawMap(); //Update game map //unit.Action = OrderType.NoOrders; } break; case OrderType.BuildRoad: if (_activeUnit.Counter == 2) { if (Map.TileC2(_activeUnit.X, _activeUnit.Y).Road == false) // Build road { Map.TileC2(_activeUnit.X, _activeUnit.Y).Road = true; } else if ((Map.TileC2(_activeUnit.X, _activeUnit.Y).Road == true) && (Map.TileC2(_activeUnit.X, _activeUnit.Y).Railroad == false)) // Build railroad { Map.TileC2(_activeUnit.X, _activeUnit.Y).Railroad = true; } //Game.TerrainTile = Draw.DrawMap(); //Update game map //unit.Action = OrderType.NoOrders; } break; case OrderType.BuildMine: if (_activeUnit.Counter == 2) { Map.TileC2(_activeUnit.X, _activeUnit.Y).Mining = true; //Game.TerrainTile = Draw.DrawMap(); //Update game map //unit.Action = OrderType.NoOrders; } break; default: break; } OnUnitEvent?.Invoke(null, new UnitEventArgs(UnitEventType.StatusUpdate)); } } // AI else { if (!_activeUnit.AwaitingOrders || !GetActiveUnits.Contains(_activeUnit)) { ChooseNextUnit(); } else { Game.IssueUnitOrder(UnitAI.UnitOrder()); } } }