예제 #1
0
        /// <summary>
        /// Boots the MatchManager given a specific <see cref="MatchSettings"/>
        /// </summary>
        /// <param name="matchConfig"></param>
        public void CreateMatch(MatchSettings matchConfig)
        {
            MapManager.Initialize(matchConfig.MapSize.x, matchConfig.MapSize.y);

            if (Factions != null)
            {
                foreach (var faction in Factions)
                {
                    faction.Clean();
                }
            }

            Factions    = new List <FactionManager>();
            BotFactions = new List <FactionManager>();

            int factionIndex = 0;

            foreach (var playerConfig in matchConfig.PlayerConfigs)
            {
                var factionManager = new FactionManager(factionIndex, playerConfig.PlayerType);
                if (playerConfig.PlayerType == PlayerType.Human)
                {
                    HumanFaction = factionManager;
                }
                else
                {
                    BotFactions.Add(factionManager);
                }
                foreach (var unitConfig in playerConfig.Units)
                {
                    var unit = m_unitFactory.CreateUnit(unitConfig.UnitType, factionIndex, unitConfig.SpawnPosition);
                    MapManager.PlaceUnit(unitConfig.SpawnPosition, unit);
                    factionManager.AddUnit(unit);
                    unit.transform.parent = MapManager.transform;
                }
                Factions.Add(factionManager);
                factionIndex++;
            }
        }
예제 #2
0
        /// <summary>
        /// Creates the <see cref="PlayerController"/> of a specific type depending on <see cref="PlayerType"/> and <see cref="AIType"/>
        /// </summary>
        /// <param name="faction"></param>
        /// <param name="aiType"></param>
        /// <returns></returns>
        private GameObject createPlayerControllerForFaction(FactionManager faction, AIType aiType)
        {
            var go = new GameObject()
            {
                name = "PlayerController" + faction.FactionIndex
            };

            switch (faction.PlayerType)
            {
            case PlayerType.Human:
                humanPlayer = go.AddComponent <HumanPlayerController>();
                break;

            case PlayerType.Bot:
                switch (aiType)
                {
                case AIType.Dummy:
                    go.AddComponent <DummyAIAgentController>();
                    break;

                case AIType.Aggressive:
                    go.AddComponent <AgressiveAIAgentController>();
                    break;

                case AIType.RandomWalker:
                    go.AddComponent <RandomWalkerAIAgentController>();
                    break;
                }
                break;

            case PlayerType.Scripted:
                ScriptedPlayerControllers.Add(go.AddComponent <ScriptedPlayerController>());
                break;
            }
            return(go);
        }
 public override void Initialize(MatchManager matchController, FactionManager factionManager)
 {
     base.Initialize(matchController, factionManager);
     FactionManager.Units.OrderBy(u => u.AttackPower).Reverse();
 }
예제 #4
0
 /// <summary>
 /// Called by <see cref="GameController"/> when turn starts
 /// </summary>
 public virtual void TurnStart()
 {
     FactionManager.RegenerateActionPoints();
 }
예제 #5
0
 public virtual void Initialize(MatchManager matchController, FactionManager factionManager)
 {
     MatchManager   = matchController;
     FactionManager = factionManager;
 }