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;
}
}