private void generateGame() { for (int i = 0; i < 8; i++) { BoardUpdate b = new BoardUpdate(); b.redDir = 0; b.blueDir = 2; b.updateNumber = (uint)i; b.blueCoords = newPos(2 + i, 5); //new int[]{ 2 + i}; b.redCoords = newPos(8 - i, 7); //new int[]{ 38 - i}; moves.Add(b); } finalBoard = new BoardUpdate(); finalBoard.redDir = 0; finalBoard.blueDir = 2; finalBoard.updateNumber = (uint)8; finalBoard.blueCoords = newPos(10, 5); finalBoard.redCoords = newPos(0, 7); finalBoard.gameOver = true; finalBoard.winnerColor = PlayerColor.Blue; moves.Add(finalBoard); finalMsg = new GameInfo("Some Username", Game.PlayerColor.None, new int[][] { new int[] { 20, 0 } }, true ); }
//The protocol should later be re-written so we can loop through all the players public void handleGameUpdate(BoardUpdate update) { if (updateCounter == 0) { initSmoothRenderer(update); } else if (updateCounter == 1) //We can't interpolate until we have atleast two updates { startInterpolation(); } foreach (Position2D i in update.blueCoords.Distinct().Where((c) => !addedPlayerPos[0].Contains(c))) { distributeNewPosition(0, i); } foreach (Position2D i in update.redCoords.Distinct().Where((c) => !addedPlayerPos[1].Contains(c))) { distributeNewPosition(1, i); } addedPlayerPos [0].AddRange(update.blueCoords); addedPlayerPos [1].AddRange(update.redCoords); players.ForEach((p) => { p.startNewTargetPos(); }); interpolationCounter = 0; updateCounter++; }
private void broadcastBoard(BoardUpdate b) { foreach (ConnectedPlayer p in players) { b.myColor = p.color; try{ protocol.sendBoard(gameMaster.getMatchingPlayer(p.color).client.peerID, b); }catch (Exception e) { Debug.LogError(e.StackTrace); Debug.LogError(e.Message); Debug.LogError("Error Send"); } } }
private void initSmoothRenderer(BoardUpdate initUpdate) { addedPlayerPos [0] = new List <Position2D> (); addedPlayerPos [1] = new List <Position2D> (); Vector3 firstPosBlue = theRenderer.getBlockFromPos(initUpdate.blueCoords [0]).getPos(); Vector3 firstPosRed = theRenderer.getBlockFromPos(initUpdate.redCoords [0]).getPos(); players.Add(Instantiate(headPrefab, firstPosBlue, Quaternion.identity).GetComponent <SnakeHead> ()); players.Add(Instantiate(headPrefab, firstPosRed, Quaternion.identity).GetComponent <SnakeHead> ()); for (int i = 0; i < players.Count; i++) { players [i].init(playerColors [i]); } }
public void sendBoardUpdate(int[,] grid, Position2D[] playerPos, int[] dir) { List <Position2D> rCoord = new List <Position2D> (), bCoord = new List <Position2D> (); int boardSize = grid.GetLength(0); bCoord.AddRange(bodies [0].getRecentPlayerBody()); rCoord.AddRange(bodies [1].getRecentPlayerBody()); bCoord.Add(playerPos[0]); rCoord.Add(playerPos[1]); BoardUpdate update = new BoardUpdate(updateCounter++, rCoord.ToArray(), bCoord.ToArray(), dir[0], dir[1]); broadcastBoard(update); }
protected override void displayNewUpdate(GameLogState update) { if (gameOver) { return; } BoardUpdate state = SnakeGameLogProtocol.parseGameState(update.log[0]); if (state.gameOver) { handleAdminGameOver(state); } else { handleBoardUpdate(state); } }
public void handleAdminGameOver(BoardUpdate state) { gameOver = true; if (state.winnerColor == PlayerColor.None) { smoothRenderer.explodePlayer(0); smoothRenderer.explodePlayer(1); displayCrash(GameUtils.pos2DToVec2(state.blueCoords[0])); displayCrash(GameUtils.pos2DToVec2(state.redCoords[0])); } else if (state.winnerColor == PlayerColor.Red) { displayCrash(GameUtils.pos2DToVec2(state.blueCoords[0])); smoothRenderer.explodePlayer(0); } else { displayCrash(GameUtils.pos2DToVec2(state.redCoords[0])); smoothRenderer.explodePlayer(1); } }
public void handleBoardUpdate(NetworkMessage msg) { BoardUpdate updateMsg = Deserialize <BoardUpdate> (msg.reader.ReadBytesAndSize()); if (updateMsg.updateNumber <= lastUpdateID) { return; } lastUpdateID = updateMsg.updateNumber; localRenderer.handleBoardUpdate(updateMsg); //Extract information and store it lastBlocked = new List <Position2D> (); lastBlocked.AddRange(updateMsg.blueCoords); lastBlocked.AddRange(updateMsg.redCoords); lastBluePos = updateMsg.blueCoords [updateMsg.blueCoords.Length - 1]; lastRedPos = updateMsg.redCoords [updateMsg.redCoords.Length - 1]; lastBlueDir = updateMsg.blueDir; lastRedDir = updateMsg.redDir; addLocalBoardUpdate(lastBlocked, updateMsg.blueDir, updateMsg.redDir, lastBluePos, lastRedPos, BoardState.ongoing); }
public void sendBoard(int targetID, BoardUpdate board) { sendMsg(board, targetID, (short)MsgType.boardUpdate); }
//The protocol should later be re-written so we can loop through all the players public void handleBoardUpdate(BoardUpdate updateMsg) { smoothRenderer.handleGameUpdate(updateMsg); }