Nicklas Bourelius b15f3b7391 Color now working.
Need to implement: Slider and logic for it and UI and the logic for that as well.
2024-05-23 18:36:51 +02:00

122 lines
3.2 KiB
C#

#if UNITY_TMPRO
using TMPro;
using UnityEngine;
namespace Proxima
{
[HelpURL("https://www.unityproxima.com/docs")]
public class ProximaStatusUI : MonoBehaviour
{
// The inspector to monitor status from.
[SerializeField]
private ProximaInspector _proximaInspector;
public ProximaInspector ProximaInspector
{
get => _proximaInspector;
set => _proximaInspector = value;
}
// GameObject to show when Proxima is enabled.
[SerializeField]
private GameObject _uiRoot;
public GameObject UIRoot
{
get => _uiRoot;
set => _uiRoot = value;
}
// Label to show address to connect to Proxima.
[SerializeField]
private TMP_InputField _connectInfoLabel;
public TMP_InputField ConnectInfoLabel
{
get => _connectInfoLabel;
set => _connectInfoLabel = value;
}
// Label to show the current status and errors.
[SerializeField]
private TMP_Text _statusLabel;
public TMP_Text StatusLabel
{
get => _statusLabel;
set => _statusLabel = value;
}
private bool _isPortrait;
void Start()
{
_proximaInspector.Status.Changed += UpdateUI;
UpdateUI();
}
void OnDestroy()
{
if (_proximaInspector)
{
_proximaInspector.Status.Changed -= UpdateUI;
}
}
private void UpdateUI()
{
if (_uiRoot)
{
_uiRoot.SetActive(_proximaInspector.Status.Listening);
}
if (_connectInfoLabel)
{
_connectInfoLabel.text = _proximaInspector.Status.ConnectInfo;
}
if (_statusLabel)
{
if (_proximaInspector.Status.Connections > 0)
{
if (_isPortrait)
{
_statusLabel.text = "Connected: " + _proximaInspector.Status.Connections;
}
else
{
_statusLabel.text = "Proxima connected to " + _proximaInspector.Status.Connections +
(_proximaInspector.Status.Connections > 1 ? " clients." : " client.");
}
}
else if (_proximaInspector.Status.Error != null)
{
_statusLabel.text = _proximaInspector.Status.Error;
}
else if (_proximaInspector.Status.Listening)
{
_statusLabel.text = _isPortrait ? "Listening" : "Proxima is listening for connections.";
}
}
}
void Update()
{
bool isPortrait = (float)Screen.width / (float)Screen.height < 0.75f;
if (_isPortrait != isPortrait)
{
_isPortrait = isPortrait;
UpdateUI();
}
}
}
}
#else
namespace Proxima
{
public class ProximaStatusUI : UnityEngine.MonoBehaviour
{
public ProximaInspector ProximaInspector;
}
}
#endif