killapp/Assets/Scripts/UI/Pages/HomePage/HomePageDeviceCtrl.cs
“虞渠成” 7fb3cd8162 feat(homepage): 添设备控制解锁动画与资源更新
1. 新增设备控制解锁动画逻辑,使用DOTween实现锁图标位移动画与旋转动画
2. 更新多语言配置,修正100118词条文本
3. 新增主页锁图标相关资源与预制件配置
4. 调整安全学习页面与主页部分UI布局与显示状态
2026-07-27 08:26:37 +08:00

276 lines
9.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using DG.Tweening;
using Kill.Bluetooth;
using Kill.Bluetooth.Protocol;
using Kill.Managers;
using Kill.UI.Components;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UI;
namespace Kill.UI.Pages
{
public class HomePageDeviceCtrl : MonoBehaviour
{
/// <summary>
/// 设备控制按钮 开关 fov 距离 补光灯 安全 待机 扫描 消杀
/// </summary>
public Button[] deviceCtrlButtons;
public Image deviceCtrlIcon;
/// <summary>
/// 设备控制图标 0关机 1开机
/// </summary>
public Sprite[] deviceCtrlIconSprites;
private bool isDeviceOn = false;
public void InitDeviceControl(bool isOn)
{
deviceCtrlIcon.sprite=deviceCtrlIconSprites[isOn?1:0];
PlayLockAnimation(isOn);
foreach(var button in deviceCtrlButtons)
{
button.interactable=isOn;
}
deviceCtrlButtons[0].interactable=true;
isDeviceOn=isOn;
if(!isOn)
{
InitFovText(0);
InitLensText(0, 0);
InitLightText(false);
InitSafeText(false);
InitWrokMode(-1);
}
}
public GameObject lockImage;
public void PlayLockAnimation(bool isOn)
{
if(isOn)
{
Tweener t1=lockImage.GetComponent<RectTransform>().DOAnchorPosY(0,0.5f);
t1.onComplete = () =>
{
lockImage.GetComponent<RectTransform>().DOLocalRotate(new Vector3(0,180,0),0.8f);
};
}
else
{
Tweener t1=lockImage.GetComponent<RectTransform>().DOLocalRotate(new Vector3(0,0,0),0.8f);
t1.onComplete = () =>
{
lockImage.GetComponent<RectTransform>().DOAnchorPosY(-1,0.5f);
};
}
}
/// <summary>
/// 0:未连接无值 1:有值
/// </summary>
public Color[] valueColors;
public Text fovText;
public void InitFovText(int fov)
{
if (fov == 0)
{
fovText.text="--";
fovText.color=valueColors[0];
return;
}
bowenAni.SetAngle(fov);
fovText.color=valueColors[1];
fovText.text=fov.ToString()+"°";
}
public Text lensText;
public void InitLensText(float lens,int unit)
{
if(lens==0)
{
lensText.text="--";
lensText.color=valueColors[0];
return;
}
bowenAni.SetDis(lens);
lensText.color=valueColors[1];
if(unit==0)
{
lensText.text=lens.ToString("F1");
lensText.text+="m";
}
else
{
int lensFt=Mathf.RoundToInt((float)(lens * 3.28084));
lensText.text=lensFt.ToString();
lensText.text+="ft";
}
}
public Image lightIcon;
public Sprite[] lightIconSprites;
public Text lightText;
public void InitLightText(bool isOn)
{
string stateStr=LanguageManager.Instance.GetLanguage(isOn?"100099":"100100");
lightText.text=stateStr;
lightIcon.sprite=lightIconSprites[isOn?1:0];
}
public Image safeIcon;
public Sprite[] safeIconSprites;
public Text safeText;
public void InitSafeText(bool isVisualOn)
{
bool isOn=isVisualOn;
string stateStr=LanguageManager.Instance.GetLanguage(isOn?"100099":"100100");
safeText.text=stateStr;
safeIcon.sprite=safeIconSprites[isOn?1:0];
}
public Color[] workModeColors;
public Text[] workModeTexts;
public Image standbyIcon;
public Sprite[] standbyIconSprites;
public Button standbyButton;
public Image scanIcon;
public Sprite[] scanIconSprites;
public Button scanButton;
public Image armedIcon;
public Sprite[] armedIconSprites;
public Button armedButton;
void Start()
{
// 绑定工作模式按钮点击事件(先移除避免重复绑定)
if (standbyButton != null)
{
standbyButton.onClick.RemoveAllListeners();
standbyButton.onClick.AddListener(() => OnWorkModeButtonClick(0));
}
if (scanButton != null)
{
scanButton.onClick.RemoveAllListeners();
scanButton.onClick.AddListener(() => OnWorkModeButtonClick(1));
}
if (armedButton != null)
{
armedButton.onClick.RemoveAllListeners();
armedButton.onClick.AddListener(() => OnWorkModeButtonClick(2));
}
if(deviceCtrlButtons[0]!=null)
{
deviceCtrlButtons[0].onClick.RemoveAllListeners();
deviceCtrlButtons[0].onClick.AddListener(() => OnLockButtonClick());
}
if(deviceCtrlButtons[1]!=null)
{
deviceCtrlButtons[1].onClick.RemoveAllListeners();
deviceCtrlButtons[1].onClick.AddListener(() => OnFovSettingButtonClick());
}
if(deviceCtrlButtons[2]!=null)
{
deviceCtrlButtons[2].onClick.RemoveAllListeners();
deviceCtrlButtons[2].onClick.AddListener(() => OnLensSettingButtonClick());
}
if(deviceCtrlButtons[3]!=null)
{
deviceCtrlButtons[3].onClick.RemoveAllListeners();
deviceCtrlButtons[3].onClick.AddListener(() => OnLightSettingButtonClick());
}
if(deviceCtrlButtons[4]!=null)
{
deviceCtrlButtons[4].onClick.RemoveAllListeners();
deviceCtrlButtons[4].onClick.AddListener(() => OnSafetySettingButtonClick());
}
}
public SectorScanEffect bowenAni;
/// <summary>
/// -1:未连接 0:待机 1:扫描 2:消杀
/// </summary>
/// <param name="mode"></param>
public void InitWrokMode(int mode)
{
// 更新当前工作模式
currentWorkMode = mode;
foreach (var text in workModeTexts)
{
text.color = workModeColors[0];
}
standbyIcon.sprite = standbyIconSprites[0];
scanIcon.sprite = scanIconSprites[0];
armedIcon.sprite = armedIconSprites[0];
if (mode < 0 || mode > 2)
{
bowenAni.gameObject.SetActive(false);
return;
}
if (mode==0)
{
standbyIcon.sprite=standbyIconSprites[1];
workModeTexts[0].color=workModeColors[1];
bowenAni.gameObject.SetActive(false);
}
else if(mode==1)
{
scanIcon.sprite=scanIconSprites[1];
workModeTexts[1].color=workModeColors[1];
bowenAni.gameObject.SetActive(true);
}
else if(mode==2)
{
armedIcon.sprite=armedIconSprites[1];
workModeTexts[2].color=workModeColors[1];
bowenAni.gameObject.SetActive(true);
}
}
// 当前工作模式 -1:未连接 0:待机 1:扫描 2:消杀
private int currentWorkMode = -1;
public int GetCurrentWorkMode()
{
return currentWorkMode;
}
public void OnLockButtonClick()
{
LoadingUI.Show();
bool aim=!isDeviceOn;
HomePageCtrl.Instance?.SetLock(aim);
}
/// <summary>
/// 设置工作模式按钮点击事件
/// </summary>
/// <param name="mode">目标模式 0:待机 1:扫描 2:消杀</param>
public void OnWorkModeButtonClick(int mode)
{
// 如果点击的是当前模式,不响应
if (mode == currentWorkMode)
{
Debug.Log($"[HomePageDeviceCtrl] 点击的模式 {mode} 与当前模式相同,不响应");
return;
}
// 通知 HomePageCtrl 切换工作模式Loading 在 SetWorkMode 中显示)
HomePageCtrl.Instance?.SetWorkMode(mode);
}
public void OnFovSettingButtonClick()
{
HomePageCtrl.Instance?.ShowFovSettingPage();
}
public void OnLensSettingButtonClick()
{
HomePageCtrl.Instance?.ShowLensSettingPage();
}
public void OnLightSettingButtonClick()
{
HomePageCtrl.Instance?.ShowLightSettingPage();
}
public void OnSafetySettingButtonClick()
{
HomePageCtrl.Instance?.ShowSafetySettingPage();
}
}
}