Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
 public ImprovementOrder(TerrainImprovement improvement, Main main, Game game) : base(main,
                                                                                      ParseShortCut(improvement.Shortcut),
                                                                                      TerrainImprovementFunctions.LabelFrom(improvement.Levels[0]), 0)
 {
     _improvement = improvement;
     _game        = game;
 }
Exemplo n.º 4
0
 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;
 }