using UnityEngine;
using UnityEngine.UI;
namespace NextMind.Devices
{
///
/// This component displays basic information about the last connected .
///
public class ConnectedDeviceStatus : MonoBehaviour
{
///
/// Image representing the battery level.
///
[SerializeField]
private Image batteryBar = null;
///
/// Text displaying the battery level in percentage.
///
[SerializeField]
private Text batteryText = null;
///
/// Text displaying the device's name.
///
[SerializeField]
private Text deviceName = null;
///
/// The device from which we get the information to display.
///
private Device connectedDevice = null;
#region Unity Methods
private void Start()
{
Initialize();
}
private void Update()
{
UpdateUI();
}
private void OnDestroy()
{
NeuroManager neuroManager = NeuroManager.Instance;
if (neuroManager)
{
neuroManager.onDeviceConnected.RemoveListener(OnDeviceConnected);
neuroManager.onDeviceDisconnected.RemoveListener(OnDeviceDisconnected);
}
}
#endregion
///
/// Get the connected device if it exists and start listening to the connections/disconnections.
///
private void Initialize()
{
NeuroManager neuroManager = NeuroManager.Instance;
if (neuroManager.ConnectedDevices.Count > 0)
{
OnDeviceConnected(neuroManager.ConnectedDevices[0]);
}
neuroManager.onDeviceConnected.AddListener(OnDeviceConnected);
neuroManager.onDeviceDisconnected.AddListener(OnDeviceDisconnected);
}
///
/// Update each field of the UI
///
private void UpdateUI()
{
if (connectedDevice != null)
{
deviceName.text = connectedDevice.Name;
uint level = connectedDevice.GetBatteryLevel();
batteryText.text = level > 0? level + "%" : "--";
batteryBar.fillAmount = level / 100f;
}
else
{
deviceName.text = "--";
batteryText.text = "--";
batteryBar.fillAmount = 0;
}
}
#region Connection events
private void OnDeviceConnected(Device device)
{
connectedDevice = device;
}
private void OnDeviceDisconnected(Device device)
{
if (connectedDevice != null && connectedDevice == device)
{
connectedDevice = null;
}
}
#endregion
}
}