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; 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; Logo.sprite = Resources.Load("Images/Devices/Trainer_3"); } } private Image Logo; private UnityEngine.Object deviceItem; private VerticalLayoutGroup content; private PFUIButton connectBtn; private Dictionary deviceList; 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(); var panel = container.Find("Panel"); content = panel.Find("Scroll View").Find("Viewport").Find("Content").GetComponent(); Material material = null; if (material == null) { material = Instantiate(Resources.Load("UI/Material/RoundedCornersTextureMaterial")); } var rect = ((RectTransform)panel.transform).rect; material.SetVector(Shader.PropertyToID("_WidthHeightRadius"), new Vector4(rect.width, rect.height, 20f, 0)); panel.GetComponent().material = material; UIManager.AddEvent(closeBtn.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { //this.gameObject.SetActive(false); this.Close(); })); deviceItem = Resources.Load("UI/Prefab/Device/DeviceItem"); connectBtn = container.Find("ConnectBtn").GetComponent(); UIManager.AddEvent(connectBtn.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { foreach (var item in deviceList) { if (item.Value.GetStatus() == false) { if (item.Value.DeviceInfo.Sensor == SensorType) { item.Value.DeviceInfo.Disconnect(); } } } var dd = deviceList.Select(d => d.Value).Where(d => d.GetStatus()).FirstOrDefault(); if(dd != null) { dd.DeviceInfo.Connect(); } 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; } } private void SearchDevice() { if (SensorType != SensorType.None) { //Debug.Log(AntConnector.Instance().discoveredDevices.Count(d => d.Sensor == SensorType)); var devices = new List(); switch (SensorType) { case SensorType.Cadence: devices = AntConnector.Instance().discoveredDevices.Where(d => d.Sensor == SensorType || (d is ICadenceDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList(); break; case SensorType.HeartRate: devices = AntConnector.Instance().discoveredDevices.Where(d => d.Sensor == SensorType || (d is IHeartRateDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList(); break; case SensorType.Power: devices = AntConnector.Instance().discoveredDevices.Where(d => d.Sensor == SensorType || (d is IPowerDevice && d.State == DeviceState.Connected)).OrderBy(d=>d.Priority).ToList(); break; case SensorType.Speed: break; case SensorType.SpeedCadence: devices = AntConnector.Instance().discoveredDevices.Where(d => d.Sensor == SensorType || (d is ISpeedDevice && d.State == DeviceState.Connected)).OrderBy(d => d.Priority).ToList(); break; case SensorType.Trainer: devices = AntConnector.Instance().discoveredDevices.Where(d => d.Sensor == SensorType).ToList(); break; case SensorType.VirtualPower: break; } foreach (var device in devices) { if (deviceList.ContainsKey(device.DeviceNumber)) { continue; } var gameObject = (GameObject)Instantiate(deviceItem); gameObject.transform.SetParent(content.transform); var deviceItemObj = gameObject.GetComponent(); deviceItemObj.DeviceInfo = device; UIManager.AddEvent(deviceItemObj.gameObject, EventTriggerType.PointerClick, new UnityEngine.Events.UnityAction(e => { ////deviceItemObj.Select(); //if(deviceItemObj.DeviceInfo.Sensor == SensorType) //{ // deviceItemObj.DeviceInfo.Connect(); //} deviceItemObj.Set(true); foreach (var item in deviceList) { if (item.Key != deviceItemObj.DeviceInfo.DeviceNumber) { item.Value.Set(false); //if (item.Value.DeviceInfo.Sensor == SensorType) //{ // item.Value.DeviceInfo.Disconnect(); //} } } //Close(); })); //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.DeviceNumber, 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); //connectBtn.text.text = "DISCOUNECT"; } } } } public override void Close() { base.Close(); DestroyImmediate(this.gameObject); } }