EnergyEfficiencyManagement/Assets/Zion/Scripts/UIView/EquipmentRunningView.cs

180 lines
6.0 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 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);
}
}
}