private void AddPlayerListViewElement(PhotonPlayer player) { ListViewElementPhotonPlayer element = null; if (null != ListViewElementPool) { element = ListViewElementPool.GetObject(); } if (null == element) { element = GameObject.Instantiate <ListViewElementPhotonPlayer>(ListViewElementPrefab); } else { element.gameObject.SetActive(true); } ListViewPlayers.AddControl(element.gameObject); string buttonText = GetPlayerListViewElementText(player); element.Text.text = buttonText; element.Player = player; if (false == PhotonNetwork.offlineMode) { RoomLobbyPlayerState playerState = (RoomLobbyPlayerState)player.CustomProperties[PlayerCustomPropertiesKey.RoomLobbyPlayerState.ToString()]; SetListViewElementImageColor(element, playerState); } }
public void OnButtonReadyClicked() { RoomLobbyPlayerState state = (RoomLobbyPlayerState)PhotonNetwork.player.CustomProperties[PlayerCustomPropertiesKey.RoomLobbyPlayerState.ToString()]; state = (state == RoomLobbyPlayerState.Ready) ? RoomLobbyPlayerState.NotReady : RoomLobbyPlayerState.Ready; UIRoom.SetPhotonPlayerRoomLobbyState(state); SetReadyButtonText(state); }
/*Private consts fields*/ /*Private fields*/ /*Public consts fields*/ /*Public fields*/ /*Private methods*/ /*Public methods*/ public static void SetPhotonPlayerRoomLobbyState(RoomLobbyPlayerState state) { if (false == PhotonNetwork.offlineMode) { Hashtable customProperties = PhotonNetwork.player.CustomProperties; customProperties.Clear(); customProperties.Add(PlayerCustomPropertiesKey.RoomLobbyPlayerState.ToString(), state); PhotonNetwork.player.SetCustomProperties(customProperties); } }
/// <summary> /// Indexes of array defined in PUN documentation see: /// https://doc-api.photonengine.com/en/pun/v1/group__public_api.html#ggaf30bbea51cc8c4b1ddc239d1c5c1468fa67402d95c324cda2b6d6e2fc391ae941 /// </summary> public override void OnPhotonPlayerPropertiesChanged(object[] playerAndUpdatedProps) { base.OnPhotonPlayerPropertiesChanged(playerAndUpdatedProps); PhotonPlayer player = (PhotonPlayer)playerAndUpdatedProps[0]; Hashtable customProperties = (Hashtable)playerAndUpdatedProps[1]; ListViewElementPhotonPlayer playerElement = GetPhotonPlayerListViewElement(ListViewPlayers, player); RoomLobbyPlayerState state = (RoomLobbyPlayerState)customProperties[PlayerCustomPropertiesKey.RoomLobbyPlayerState.ToString()]; SetListViewElementImageColor(playerElement, state); playerElement.Text.text = GetPlayerListViewElementText(player); NumberOfReadyClients = (state == RoomLobbyPlayerState.Ready) ? ++NumberOfReadyClients : --NumberOfReadyClients; SetStartButtonState(); }
private void SetReadyButtonText(RoomLobbyPlayerState state) { string text = string.Empty; switch (state) { case RoomLobbyPlayerState.Ready: text = "Not ready"; break; case RoomLobbyPlayerState.NotReady: text = "Ready"; break; default: break; } TextButtonReady.text = text; }
/// <summary> /// Returns button's text of single player in a room lobby. Text contains /// player's nickname and role in a room lobby /// </summary> private string GetPlayerListViewElementText(PhotonPlayer player) { string buttonText = player.NickName + " "; if (true == player.IsLocal) { buttonText += "(You) "; } if (true == player.IsMasterClient) { buttonText += "(Room master) "; } if (false == PhotonNetwork.offlineMode) { RoomLobbyPlayerState playerState = (RoomLobbyPlayerState)player.CustomProperties[PlayerCustomPropertiesKey.RoomLobbyPlayerState.ToString()]; switch (playerState) { case RoomLobbyPlayerState.Ready: buttonText += "\nReady"; break; case RoomLobbyPlayerState.NotReady: buttonText += "\nNot ready"; break; default: break; } } return(buttonText); }
/// <summary> /// Sets color if image according to player state /// </summary> private void SetListViewElementImageColor(ListViewElementPhotonPlayer element, RoomLobbyPlayerState state) { switch (state) { case RoomLobbyPlayerState.Ready: element.BackgroundImage.color = ListViewElementPlayerReadyColor; break; case RoomLobbyPlayerState.NotReady: element.BackgroundImage.color = ListViewElementPlayerNotReadyColor; break; default: break; } }