private static Tile GetStartLoc(Civilization civilization, GameInitializationConfig config, Map map) { var maxFertility = 0m; var tiles = new HashSet <Tile>(); for (int y = 0; y < map.Tile.GetLength(1); y++) { for (int x = 0; x < map.Tile.GetLength(0); x++) { var tile = map.Tile[x, y]; if (tile.Fertility < maxFertility) { continue; } if (tile.Fertility > maxFertility) { tiles.Clear(); maxFertility = tile.Fertility; } tiles.Add(tile); } } var selectedTile = tiles.OrderByDescending(t => DistanceToNearestStart(config, t)).First(); config.StartTiles.Add(selectedTile); map.SetAsStartingLocation(selectedTile, civilization.Id); return(selectedTile); }
public Options(GameInitializationConfig config) { SimplifiedCombat = config.SimplifiedCombat; Bloodlust = config.Bloodlust; DontRestartIfEliminated = config.DontRestartEliminatedPlayers; FlatEarth = config.FlatWorld; }
internal static bool StartPreMade(Main mainForm, Ruleset ruleset, string mapFileName) { Labels.UpdateLabels(ruleset); CityLoader.LoadCities(ruleset); var config = new GameInitializationConfig { RuleSet = ruleset }; config.PopUps = PopupBoxReader.LoadPopupBoxes(config.RuleSet.Root); try { PopupBox CorrectedPopup(string popupId) { var popUp = config.PopUps[popupId]; if (popUp.Options != null && popUp.Options.Count != 0) { return(popUp); } popUp.Options = new[] { popUp.Text[^ 2], popUp.Text[^ 1] };
private static Tile GetDefaultStart(GameInitializationConfig config, Civilization civilization, Map map) { var index = Array.FindIndex(config.Rules.Leaders, l => l.Adjective == civilization.Adjective); if (index > -1 && index < config.StartPositions.Length) { var pos = config.StartPositions[index]; if (pos[0] != -1 && pos[1] != -1) { var tile = map.TileC2(pos[0], pos[1]); if (tile.Fertility > -1) { map.SetAsStartingLocation(tile, civilization.Id); config.StartTiles.Add(tile); return(tile); } } } return(null); }
private static double DistanceToNearestStart(GameInitializationConfig config, Tile tile) { if (config.StartTiles.Count == 0) { return(config.Random.Next()); } var minDist = Utilities.DistanceTo(config.StartTiles[0], tile, config.FlatWorld); for (int i = 1; i < config.StartTiles.Count; i++) { var dist = Utilities.DistanceTo(config.StartTiles[i], tile, config.FlatWorld); if (dist < minDist) { minDist = dist; } } return(minDist); }
public static void StartNewGame(GameInitializationConfig config, Map[] maps, IList <Civilization> civilizations, IPlayer localPlayer) { var settlerType = config.Rules.UnitTypes[(int)UnitType.Settlers]; var units = civilizations.Skip(1).Select(c => new { Civ = c, DefaultStart = config.StartPositions != null ? GetDefaultStart(config, c, maps[0]) : null }) .OrderBy(c => c.DefaultStart != null) .Select(c => new { c.Civ, StartLocation = c.DefaultStart ?? GetStartLoc(c.Civ, config, maps[0]) }).Select((c, id) => new Unit { Counter = 0, Dead = false, Id = id, Order = OrderType.NoOrders, Owner = c.Civ, Veteran = false, X = c.StartLocation.X, Y = c.StartLocation.Y, TypeDefinition = settlerType }).ToList(); units.ForEach(u => { u.Owner.Units.Add(u); u.CurrentLocation = maps[0].TileC2(u.X, u.Y); }); maps[0].WhichCivsMapShown = config.PlayerCiv.Id; Game.StartNew(maps, config, civilizations, localPlayer); }