示例#1
0
 public LocalPlayer(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle, string name)
     : base(kernelPlayer, battle, name)
 {
     this.battleViewer = battleViewer;
     gridLayoutManager = GridLayoutManager.Instance;
     availableActions  = new LazyDictionary <int, List <TargetableAction> >();
 }
示例#2
0
 public OnlineBattle(BattleViewer battleViewer, bool shouldFindGame) : base(battleViewer)
 {
     if (shouldFindGame)
     {
         FindGame();
     }
 }
示例#3
0
        public AIBattle(BattleViewer battleViewer, AIType aiType)
            : base(battleViewer)
        {
            int[] aiTeamIDs;

            var kernelPlayer1 = new Player(0);
            var kernelPlayer2 = new Player(1);

            HumanPlayer = new LocalPlayer(battleViewer, kernelPlayer1, this, GameManager.Instance.UserName);
            AiPlayer    = CreateAI(aiType, battleViewer, kernelPlayer2, this, out aiTeamIDs);

            IEnumerable <GameObject> humanTeam;
            IEnumerable <Position>   coords;
            IEnumerable <Position>   flippedCoords;
            IEnumerable <GameObject> aiTeam = ClientFruitonFactory.CreateClientFruitonTeam(aiTeamIDs, battleViewer.Board);

            if (aiType == AIType.Tutorial)
            {
                int[] humanTeamIDs = { 2, 5, 15, 14, 12, 17, 21, 21, 30, 25 };
                humanTeam = ClientFruitonFactory.CreateClientFruitonTeam(humanTeamIDs, battleViewer.Board);
                coords    = Tutorial.CreatePositionsForArtificialTeam(humanTeam.Select(gameObject =>
                                                                                       gameObject.GetComponent <ClientFruiton>().KernelFruiton));
            }
            else
            {
                humanTeam = ClientFruitonFactory.CreateClientFruitonTeam(gameManager.CurrentFruitonTeam.FruitonIDs, battleViewer.Board);
                coords    = gameManager.CurrentFruitonTeam.Positions;
            }
            battleViewer.InitializeTeam(humanTeam, kernelPlayer1, kernelPlayer1.id == 0, coords.ToArray());
            flippedCoords = BattleHelper.FlipCoordinates(coords, GameState.WIDTH, GameState.HEIGHT);
            battleViewer.InitializeTeam(aiTeam, kernelPlayer2, kernelPlayer2.id == 0, flippedCoords.ToArray());

            var fruitons = new Array <object>();

            foreach (var fruiton in humanTeam)
            {
                fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton);
            }
            foreach (var fruiton in aiTeam)
            {
                fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton);
            }

            Array <int>  maps           = GameManager.Instance.FruitonDatabase.getMapsIds();
            int          rndMapId       = maps[Random.Range(0, maps.length)];
            GameSettings kernelSettings = GameSettingsFactory.CreateGameSettings(rndMapId, battleViewer.GameMode);

            bool infiniteTurnTime = battleViewer.battleType == BattleType.TutorialBattle;

            Kernel = new Kernel(kernelPlayer1, kernelPlayer2, fruitons, kernelSettings, false, infiniteTurnTime);
            BattleReady();
        }
        public OfflineBattle(BattleViewer battleViewer) : base(battleViewer)
        {
            var    kernelPlayer1 = new Player(0);
            var    kernelPlayer2 = new Player(1);
            string login         = GameManager.Instance.UserName;

            Player1 = new LocalPlayer(battleViewer, kernelPlayer1, this, "Player 1");
            Player2 = new LocalPlayer(battleViewer, kernelPlayer2, this, "Player 2");

            IEnumerable <GameObject> currentTeam  = ClientFruitonFactory.CreateClientFruitonTeam(gameManager.CurrentFruitonTeam.FruitonIDs, battleViewer.Board);
            IEnumerable <GameObject> opponentTeam = ClientFruitonFactory.CreateClientFruitonTeam(gameManager.OfflineOpponentTeam.FruitonIDs, battleViewer.Board);

            RepeatedField <Position> coords = gameManager.CurrentFruitonTeam.Positions;

            battleViewer.InitializeTeam(currentTeam, kernelPlayer1, kernelPlayer1.id == 0, coords.ToArray());
            RepeatedField <Position> flippedCoords = BattleHelper.FlipCoordinates(coords, GameState.WIDTH, GameState.HEIGHT);

            battleViewer.InitializeTeam(opponentTeam, kernelPlayer2, kernelPlayer2.id == 0, flippedCoords.ToArray());

            var fruitons = new Array <object>();

            foreach (var fruiton in currentTeam)
            {
                fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton);
            }
            foreach (var fruiton in opponentTeam)
            {
                fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton);
            }

            Array <int>  maps           = GameManager.Instance.FruitonDatabase.getMapsIds();
            int          rndMapId       = maps[Random.Range(0, maps.length)];
            GameSettings kernelSettings = GameSettingsFactory.CreateGameSettings(rndMapId, battleViewer.GameMode);

            Kernel = new Kernel(kernelPlayer1, kernelPlayer2, fruitons, kernelSettings, false, false);
            BattleReady();
        }
