예제 #1
0
    /// <summary>
    /// Sets the ready state of our player to true
    /// </summary>
    /// <param name="state">If set to <c>true</c> state.</param>
    public void SetReadyTo(bool state)
    {
        LogDebugMessage("SetReadyTo game room state " + CurState);

        if (CurState == RoomStates.WaitingForPlayersReady)
        {
            OurPlayer.ChangeStateTo(state == true ? UserStates.Ready : UserStates.Connected);
        }
    }
예제 #2
0
    public void OnRealTimeMessageReceived(bool reliable, string senderId, byte[] data)
    {
        string rawData = data.ConvertToString();

        string[] dataClumps = rawData.Split(' ');

        string dataHeader = dataClumps[0];

        LogDebugMessage("New MSG: " + dataHeader + " from " + senderId);

        switch (dataHeader)
        {
        case _introductionConst: {
            MPPlayer theNewPlayer = new MPPlayer(PlayGamesPlatform.Instance.RealTime.GetConnectedParticipants().Find(x => x.ParticipantId == senderId));

            OtherPlayerJoinedRoom(theNewPlayer);
        }

        break;

        case _gameStartingConst: {
            if (CurState != RoomStates.GameInProgress)
            {
                GameStarted();

                LogDebugMessage("Game Starting!");
            }
        }

        break;

        case _playerChangedState: {
            MPPlayer senderPlayer = _playersInRoom.Find(x => x.GetID() == senderId);

            if (senderPlayer != null)
            {
                UserStates oldState = senderPlayer.GetState();

                senderPlayer.ChangeStateTo((UserStates)int.Parse(dataClumps[1]));

                //check for player leaving
                if (senderPlayer.GetState() == UserStates.Disconnected)
                {
                    OtherPlayerLeftRoom(senderPlayer);
                }

                //check to see if they are setting themselves to ready
                else if (
                    (oldState == UserStates.Ready && senderPlayer.GetState() != UserStates.Ready) ||                    //changing from ready to not ready
                    (oldState != UserStates.Ready && senderPlayer.GetState() == UserStates.Ready)                       //changing from not ready to ready
                    )
                {
                    PlayerChangedReady(senderPlayer);
                }
            }
        }
        break;
        }
    }
예제 #3
0
    /// <summary>
    /// Called when we are told that another player has joined the room
    /// Adds to the players in room list
    /// </summary>
    /// <param name="thePlayer">The player who joined.</param>
    void OtherPlayerJoinedRoom(MPPlayer thePlayer)
    {
        _playersInRoom.Add(thePlayer);
        thePlayer.ChangeStateTo(UserStates.Connected);

        if (_playersInRoom.Count >= _minOpponents)
        {
            CurState = RoomStates.WaitingForPlayersReady;
        }
    }
예제 #4
0
    /// <summary>
    /// Called when we are told that another player has left the room.
    /// Removes the player from the player list
    /// </summary>
    /// <param name="thePlayer">The player.</param>
    void OtherPlayerLeftRoom(MPPlayer thePlayer)
    {
        LogDebugMessage("Other player left room");

        _playersInRoom.Remove(thePlayer);
        thePlayer.ChangeStateTo(UserStates.Disconnected);

        if (_playersInRoom.Count < _minOpponents)
        {
            CurState = RoomStates.WaitingForPlayersConnected;
        }
    }