using Assets.Scripts.Devices.Ant; using System.Collections; using System.Collections.Generic; using System; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using Assets.Scripts.Devices.Ant.Interfaces; using Assets.Scripts.UI.Control; using Assets.Scripts; using Assets.Scripts.UI.Prefab.Device; using Assets.Scripts.Devices; public class ConnectDeviceModal : PFUIPanel { private float timer = 1.0f; private SensorType mSensorType = SensorType.None; public SensorType SensorType { get { return mSensorType; } set { //Debug.Log(value); mSensorType = value; var deviceInfoStr = Utils.deviceDict[value.ToString()]; if (deviceInfoStr != null) { var deviceInfo = deviceInfoStr.Split('|'); if (deviceInfo.Length == 2) { Title.text = deviceInfo[0]; Logo.sprite = Resources.Load(deviceInfo[1]); } } } } private Image Logo; private UnityEngine.Object deviceItem; private VerticalLayoutGroup content; private PfUIButton connectBtn; private Text connectBtnText; private Dictionary deviceList; private Text noDevice,Title; private RectTransform searchIconRect; protected override void Awake() { base.Awake(); deviceList = new Dictionary(); var container = this.transform.Find("GameObject"); var closeBtn = container.Find("CloseBtn"); Logo = container.Find("Logo").GetComponent(); Title = container.Find("Title").GetComponent(); var panel = container.Find("Panel"); content = panel.Find("Scroll View").Find("Viewport").Find("Content").GetComponent(); noDevice = container.Find("NoDevice").GetComponent(); searchIconRect = container.Find("SearchIcon").GetComponent(); _x = searchIconRect.localPosition.x; _y = searchIconRect.localPosition.y; base.SetRounded(panel.GetComponent().transform, 20f); UIManager.AddEvent(closeBtn.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { this.Close(); //DestroyImmediate(this.gameObject); })); deviceItem = Resources.Load("UI/Prefab/Device/DeviceItem"); connectBtn = container.Find("ConnectBtn").GetComponent(); connectBtnText = connectBtn.transform.Find("Text").GetComponent(); UIManager.AddEvent(connectBtn.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { if (!connectBtnText.text.Equals("DISCONNECT")) { foreach (var item in deviceList) { if (item.Value.GetStatus() == false) { if (SensorType == SensorType.SpeedCadence) { if (item.Value.DeviceInfo.Sensor == SensorType.SpeedCadence || item.Value.DeviceInfo.Sensor == SensorType.Cadence) { Debug.Log("断开设备" + item.Value.DeviceInfo.Name); item.Value.DeviceInfo.Disconnect(); DeviceCache.Remove(item.Value.DeviceInfo); } } else if (item.Value.DeviceInfo.Sensor == SensorType) { item.Value.DeviceInfo.Disconnect(); DeviceCache.Remove(item.Value.DeviceInfo); } } } var dd = deviceList.Select(d => d.Value).Where(d => d.GetStatus()).FirstOrDefault(); if (dd != null) { dd.DeviceInfo.Connect(); DeviceCache.Add(dd.DeviceInfo); } } else { foreach (var item in deviceList) { Debug.Log("116" + item.Value.DeviceInfo.Name+ item.Value.GetStatus().ToString()); if (item.Value.GetStatus()) { if (item.Value.DeviceInfo.Sensor == SensorType) { item.Value.DeviceInfo.Disconnect(); Debug.Log("121" + item.Value.DeviceInfo.Name + "断开"); DeviceCache.Remove(item.Value.DeviceInfo); } } } } this.Close(); })); } // Start is called before the first frame update protected override void Start() { SearchDevice(); } // Update is called once per frame void Update() { timer -= Time.deltaTime; if(timer <= 0) { SearchDevice(); timer = 1.0f; } Move(); } private void SearchDevice() { if (SensorType != SensorType.None) { //Debug.Log(AntConnector.Instance().discoveredDevices.Count(d => d.Sensor == SensorType)); var devices = new List(); //var a = AntConnector.Instance().discoveredDevices; switch (SensorType) { case SensorType.SpeedCadence: case SensorType.Cadence: devices = App.MainDeviceAdapter.GetDevices().Where(d => (d.Sensor == SensorType.Cadence || d.Sensor == SensorType.SpeedCadence) || (d is ICadenceDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList(); break; case SensorType.HeartRate: devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is IHeartRateDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList(); break; case SensorType.Power: devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is IPowerDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList(); break; case SensorType.Speed: devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType || (d is ISpeedDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList(); break; case SensorType.Trainer: devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType && d is ITrainerDevice).ToList(); break; case SensorType.Rower: devices = App.MainDeviceAdapter.GetDevices().Where(d => d.Sensor == SensorType && d is IRowerDevice).ToList(); break; case SensorType.VirtualPower: break; } foreach (var device in devices) { if (deviceList.ContainsKey(device.Id)) { continue; } var gameObject = (GameObject)Instantiate(deviceItem); gameObject.transform.SetParent(content.transform); gameObject.transform.localScale = new Vector3(1, 1, 1); var deviceItemObj = gameObject.GetComponent(); deviceItemObj.DeviceInfo = device; UIManager.AddEvent(deviceItemObj.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { deviceItemObj.Set(true); var trainer = SensorType == SensorType.Trainer && deviceItemObj.DeviceInfo.State == DeviceState.Connected; var nontrainer = deviceItemObj.DeviceInfo.Sensor != SensorType.Trainer && SensorType != SensorType.Trainer && deviceItemObj.DeviceInfo.State == DeviceState.Connected; if (trainer || nontrainer) { connectBtnText.text = "DISCONNECT"; } else { connectBtnText.text = "CONNECT"; } foreach (var item in deviceList) { if (item.Key != deviceItemObj.DeviceInfo.Id) { item.Value.Set(false); } } })); //UIManager.AddEvent(deviceItemObj.gameObject, EventTriggerType.Deselect, new UnityEngine.Events.UnityAction(e => //{ // //Debug.Log("de select"); // if(deviceItemObj.DeviceInfo.Sensor == SensorType) // { // deviceItemObj.DeviceInfo.Disconnect(); // } //})); deviceList.Add(device.Id, deviceItemObj); } if(deviceList.All(d=>d.Value.GetStatus() == false)) { var firstDevice = deviceList.Select(d => d.Value).Where(d => d.DeviceInfo.State == DeviceState.Connected).OrderByDescending(d => d.DeviceInfo.Priority).FirstOrDefault(); if (firstDevice != null) { firstDevice.Set(true); var trainer = SensorType == SensorType.Trainer && firstDevice.DeviceInfo.State == DeviceState.Connected; var nontrainer = firstDevice.DeviceInfo.Sensor != SensorType.Trainer && SensorType != SensorType.Trainer && firstDevice.DeviceInfo.State == DeviceState.Connected; if(trainer || nontrainer) { connectBtnText.text = "DISCONNECT"; } else { connectBtnText.text = "CONNECT"; } //connectBtn.text.text = "DISCOUNECT"; noDevice.text = firstDevice.DeviceInfo.Name; } //DeviceItem firstDevice; //var devicesTemp = deviceList.Select(d => d.Value).Where(d => d.DeviceInfo.State == DeviceState.Connected); //if(SensorType == SensorType.Cadence || SensorType == SensorType.SpeedCadence) //{ // firstDevice = devicesTemp.FirstOrDefault(d=>d) //} } } } public override void Show() { base.Show(); } public override void Close() { base.Close(); //DestroyImmediate(this.gameObject); Destroy(this.gameObject); } float time = 0; float _x = 0; float _y = 0; /// /// 做search动画 /// void Move() { var hudu = (2 * Mathf.PI / 360) * 1 * time; var x = _x + Mathf.Sin(hudu) * 8f; var y = _y + Mathf.Cos(hudu) * 8f; var rect = searchIconRect.localPosition; //rect.x = x; //rect.y = y; rect.x = x; rect.y = y; searchIconRect.localPosition = rect; time += 1.8f; //Debug.Log(x + ", " + y); //yield return null; } }