/// <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); } }
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; } }
/// <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; } }
/// <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; } }