using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.InputDevices; using System; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace AxibugEmuOnline.Client.UI { /// /// xmb信息条,设备信息条UI /// public class DevicesBar : MonoBehaviour { [SerializeField] DevicesInfoItem ITEM_TEMPLATE; List m_runtimeItemUI = new List(); private void Awake() { ITEM_TEMPLATE.gameObject.SetActiveEx(false); } void OnEnable() { App.input.OnDeviceConnected += Input_OnDeviceConnected; App.input.OnDeviceLost += Input_OnDeviceLost; foreach (var device in App.input.GetDevices()) { AddDeviceItemUI(device); } } private void OnDisable() { App.input.OnDeviceConnected -= Input_OnDeviceConnected; App.input.OnDeviceLost -= Input_OnDeviceLost; foreach (var itemUI in m_runtimeItemUI) { Destroy(itemUI.gameObject); } m_runtimeItemUI.Clear(); } private void AddDeviceItemUI(InputDevice_D device) { var newItemUI = GameObject.Instantiate(ITEM_TEMPLATE.gameObject, ITEM_TEMPLATE.transform.parent).GetComponent(); newItemUI.gameObject.SetActiveEx(true); newItemUI.SetData(device); m_runtimeItemUI.Add(newItemUI); } void Input_OnDeviceConnected(InputDevice_D connectDevice) { AddDeviceItemUI(connectDevice); } private void Input_OnDeviceLost(InputDevice_D lostDevice) { var targetUI = m_runtimeItemUI.FirstOrDefault(itemUI => itemUI.Datacontext == lostDevice); Destroy(targetUI.gameObject); m_runtimeItemUI.Remove(targetUI); } } }