示例#5
0
        private static AIPlayerBase CreateAI(AIType type, BattleViewer battleViewer, Player kernelPlayer, Battle battle, out int[] teamIds)
        {
            switch (type)
            {
            case AIType.Clowns:
                teamIds = AITeams.Clowns;
                return(new AggroGreedyAIPlayer(battleViewer, kernelPlayer, battle, "Joker"));

            case AIType.Santas:
                teamIds = AITeams.Santas;
                return(new ValueAI(battleViewer, kernelPlayer, battle, "Santa"));

            case AIType.SportsMen:
                teamIds = AITeams.SportsMen;
                return(new ValueAI(battleViewer, kernelPlayer, battle, "Special One"));

            case AIType.Tutorial:
                teamIds = AITeams.Tutorial;
                return(new TutorialPlayer(battleViewer, kernelPlayer, battle));

            default:
                throw new ArgumentOutOfRangeException("type", type, null);
            }
        }
 public RandomAIPlayer(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle)
     : base(battleViewer, kernelPlayer, battle, "Random AI")
 {
 }
示例#7
0
 public AggroGreedyAIPlayer(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle, string name)
     : base(battleViewer, kernelPlayer, battle, name)
 {
 }
示例#8
0
 protected AIPlayerBase(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle, string name)
     : base(kernelPlayer, battle, name)
 {
     this.battleViewer = battleViewer;
 }
示例#9
0
 public ValueAI(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle, string name)
     : base(battleViewer, kernelPlayer, battle, name)
 {
 }
示例#10
0
        public Simulation(Group attack, Group defense)
        {
            Attacker             = attack;
            Defender             = defense;
            CurrentRound         = 0;
            TurnIntervalInSecond = 0;

            battleManager =
                Ioc.Kernel.Get <IBattleManagerFactory>()
                .CreateBattleManager(new BattleLocation(BattleLocationType.City, Defender.City.Id),
                                     new BattleOwner(BattleOwnerType.City, Defender.City.Id),
                                     Defender.City);
            battleManager.BattleReport.Battle = battleManager;
            bv = new BattleViewer(battleManager);

            // Add local to battle
            using (Concurrency.Current.Lock(Defender.Local))
            {
                Defender.Local.BeginUpdate();
                Defender.Local.AddFormation(FormationType.InBattle);
                Defender.Local.Template.LoadStats(TroopBattleGroup.Local);
                var localGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                              1,
                                                              Defender.Local,
                                                              Ioc.Kernel.Get <IDbManager>());
                var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                foreach (var kvp in Defender.Local[FormationType.Normal])
                {
                    combatUnitFactory.CreateDefenseCombatUnit(battleManager,
                                                              Defender.Local,
                                                              FormationType.InBattle,
                                                              kvp.Key,
                                                              kvp.Value).ToList().ForEach(localGroup.Add);
                }

                foreach (IStructure structure in Defender.City)
                {
                    localGroup.Add(combatUnitFactory.CreateStructureCombatUnit(battleManager, structure));
                }
                battleManager.Add(localGroup, BattleManager.BattleSide.Defense, false);
                Ioc.Kernel.Get <CityBattleProcedure>().MoveUnitFormation(Defender.Local, FormationType.Normal, FormationType.InBattle);
                Defender.Local.EndUpdate();
            }

            // Add attack stub to battle
            using (Concurrency.Current.Lock(Attacker.AttackStub))
            {
                Attacker.AttackStub.BeginUpdate();
                Attacker.AttackStub.Template.LoadStats(TroopBattleGroup.Attack);
                Attacker.AttackStub.EndUpdate();
                var attackGroup = new CityDefensiveCombatGroup(battleManager.BattleId,
                                                               2,
                                                               Attacker.AttackStub,
                                                               Ioc.Kernel.Get <IDbManager>());
                var combatUnitFactory = Ioc.Kernel.Get <ICombatUnitFactory>();
                foreach (var kvp in Attacker.AttackStub[FormationType.Normal])
                {
                    combatUnitFactory.CreateAttackCombatUnit(battleManager,
                                                             Attacker.TroopObject,
                                                             FormationType.InBattle,
                                                             kvp.Key,
                                                             kvp.Value).ToList().ForEach(attackGroup.Add);
                }
                battleManager.Add(attackGroup, BattleManager.BattleSide.Attack, false);
            }
        }
示例#11
0
 public TutorialPlayer(BattleViewer battleViewer, Player kernelPlayer, Model.Battle battle) : base(battleViewer, kernelPlayer, battle, "Dummy player")
 {
 }
示例#12
0
 protected Battle(BattleViewer battleViewer)
 {
     gameManager       = GameManager.Instance;
     this.battleViewer = battleViewer;
 }