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; using Assets.Scripts.UI.UIEffect; using Assets.Scripts; using DG.Tweening; public class DeviceView : MonoBehaviour { [SerializeField] private SensorType mType; private SensorType SensorType { get { //Debug.Log(mType); //Enum.TryParse(mType, out SensorType sensorType); return mType; } } 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 powerUnit; //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); connectionPanel = this.transform.Find("ConnectionPanel").gameObject; var material = Instantiate(Resources.Load("UI/Material/RoundedCornersTextureMaterial")); var rect = ((RectTransform)transform).rect; material.SetVector(Shader.PropertyToID("_WidthHeightRadius"), new Vector4(rect.width, rect.height, rect.height * 0.2f, 0)); //this.GetComponent().material = material; var img1 = unconnectionPanel.GetComponent(); if(img1 != null) { img1.material = material; var gradient = unconnectionPanel.GetComponent(); if (gradient != null) { gradient.color1 = Utils.HexToColor("353543"); gradient.color2 = Utils.HexToColor("23232D"); } } var img2 = connectionPanel.GetComponent(); if(img2 != null) { img2.material = material; var gradient1 = connectionPanel.GetComponent(); if (gradient1 != null) { gradient1.color1 = Utils.HexToColor("FF7485"); gradient1.color2 = Utils.HexToColor("F93086"); } } logo = this.transform.Find("Logo").GetComponent(); mDisconnectButton = connectionPanel.transform.Find("DisconnectBtn").gameObject; var powerValueObj = connectionPanel.transform.Find("PowerValue"); if(powerValueObj != null) { powerValue = powerValueObj.gameObject.GetComponent(); } var powerUnitObj = connectionPanel.transform.Find("PowerUnit"); if(powerUnitObj != null) { powerUnit = powerUnitObj.gameObject.GetComponent(); } InitLogo(); 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"); powerUnit.text = "W"; } 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"); powerUnit.text = "KPH"; } 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"); powerUnit.text = "RPM"; } 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"); powerUnit.text = "BPM"; } else if(SensorType == SensorType.Trainer) { 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..."; title.text = GetTitle(); 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); if (connectionPanel.activeInHierarchy == false) { var connectionCanvasGroup = connectionPanel.GetComponent(); connectionCanvasGroup.alpha = 0; connectionPanel.SetActive(true); connectionCanvasGroup.DOFade(1f, .3f); } logo.sprite = sprite3; title.text = connectedDevice.Name; noDevice.text = connectedDevice.DeviceNumber.ToString(); noDevice.color = Color.white; if (powerValue != null) { powerValue.text = GetValue(connectedDevice); } } } string GetTitle() { switch (SensorType) { case SensorType.None: break; case SensorType.Cadence: return "Cadence Sensor"; break; case SensorType.HeartRate: return "Heart Rate Monitor"; break; case SensorType.Power: return "Power Meter"; break; case SensorType.Speed: break; case SensorType.SpeedCadence: return "Speed Meter"; break; case SensorType.Trainer: return "Smart Trainer"; break; case SensorType.VirtualPower: break; default: break; } return ""; } string GetValue(AbstractAntDevice connectedDevice) { switch (SensorType) { case SensorType.None: break; case SensorType.Cadence: //cadenceValue.text = (connectedDevice as ICadenceDevice).Cadence.ToString(); return (connectedDevice as ICadenceDevice).Cadence.ToString(); case SensorType.HeartRate: return (connectedDevice as IHeartRateDevice).HeartRate.ToString(); case SensorType.Power: return (connectedDevice as IPowerDevice).Power.ToString(); case SensorType.Speed: break; case SensorType.SpeedCadence: return (connectedDevice as ISpeedDevice).Speed.ToString(); 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; } return ""; } 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; } }