Exemplo n.º 1
0
 private void OnModTranslated()
 {
     if (phase.State == (int)Phase.ModLoading)
     {
         phase.State = (int)Phase.StartCondition;
         NetworkGameState gameState = null;
         switch (lobbyChoices.MatchState)
         {
         case LobbyMatchState.FreshLobby:
         case LobbyMatchState.RepeatGame:
             if (connHelper.CurrentMode == ConnectionHelper.Mode.Host)
             {
                 try {
                     gameState = startGenerator.Send();
                 } catch (BoardSetupException ex) {
                     loadingError.Send(ex.Message);
                 }
             }
             break;
         }
         if (phase.State == (int)Phase.StartCondition)
         {
             sendGameState.Send(gameState);
         }
     }
 }
Exemplo n.º 2
0
 private void OnReconnectionReplyReceived(NetworkGameState gameState)
 {
     if (state.State == (int)ReconnectionState.WaitingForServerReply)
     {
         state.State = (int)ReconnectionState.SignaledReady;
         if (gameState == null)
         {
             BalugaDebug.Log("Server replied no game state");
             ExitToLobby();
         }
         else
         {
             Board board = createBoard.Send(gameState);
             scene.Game.Components.Remove((int)ComponentKeys.GameBoard);
             scene.Game.Components.Register((int)ComponentKeys.GameBoard, board);
             newBoardMessage.Send(board);
             sendReady.Send(true);
         }
     }
 }
Exemplo n.º 3
0
        private Board CreateBoard(NetworkGameState state)
        {
            UnityEngine.Debug.Log("Board creation command");

            Board board = new Board();

            if (localPlayer.IsHost)
            {
                board.LocalPlayerOrder = state.hostPlayerOrder;
            }
            else
            {
                if (state.hostPlayerOrder == PlayerTurnOrder.First)
                {
                    board.LocalPlayerOrder = PlayerTurnOrder.Second;
                }
                else
                {
                    board.LocalPlayerOrder = PlayerTurnOrder.First;
                }
            }
            board.TurnNumber   = state.turnNumber;
            board.ActivePlayer = state.activePlayer;
            board.TurnState    = state.turnState;
            board.Pieces       = new List <Piece>();
            foreach (var piece in state.pieces)
            {
                board.Pieces.Add(new Piece()
                {
                    OwnerPlayer   = piece.owner,
                    PrototypeID   = piece.prototypeID,
                    BoardPosition = piece.position,
                    IsCaptured    = piece.isCaptured,
                    NumberOfMoves = piece.numberMovesTaken,
                });
            }
            UnityEngine.Debug.LogError(
                string.Format("New board, turn info: local {0}, active {1}, number {2}",
                              board.LocalPlayerOrder, board.ActivePlayer, board.TurnNumber));
            return(board);
        }
Exemplo n.º 4
0
        private NetworkGameState CompileState()
        {
            NetworkGameState state = new NetworkGameState();

            state.activePlayer = board.ActivePlayer;
            if (localPlayer.IsHost)
            {
                state.hostPlayerOrder = board.LocalPlayerOrder;
            }
            else
            {
                if (board.LocalPlayerOrder == PlayerTurnOrder.First)
                {
                    state.hostPlayerOrder = PlayerTurnOrder.Second;
                }
                else
                {
                    state.hostPlayerOrder = PlayerTurnOrder.First;
                }
            }
            state.turnNumber = board.TurnNumber;
            state.turnState  = board.TurnState;

            // Pieces
            state.pieces = new NetworkGameStatePiece[board.Pieces.Count];
            for (int p = 0; p < state.pieces.Length; p++)
            {
                NetworkGameStatePiece piece = new NetworkGameStatePiece();
                state.pieces[p] = piece;
                Piece livePiece = board.Pieces[p];
                piece.prototypeID      = livePiece.PrototypeID;
                piece.position         = livePiece.BoardPosition;
                piece.owner            = livePiece.OwnerPlayer;
                piece.isCaptured       = livePiece.IsCaptured;
                piece.numberMovesTaken = livePiece.NumberOfMoves;
            }

            return(state);
        }
