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 } }