private Game(Map[] maps, Rules configRules, IList <Civilization> civilizations, Options options, string[] gamePaths, DifficultyType difficulty, IPlayer localPlayer) { Script = new ScriptEngine(localPlayer.UI, this, gamePaths); _options = options; _maps = maps; _rules = configRules; TurnNumber = 0; _difficultyLevel = difficulty; AllCivilizations.AddRange(civilizations); CityNames = NameLoader.LoadCityNames(gamePaths); Players = civilizations.Select(c => { var player = c.PlayerType switch { PlayerType.AI => new AIPlayer(_difficultyLevel), PlayerType.Local => localPlayer, PlayerType.Remote => throw new NotSupportedException("Network play not implemented"), PlayerType.Barbarians => //TODO: create seperate barbarian player new AIPlayer(_difficultyLevel), _ => throw new ArgumentOutOfRangeException(nameof(c.PlayerType), c.PlayerType, null) }; return(player.SetCiv(c)); }).ToArray(); TerrainImprovements = TerrainImprovementFunctions.GetStandardImprovements(Rules); Script.RunScript("tile_improvements.lua"); Script.RunScript("improvements.lua"); Script.RunScript("advances.lua"); AllCivilizations.ForEach((civ) => { OnCivEvent?.Invoke(this, new CivEventArgs(CivEventType.Created, civ)); }); this.SetupTech(); Power.CalculatePowerRatings(this); }
public override Order Update(Tile activeTile, Unit activeUnit) { if (activeUnit == null) { SetCommandState(OrderStatus.Illegal); return(this); } if (activeUnit.AIrole != AIroleType.Settle) { SetCommandState(OrderStatus.Illegal, errorPopupKeyword: "ONLYSETTLERS"); return(this); } var canBeBuilt = TerrainImprovementFunctions.CanImprovementBeBuiltHere(activeTile, _improvement, activeUnit.Owner); SetCommandState(canBeBuilt.Enabled ? OrderStatus.Active : OrderStatus.Disabled, canBeBuilt.CommandTitle, canBeBuilt.ErrorPopup); return(this); }
public ImprovementOrder(TerrainImprovement improvement, Main main, Game game) : base(main, ParseShortCut(improvement.Shortcut), TerrainImprovementFunctions.LabelFrom(improvement.Levels[0]), 0) { _improvement = improvement; _game = game; }
public ImprovementOrder(TerrainImprovement improvement, Main main, Game game, MenuElement menuElement) : base(main, ParseShortCut(improvement.Shortcut), menuElement?.MenuText ?? TerrainImprovementFunctions.LabelFrom(improvement.Levels[0]), improvement.MenuGroup) { _improvement = improvement; _game = game; }