Exemplo n.º 5
0
 private void OnReceiveConditions(NetworkGameState state)
 {
     if (phase.State == (int)Phase.StartCondition)
     {
         if (state == null)
         {
             ExitToLobby();
         }
         else
         {
             phase.State = (int)Phase.ReadyToPlay;
             Board board = Components.Get <Query <Board, NetworkGameState> >
                               ((int)ComponentKeys.CreateBoardCommand).Send(state);
             if (Game.Components.Contains((int)ComponentKeys.GameBoard))
             {
                 Game.Components.Remove((int)ComponentKeys.GameBoard);
             }
             Game.Components.Register((int)ComponentKeys.GameBoard, board);
             sendReady.Send(true);
         }
     }
 }
        private NetworkGameState CalculateStartingConditions()
        {
            Debug.LogError("Calculating start");

            PlayerTurnOrder hostOrder = PlayerTurnOrder.Undecided;

            switch (lobby.OrderChoice)
            {
            case LobbyTurnOrderChoice.HostIsFirst:
                hostOrder = PlayerTurnOrder.First;
                break;

            case LobbyTurnOrderChoice.ClientIsFirst:
                hostOrder = PlayerTurnOrder.Second;
                break;

            default: {
                bool hostFirst = UnityEngine.Random.value < 0.5f;
                hostOrder = hostFirst ? PlayerTurnOrder.First : PlayerTurnOrder.Second;
            }
            break;
            }

            NetworkGameState gsc = new NetworkGameState()
            {
                hostPlayerOrder = hostOrder,
                turnNumber      = 0,
                activePlayer    = PlayerTurnOrder.First,
                turnState       = TurnState.None,
            };

            SetupBoard lBoard = new SetupBoard();

            lBoard.Width  = db.BoardDimensions.x;
            lBoard.Length = db.BoardDimensions.y;
            ScriptRuntimeException luaException;

            scripts.CallFunction(db.SetupFunction, lBoard, out luaException);
            if (luaException != null)
            {
                throw new BoardSetupException(string.Format("Board setup exception: exception in Lua code: {0}", luaException.DecoratedMessage));
            }

            if (lBoard.NumPieces == 0)
            {
                throw new BoardSetupException("Board setup exception: No piece created");
            }
            HashSet <IntVector2> takenPositions = new HashSet <IntVector2>();
            bool anyPlayer1 = false;
            bool anyPlayer2 = false;

            List <NetworkGameStatePiece> pieceList = new List <NetworkGameStatePiece>();

            for (int p = 1; p <= lBoard.NumPieces; p++)
            {
                SetupPiece      lPiece = lBoard.GetPiece(p);
                IntVector2      pos    = TranslatePosition(lPiece, p, takenPositions);
                PlayerTurnOrder player = TranslatePlayer(lPiece, p);
                switch (player)
                {
                case PlayerTurnOrder.First:
                    anyPlayer1 = true;
                    break;

                case PlayerTurnOrder.Second:
                    anyPlayer2 = true;
                    break;
                }
                int prototype = TranslatePrototype(lPiece, p);
                NetworkGameStatePiece piece = new NetworkGameStatePiece()
                {
                    prototypeID      = prototype,
                    owner            = player,
                    position         = pos,
                    isCaptured       = false,
                    numberMovesTaken = 0,
                };
                pieceList.Add(piece);
            }

            if (!anyPlayer1)
            {
                throw new BoardSetupException("Board setup exception: First player given no pieces");
            }
            else if (!anyPlayer2)
            {
                throw new BoardSetupException("Board setup exception: Second player given no pieces");
            }

            gsc.pieces = pieceList.ToArray();

            return(gsc);
        }
Exemplo n.º 7
0
        private void SendGameState()
        {
            NetworkGameState state = compileGameState.Send();

            sendGameState.Send(state);
        }