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; 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 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(); InitLogo(); 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(); powerValue.text = (connectedDevice as ICadenceDevice).Cadence.ToString(); break; case SensorType.HeartRate: powerValue.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: powerValue.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; } }