// --------------------------------------------------------------------------------------------------------------------
//
// Part of: Photon Unity Utilities,
//
//
// Player list cell representing a given PhotonPlayer
//
// developer@exitgames.com
// --------------------------------------------------------------------------------------------------------------------
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using Photon.Realtime;
using Photon.Pun.UtilityScripts;
namespace Photon.Pun.Demo.Cockpit
{
///
/// Player list cell representing a given PhotonPlayer
///
public class PlayerListCell : MonoBehaviour
{
public PlayerListView ListManager;
public Text NumberText;
public Text NameText;
public Image ActiveFlag;
public Color InactiveColor;
public Color ActiveColor;
public Text isLocalText;
public Image isMasterFlag;
public LayoutElement LayoutElement;
Player _player;
public bool isInactiveCache;
public void RefreshInfo(ExitGames.Client.Photon.Hashtable changedProps)
{
UpdateInfo();
}
public void AddToList(Player info, bool animate = false)
{
//Debug.Log("AddToList " + info.ToStringFull());
_player = info;
UpdateInfo();
if (animate)
{
StartCoroutine("Add");
}
else
{
LayoutElement.minHeight = 30f;
}
}
public void RemoveFromList()
{
StartCoroutine("Remove");
}
public void OnClick()
{
ListManager.SelectPlayer(_player);
}
void UpdateInfo()
{
if (string.IsNullOrEmpty(_player.NickName))
{
NameText.text = _player.ActorNumber.ToString();
}
int _index = _player.GetPlayerNumber();
NumberText.text = "#" + _index.ToString("00"); // if this function was not called on every update, we would need to listen to the PlayerNumbering delegate
NameText.text = _player.NickName;
ActiveFlag.color = _player.IsInactive ? InactiveColor : ActiveColor;
isLocalText.gameObject.SetActive(_player.IsLocal);
isMasterFlag.gameObject.SetActive(_player.IsMasterClient);
// reorder the list to match player number
if (_index >= 0 && this.transform.GetSiblingIndex() != _index)
{
this.transform.SetSiblingIndex(_index + 1);
}
}
IEnumerator Add()
{
this.isInactiveCache = false;
LayoutElement.minHeight = 0f;
while (LayoutElement.minHeight != 30f)
{
LayoutElement.minHeight = Mathf.MoveTowards(LayoutElement.minHeight, 30f, 2f);
yield return new WaitForEndOfFrame();
}
}
IEnumerator Remove()
{
while (LayoutElement.minHeight != 0f)
{
LayoutElement.minHeight = Mathf.MoveTowards(LayoutElement.minHeight, 0f, 2f);
yield return new WaitForEndOfFrame();
}
Destroy(this.gameObject);
}
}
}