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); } }
private void OnDisable() { for (int i = ListViewPlayers.Controls.Count - 1; i >= 0; i--) { ListViewElementPhotonPlayer element = ListViewPlayers.Controls[i].GetComponent <ListViewElementPhotonPlayer>(); DisablePlayerListViewElement(element); } }
public override void OnPhotonPlayerDisconnected(PhotonPlayer disconnectedPlayer) { base.OnPhotonPlayerDisconnected(disconnectedPlayer); ListViewElementPhotonPlayer playerElement = GetPhotonPlayerListViewElement(ListViewPlayers, disconnectedPlayer); DisablePlayerListViewElement(playerElement); SetStartButtonState(); SetListViewPlayersText(); }
/// <summary> /// Disables list view element and returns it back to pool /// </summary> /// <param name="element"></param> private void DisablePlayerListViewElement(ListViewElementPhotonPlayer element) { ListViewPlayers.RemoveControl(element.gameObject, false); if (null == ListViewElementPool) { ListViewElementPool = new ObjectPool <ListViewElementPhotonPlayer>(); } element.gameObject.SetActive(false); ListViewElementPool.AddObject(element); }
public override void OnMasterClientSwitched(PhotonPlayer newMasterClient) { base.OnMasterClientSwitched(newMasterClient); ListViewElementPhotonPlayer newMasterClientElement = GetPhotonPlayerListViewElement(ListViewPlayers, newMasterClient); newMasterClientElement.Text.text = GetPlayerListViewElementText(newMasterClient); if (true == PhotonNetwork.isMasterClient) { ButtonStartGame.interactable = true; } }
/// <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(); }
/// <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; } }