using Assets.Scripts.Devices.Ant; using System.Collections; using System.Collections.Generic; using System; using System.Linq; using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; using UnityEngine.Events; using Assets.Scripts.Devices.Ant.Interfaces; public class DeviceView : MonoBehaviour { [SerializeField] private string mType; private SensorType SensorType { get { //Debug.Log(mType); Enum.TryParse(mType, out SensorType sensorType); return sensorType; } } private GameObject mSearchButton; private GameObject mPairButton; private GameObject mDisconnectButton; private GameObject unconnectionPanel; private GameObject connectionPanel; private Text searchState; private ConnectDeviceModal deviceModal; private Text title; private Text noDevice; private Text powerValue; private Text cadenceValue; private Text speedValue; private Text heartRateValue; private Image logo; /// /// 没有设备的logo /// private Sprite sprite0; /// /// 连接中的logo /// private Sprite sprite1; /// /// 已连接的logo /// private Sprite sprite3; private float timer = 1.0f; private void Awake() { title = this.transform.Find("Title").GetComponent(); noDevice = this.transform.Find("NoDevice").GetComponent(); unconnectionPanel = this.transform.Find("UnconnectionPanel").gameObject; mSearchButton = unconnectionPanel.transform.Find("SearchButton").gameObject; mPairButton = unconnectionPanel.transform.Find("PairButton").gameObject; searchState = unconnectionPanel.transform.Find("SearchState").GetComponent(); mPairButton.SetActive(false); logo = this.transform.Find("Logo").GetComponent(); InitLogo(); connectionPanel = this.transform.Find("ConnectionPanel").gameObject; mDisconnectButton = connectionPanel.transform.Find("DisconnectBtn").gameObject; var powerValueObj = connectionPanel.transform.Find("PowerValue"); if(powerValueObj != null) { powerValue = powerValueObj.gameObject.GetComponent(); } var cadenceValueObj = connectionPanel.transform.Find("CadenceValue"); if (cadenceValueObj != null) { cadenceValue = cadenceValueObj.gameObject.GetComponent(); } var speedValueObj = connectionPanel.transform.Find("SpeedValue"); if (speedValueObj != null) { speedValue = speedValueObj.gameObject.GetComponent(); } var heartRateValueObj = connectionPanel.transform.Find("HeartRateValue"); if(heartRateValueObj != null) { heartRateValue = heartRateValueObj.gameObject.GetComponent(); } connectionPanel.SetActive(false); UIManager.AddEvent(mPairButton, EventTriggerType.PointerClick, new UnityAction(e => { if (deviceModal == null) { var obj = Resources.Load("UI/Prefab/Device/ConnectDeviceModal"); GameObject gameObject = (GameObject)Instantiate(obj); deviceModal = gameObject.GetComponent(); } deviceModal.SensorType = this.SensorType; UIManager.Show(deviceModal, null, true); })); UIManager.AddEvent(mDisconnectButton, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { //var device = GetDevice(); //if(device != null && device.State == DeviceState.Connected) //{ // device.Disconnect(); //} var obj = Resources.Load("UI/Prefab/Device/ConnectDeviceModal"); GameObject gameObject = (GameObject)Instantiate(obj); deviceModal = gameObject.GetComponent(); deviceModal.SensorType = this.SensorType; UIManager.Show(deviceModal, null, true); })); } void InitLogo() { if (SensorType == SensorType.Power) { sprite0 = Resources.Load("Images/Devices/Power_0"); sprite1 = Resources.Load("Images/Devices/Power_1"); sprite3 = Resources.Load("Images/Devices/Power_3"); } else if (SensorType == SensorType.SpeedCadence) { sprite0 = Resources.Load("Images/Devices/Speed_0"); sprite1 = Resources.Load("Images/Devices/Speed_1"); sprite3 = Resources.Load("Images/Devices/Speed_3"); } else if (SensorType == SensorType.Cadence) { sprite0 = Resources.Load("Images/Devices/Cadence_0"); sprite1 = Resources.Load("Images/Devices/Cadence_1"); sprite3 = Resources.Load("Images/Devices/Cadence_3"); } else if (SensorType == SensorType.HeartRate) { sprite0 = Resources.Load("Images/Devices/Heart Rate_0"); sprite1 = Resources.Load("Images/Devices/Heart Rate_1"); sprite3 = Resources.Load("Images/Devices/Heart Rate_3"); } else { sprite0 = Resources.Load("Images/Devices/Trainer_0"); sprite1 = Resources.Load("Images/Devices/Trainer_1"); sprite3 = Resources.Load("Images/Devices/Trainer_3"); } } // Start is called before the first frame update void Start() { Main(); } // Update is called once per frame void Update() { timer -= Time.deltaTime; if (timer <= 0) { Main(); timer = 1.0f; } } void Main() { var connectedDevice = GetCurrentDevice(); if(connectedDevice == null) { connectedDevice = GetDevice(); } if(connectedDevice == null) { unconnectionPanel.SetActive(true); connectionPanel.SetActive(false); logo.sprite = sprite0; noDevice.text = "NO DEVICE"; searchState.text = "Searching..."; switch (SensorType) { case SensorType.None: break; case SensorType.Cadence: title.text = "Cadence Sensor"; break; case SensorType.HeartRate: title.text = "Heart Rate Monitor"; break; case SensorType.Power: title.text = "Power Meter"; break; case SensorType.Speed: break; case SensorType.SpeedCadence: title.text = "Speed Meter"; break; case SensorType.Trainer: title.text = "Smart Trainer"; break; case SensorType.VirtualPower: break; default: break; } var hasDevice = AntConnector.Instance().discoveredDevices.Any(d => d.Sensor == SensorType); if (hasDevice) { mSearchButton.SetActive(false); mPairButton.SetActive(true); logo.sprite = sprite1; } else { mSearchButton.SetActive(true); mPairButton.SetActive(false); } } else if(connectedDevice.State == DeviceState.Connecting) { unconnectionPanel.SetActive(true); connectionPanel.SetActive(false); logo.sprite = sprite1; title.text = connectedDevice.Name; noDevice.text = connectedDevice.DeviceNumber.ToString(); searchState.text = "Connecting..."; } else if (connectedDevice.State == DeviceState.Connected) { unconnectionPanel.SetActive(false); connectionPanel.SetActive(true); logo.sprite = sprite3; title.text = connectedDevice.Name; noDevice.text = connectedDevice.DeviceNumber.ToString(); noDevice.color = Color.white; switch (SensorType) { case SensorType.None: break; case SensorType.Cadence: cadenceValue.text = (connectedDevice as ICadenceDevice).Cadence.ToString(); break; case SensorType.HeartRate: heartRateValue.text = (connectedDevice as IHeartRateDevice).HeartRate.ToString(); break; case SensorType.Power: powerValue.text = (connectedDevice as IPowerDevice).Power.ToString(); break; case SensorType.Speed: break; case SensorType.SpeedCadence: speedValue.text = (connectedDevice as ISpeedDevice).Speed.ToString(); break; case SensorType.Trainer: powerValue.text = (connectedDevice as IPowerDevice).Power.ToString(); //cadenceValue.GetComponent().text = (connectedDevice as ICadenceDevice).Cadence.ToString(); //speedValue.GetComponent().text = (connectedDevice as ISpeedDevice).Speed.ToString(); break; case SensorType.VirtualPower: break; default: break; } } } AbstractAntDevice GetCurrentDevice() { return AntConnector.Instance().discoveredDevices.FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType); } /// /// 获取已经连接的设备 /// /// AbstractAntDevice GetDevice() { //return AntConnector.Instance().discoveredDevices.FirstOrDefault(d => (d.State == DeviceState.Connected || d.State == DeviceState.Connecting) && d.Sensor == SensorType); var devices = AntConnector.Instance().discoveredDevices.Where(d => (d.State == DeviceState.Connected)); switch (SensorType) { case SensorType.None: break; case SensorType.Cadence: return devices.FirstOrDefault(d => d is ICadenceDevice); case SensorType.HeartRate: return devices.FirstOrDefault(d => d is IHeartRateDevice); case SensorType.Power: var item = devices.FirstOrDefault(d => d is IPowerDevice); //if (powerValue != null) //{ // powerValue.GetComponent().text = (item as IPowerDevice).Power.ToString(); //} return item; case SensorType.Speed: case SensorType.SpeedCadence: return devices.FirstOrDefault(d => d is ISpeedDevice); case SensorType.Trainer: var item3 = devices.FirstOrDefault(d => d.Sensor == SensorType.Trainer); return item3; case SensorType.VirtualPower: break; default: return null; } return null; } }