using AppUI.Bluetooth; using AppUI.Localization; using AppUI.Manager; using AppUI.Manager.View; using AppUI.View.Home.Main; using InfraredManager; using SmartBowSDK; using System; using TMPro; using UnityEngine; using UnityEngine.UI; using BLEAimhandler = AppUI.Bluetooth.AimHandler; using SdkAimDeviceInfo = SmartBowSDK.AimDeviceInfo; namespace AppUI.View.Home.DeviceView { public class DeviceView_ItemShow : MonoBehaviour { [Tooltip("当前选择的用户设备")] [SerializeField] BluetoothPlayer bluetoothPlayer = BluetoothPlayer.FIRST_PLAYER; [SerializeField] Image selectPanel; [SerializeField] Button btnBg; [SerializeField] TMP_Text titleText; [Header("操作按钮(连接/屏幕定位 + 切换设备)")] [SerializeField] Button btnPrimaryAction; [SerializeField] Image btnPrimaryActionBg; [SerializeField] TMP_Text btnPrimaryActionLabel; [SerializeField] Button btnSwitchDevice; [SerializeField] Image btnSwitchDeviceBg; [SerializeField] TMP_Text btnSwitchDeviceLabel; [SerializeField] GameObject bettery; [SerializeField] GameObject betteryBar; [SerializeField] GameObject betteryValue; [SerializeField] Image bowBg; float countingTime1 = 5; [SerializeField] int deviceIndex; bool bShowInfo; string omitText; int dotCount; float interval = 0.5f; float timer; [SerializeField] TMP_Text curConnectStatus; [SerializeField] TMP_Text curScreenPositioningStatus; const string KeyScreenPositioningDone = "appui-sideslip-screen-positioning-done"; const string KeyScreenPositioningIncomplete = "appui-sideslip-screen-positioning-incomplete"; const string KeyStatusNotConnected = "appui-device-status-not-connected"; const string KeyStatusConnecting = "appui-device-status-connecting"; const string KeyStatusConnected = "appui-device-status-connected"; const string KeyBtnConnect = "appui-device-btn-connect"; const string KeyBtnDisconnect = "appui-device-btn-disconnect"; const string KeyBtnSwitch = "appui-device-btn-switch"; const string KeyBtnScreenPositioning = "appui-device-btn-screen-positioning"; const string KeyTipInfraredConnect = "appui-device-tip-infrared-connect"; static readonly Color32 BlackBg = new Color32(0, 0, 0, 255); static readonly Color32 WhiteBg = new Color32(255, 255, 255, 255); static readonly Color32 WhiteText = new Color32(255, 255, 255, 255); static readonly Color32 BlackText = new Color32(50, 50, 50, 255); static readonly Color32 StatusCompleteColor = new Color32(0, 0, 0, 255); static readonly Color32 StatusIncompleteColor = new Color32(145, 144, 144, 255); SmartBowDeviceHub Hub => SmartBowDeviceHub.ins; public BluetoothPlayer Player => bluetoothPlayer; /// 连接 / 屏幕定位按钮节点。 public Button BtnPrimaryAction => btnPrimaryAction; /// 切换设备按钮节点。 public Button BtnSwitchDevice => btnSwitchDevice; public GameObject BtnPrimaryActionNode => btnPrimaryAction != null ? btnPrimaryAction.gameObject : null; public GameObject BtnSwitchDeviceNode => btnSwitchDevice != null ? btnSwitchDevice.gameObject : null; enum PrimaryActionKind { ConnectSideSlip, InfraredView, Disconnect, } PrimaryActionKind _primaryActionKind = PrimaryActionKind.ConnectSideSlip; bool IsConnectSuccess() { return Hub != null && Hub.IsConnected(bluetoothPlayer); } bool IsConnecting() { return Hub != null && Hub.IsConnecting(bluetoothPlayer); } bool IsScreenPositioned() { InfraredCameraHelper helper = InfraredCameraHelper.GetInstance(); return helper != null && helper.IsScreenLoateOK(); } void Awake() { ResolveUiReferences(); if (Hub?.Aim != null) Hub.Aim.aimDeviceInfoChangeEvent += onShowDeviceInfo; } void ResolveUiReferences() { if (titleText == null) { Transform title = transform.Find("Panel/title"); if (title != null) titleText = title.GetComponent(); } ResolveActionButtonReferences(); } void ResolveActionButtonReferences() { if (btnPrimaryAction == null) { Transform screen = transform.Find("connected/bottom/Buttons/Screen"); if (screen != null) { btnPrimaryAction = screen.GetComponent