private void SetupBattle( IEnumerable <int> localPlayerFruitonIds, IEnumerable <Position> localPlayerPositions, IEnumerable <int> opponentFruitonIds, IEnumerable <Position> opponentPositions, Player localPlayer, Player opponent ) { IEnumerable <GameObject> localTeam = ClientFruitonFactory.CreateClientFruitonTeam(localPlayerFruitonIds, battleViewer.Board); IEnumerable <GameObject> opponentTeam = ClientFruitonFactory.CreateClientFruitonTeam(opponentFruitonIds, battleViewer.Board); battleViewer.InitializeTeam(localTeam, localPlayer, true, localPlayerPositions.ToArray()); battleViewer.InitializeTeam(opponentTeam, opponent, false, opponentPositions.ToArray()); // Remove fruitons from factory and use fruitons from given state instead foreach (GameObject o in battleViewer.FruitonsGrid) { ClientFruiton clientFruiton; if (o != null && (clientFruiton = o.GetComponent <ClientFruiton>()) != null) { KFruiton kernelFruiton = clientFruiton.KernelFruiton; KFruiton realFruiton = Kernel.currentState.field.get(kernelFruiton.position).fruiton; clientFruiton.KernelFruiton = realFruiton; } } BattleReady(); if (!IsLocalPlayerFirst) { battleViewer.FlipFruitons(); } }
public void ProcessMessage(GameReady gameReadyMessage) { battleViewer.DisableCancelFindButton(); var kernelPlayer1 = new Player(0); var kernelPlayer2 = new Player(1); LocalPlayer = new LocalPlayer(battleViewer, kernelPlayer1, this, gameManager.UserName); OnlinePlayer = new OnlinePlayer(kernelPlayer2, this, gameReadyMessage.Opponent.Login); ((OnlinePlayer)OnlinePlayer).OnEnable(); IEnumerable <GameObject> opponentTeam = ClientFruitonFactory.CreateClientFruitonTeam(gameReadyMessage.OpponentTeam.FruitonIDs, battleViewer.Board); IEnumerable <GameObject> currentTeam = ClientFruitonFactory.CreateClientFruitonTeam(gameManager.CurrentFruitonTeam.FruitonIDs, battleViewer.Board); // The opponent team is obtained from the server with the correctly set positions. battleViewer.InitializeTeam(opponentTeam, kernelPlayer2, kernelPlayer2.id == 0, gameReadyMessage.OpponentTeam.Positions.ToArray()); GameSettings kernelSettings = GameSettingsFactory.CreateGameSettings(gameReadyMessage.MapId, battleViewer.GameMode); var fruitons = new haxe.root.Array <object>(); foreach (var fruiton in currentTeam) { fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton); } foreach (var fruiton in opponentTeam) { fruitons.push(fruiton.GetComponent <ClientFruiton>().KernelFruiton); } IsLocalPlayerFirst = gameReadyMessage.StartsFirst; Player player1; Player player2; // If the local player begins, the game will be started with kernelPlayer1 as first argument. if (IsLocalPlayerFirst) { battleViewer.InitializeTeam(currentTeam, kernelPlayer1, kernelPlayer1.id == 0, GameManager.Instance.CurrentFruitonTeam.Positions.ToArray()); player1 = kernelPlayer1; player2 = kernelPlayer2; } // If the online opponent begins, we need to flip the positions to the opposite side because we do not receive // the new positions from the server. The first argument has to be the online opponent = kernelPlayer2. else { var width = GameState.WIDTH; var height = GameState.HEIGHT; var flippedPositions = BattleHelper.FlipCoordinates(GameManager.Instance.CurrentFruitonTeam.Positions, width, height); battleViewer.InitializeTeam(currentTeam, kernelPlayer1, kernelPlayer1.id == 0, flippedPositions.ToArray()); player1 = kernelPlayer2; player2 = kernelPlayer1; battleViewer.DisableEndTurnButton(); } Kernel = new Kernel(player1, player2, fruitons, kernelSettings, false, false); SendReadyMessage(); battleViewer.InitializePlayersInfo(); BattleReady(); }
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(); }