// --------------------------------------------------------------------------------------------------------------------
//
// Part of: Pun Cockpit
//
// developer@exitgames.com
// --------------------------------------------------------------------------------------------------------------------
using System.Collections;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
using System.Collections.Generic;
using Photon.Realtime;
namespace Photon.Pun.Demo.Cockpit
{
///
/// Player list UI View.
///
public class PlayerListView : MonoBehaviourPunCallbacks
{
public PlayerDetailsController PlayerDetailManager;
public PlayerListCell CellPrototype;
public Text PlayerCountsText;
public Text UpdateStatusText;
Dictionary playerCellList = new Dictionary();
void Awake()
{
CellPrototype.gameObject.SetActive(false);
}
public override void OnEnable()
{
base.OnEnable();
UpdateStatusText.text = string.Empty;
if (PhotonNetwork.CurrentRoom == null)
{
return;
}
RefreshCount();
foreach (KeyValuePair _entry in PhotonNetwork.CurrentRoom.Players)
{
if (playerCellList.ContainsKey(_entry.Key))
{
continue;
}
//Debug.Log("PlayerListView:adding player " + _entry.Key);
playerCellList[_entry.Key] = Instantiate(CellPrototype);
playerCellList[_entry.Key].transform.SetParent(CellPrototype.transform.parent, false);
playerCellList[_entry.Key].gameObject.SetActive(true);
playerCellList[_entry.Key].AddToList(_entry.Value, false);
}
}
public void SelectPlayer(Player player)
{
PlayerDetailManager.SetPlayerTarget(player);
}
public override void OnPlayerEnteredRoom(Player newPlayer)
{
//Debug.Log("PlayerListView:OnPlayerEnteredRoom:" + newPlayer);
// we create the cell
if (!playerCellList.ContainsKey(newPlayer.ActorNumber))
{
playerCellList[newPlayer.ActorNumber] = Instantiate(CellPrototype.gameObject).GetComponent();
playerCellList[newPlayer.ActorNumber].transform.SetParent(CellPrototype.transform.parent, false);
playerCellList[newPlayer.ActorNumber].gameObject.SetActive(true);
playerCellList[newPlayer.ActorNumber].AddToList(newPlayer, true);
}
else // rejoin
{
playerCellList[newPlayer.ActorNumber].RefreshInfo(null);
}
StartCoroutine("UpdateUIPing");
}
public override void OnMasterClientSwitched(Player newMasterClient)
{
foreach (KeyValuePair _entry in PhotonNetwork.CurrentRoom.Players)
{
playerCellList[_entry.Key].RefreshInfo(null);
}
}
public override void OnPlayerPropertiesUpdate(Player target, ExitGames.Client.Photon.Hashtable changedProps)
{
if (playerCellList.ContainsKey(target.ActorNumber))
{
playerCellList[target.ActorNumber].RefreshInfo(changedProps);
}
else
{
Debug.LogWarning("PlayerListView: missing Player Ui Cell for " + target, this);
}
StartCoroutine("UpdateUIPing");
}
public override void OnPlayerLeftRoom(Player otherPlayer)
{
//Debug.Log("OnPlayerLeftRoom isinactive " + otherPlayer.IsInactive);
// bool _remove = false;
if (!PhotonNetwork.PlayerListOthers.Contains(otherPlayer))
{
playerCellList[otherPlayer.ActorNumber].RemoveFromList();
playerCellList.Remove(otherPlayer.ActorNumber);
}
else
{
playerCellList[otherPlayer.ActorNumber].RefreshInfo(null);
}
// _remove = otherPlayer.IsInactive && playerCellList [otherPlayer.ID].isInactiveCache;
//
// if (otherPlayer.IsInactive && ! playerCellList [otherPlayer.ID].isInactiveCache) {
//
// //playerCellList [otherPlayer.ID].isInactiveCache = true;
// playerCellList[otherPlayer.ID].RefreshInfo(null);
// }
//
// if (_remove)
// {
// playerCellList[otherPlayer.ID].RemoveFromList ();
// playerCellList.Remove (otherPlayer.ID);
// }
StartCoroutine("UpdateUIPing");
}
void RefreshCount()
{
if (PhotonNetwork.CurrentRoom != null)
{
PlayerCountsText.text = PhotonNetwork.CurrentRoom.PlayerCount.ToString("00");
}
}
IEnumerator UpdateUIPing()
{
UpdateStatusText.text = "Updated";
yield return new WaitForSeconds(1f);
UpdateStatusText.text = string.Empty;
}
public void ResetList()
{
foreach (KeyValuePair entry in playerCellList)
{
if (entry.Value != null)
{
Destroy(entry.Value.gameObject);
}
}
playerCellList = new Dictionary();
}
}
}