180 lines
6.0 KiB
C#
180 lines
6.0 KiB
C#
using DG.Tweening;
|
||
using SK.Framework;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.Playables;
|
||
using UnityEngine.UI;
|
||
|
||
/// <summary>
|
||
/// 运行工况模拟界面
|
||
/// </summary>
|
||
public class EquipmentRunningView : UIView
|
||
{
|
||
public Variables variables;
|
||
//设备Timeline动画
|
||
private List<PlayableDirector> devicesTimeline = new List<PlayableDirector>();
|
||
//设备信息面板列表
|
||
private List<GameObject> devicesInfos = new List<GameObject>();
|
||
//打字动画协程句柄,防止重复打字导致打字动画卡顿问题
|
||
private Coroutine typingCoroutine;
|
||
//打字动画速度,单位:秒/字符
|
||
private float typingSpeed = 0.05f;
|
||
|
||
protected override void OnInit(IViewData data)
|
||
{
|
||
base.OnInit(data);
|
||
variables.Set<EquipmentRunningView>("my_EquipmentRunning", this);
|
||
|
||
DeviceListInit();
|
||
DropdownInit();
|
||
BtnInit();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设备列表初始化
|
||
/// </summary>
|
||
private void DeviceListInit()
|
||
{
|
||
Toggle[] toggles = variables.Get<ToggleGroup>("设备列表").GetComponentsInChildren<Toggle>();
|
||
for (int i = 0; i < toggles.Length; i++)
|
||
{
|
||
toggles[i].onValueChanged.AddListener((bool isOn) => OnDeviceListValueChanged(isOn, i));
|
||
}
|
||
|
||
devicesInfos.Clear();
|
||
devicesInfos.Add(variables.Get<RectTransform>("参数面板").gameObject);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 设备列表选中事件
|
||
/// </summary>
|
||
/// <param name="isOn"></param>
|
||
/// <param name="index"></param>
|
||
private void OnDeviceListValueChanged(bool isOn, int index)
|
||
{
|
||
if (isOn)
|
||
{
|
||
//TODO:是不是水泵、空压机也有各自的参数设置
|
||
for (int i = 0; i < devicesInfos.Count; i++)
|
||
{
|
||
//devicesInfos[i].SetActive(false);
|
||
if (i == index)
|
||
{
|
||
if (devicesInfos[i].transform.localPosition.x != 150)
|
||
devicesInfos[i].transform.DOLocalMoveX(150, 1.2f);
|
||
}
|
||
else
|
||
{
|
||
if (devicesInfos[i].transform.localPosition.x != -150)
|
||
devicesInfos[i].transform.DOLocalMoveX(0, 0.3f);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 下拉框初始化
|
||
/// </summary>
|
||
private void DropdownInit()
|
||
{
|
||
variables.Get<Dropdown>("下拉框-空调").onValueChanged.AddListener((int value) => OnDropdownValueChanged(value));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 下拉框选中事件
|
||
/// </summary>
|
||
/// <param name="value"></param>
|
||
private void OnDropdownValueChanged(int value)
|
||
{
|
||
if (value == 2)
|
||
{
|
||
variables.Get<InputField>("风速输入框").Activate();
|
||
variables.Get<InputField>("温度输入框").Deactivate();
|
||
}
|
||
else
|
||
{
|
||
variables.Get<InputField>("风速输入框").Deactivate();
|
||
variables.Get<InputField>("温度输入框").Activate();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 按钮初始化
|
||
/// </summary>
|
||
private void BtnInit()
|
||
{
|
||
variables.Get<Button>("显示设置面板Info").onClick.AddListener(delegate
|
||
{
|
||
if (variables.Get<RectTransform>("参数面板").localPosition.x != 150)
|
||
variables.Get<RectTransform>("参数面板").DOLocalMoveX(150, 1.2f);
|
||
});
|
||
variables.Get<Button>("隐藏设置面板Info").onClick.AddListener(delegate
|
||
{
|
||
if (variables.Get<RectTransform>("参数面板").localPosition.x != -150)
|
||
variables.Get<RectTransform>("参数面板").DOLocalMoveX(-150, 0.3f);
|
||
});
|
||
variables.Get<Button>("启动运行-空调").onClick.AddListener(delegate
|
||
{
|
||
//TODO:根据不同温度,风速,运行时长,显示不同的timeline动画
|
||
if (variables.Get<InputField>("温度输入框").gameObject.activeSelf)
|
||
{
|
||
if (string.IsNullOrEmpty(variables.Get<InputField>("温度输入框").text.Trim()))
|
||
{ //TODO:提醒用户输入温度
|
||
ShowWarming("请输入温度值!");
|
||
return;
|
||
}
|
||
}
|
||
if (variables.Get<InputField>("风速输入框").gameObject.activeSelf)
|
||
{
|
||
if (string.IsNullOrEmpty(variables.Get<InputField>("风速输入框").text.Trim()))
|
||
{
|
||
//TODO:提醒用户输入风速
|
||
ShowWarming("请输入风速值!");
|
||
return;
|
||
}
|
||
}
|
||
if (string.IsNullOrEmpty(variables.Get<InputField>("运行时长输入框").text.Trim()))
|
||
{
|
||
//TODO:提醒用户输入运行时长
|
||
ShowWarming("请输入运行时长!");
|
||
return;
|
||
}
|
||
//TODO:根据输入的参数,播放对应的timeline动画
|
||
|
||
});
|
||
}
|
||
|
||
/// <summary>
|
||
/// 显示警告信息
|
||
/// </summary>
|
||
/// <param name="warmingText"></param>
|
||
private void ShowWarming(string warmingText)
|
||
{
|
||
if (string.IsNullOrEmpty(warmingText.Trim())) return;
|
||
if (!variables.Get<RectTransform>("警告").gameObject.activeSelf)
|
||
variables.Get<RectTransform>("警告").gameObject.Activate();
|
||
// 快速完成打字
|
||
if (typingCoroutine != null)
|
||
StopCoroutine(typingCoroutine);
|
||
//开启打字效果
|
||
typingCoroutine = StartCoroutine(TypeText(warmingText));
|
||
}
|
||
|
||
/// <summary>
|
||
/// 打字效果协程,逐个字符显示文本。
|
||
/// </summary>
|
||
/// <param name="text"></param>
|
||
/// <returns></returns>
|
||
private IEnumerator TypeText(string text)
|
||
{
|
||
variables.Get<Text>("警告文本").text = "";
|
||
|
||
foreach (char letter in text.ToCharArray())
|
||
{
|
||
variables.Get<Text>("警告文本").text += letter;
|
||
yield return new WaitForSeconds(typingSpeed);
|
||
}
|
||
}
|
||
} |