388 lines
12 KiB
C#
388 lines
12 KiB
C#
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using TMPro;
|
||
using UnityEngine;
|
||
using UnityEngine.UI;
|
||
/// <summary>
|
||
/// 控制红绿灯
|
||
/// </summary>
|
||
public class ControlLight : MonoBehaviour
|
||
{
|
||
public static ControlLight Instance;
|
||
/// <summary>
|
||
/// 1号绿灯Toggle
|
||
/// </summary>
|
||
public Toggle Green1;
|
||
/// <summary>
|
||
/// 1号红灯toggle
|
||
/// </summary>
|
||
public Toggle Red1;
|
||
/// <summary>
|
||
/// 1号确认按钮
|
||
/// </summary>
|
||
public Button Enter1;
|
||
/// <summary>
|
||
/// 1号输入的倒计时
|
||
/// </summary>
|
||
public TMP_InputField WaitTime1;
|
||
/// <summary>
|
||
/// 1号语音按钮
|
||
/// </summary>
|
||
public Button AudiosBt1;
|
||
/// <summary>
|
||
/// 2号绿灯Toggle
|
||
/// </summary>
|
||
public Toggle Green2;
|
||
/// <summary>
|
||
/// 2号红灯toggle
|
||
/// </summary>
|
||
public Toggle Red2;
|
||
/// <summary>
|
||
/// 2号确认按钮
|
||
/// </summary>
|
||
public Button Enter2;
|
||
/// <summary>
|
||
/// 2号输入的倒计时
|
||
/// </summary>
|
||
public TMP_InputField WaitTime2;
|
||
/// <summary>
|
||
/// 2号语音按钮
|
||
/// </summary>
|
||
public Button AudiosBt2;
|
||
/// <summary>
|
||
/// 被点击的红绿灯模型
|
||
/// </summary>
|
||
public GameObject lightobj1;
|
||
/// <summary>
|
||
/// 红灯
|
||
/// </summary>
|
||
public GameObject redlight1;
|
||
/// <summary>
|
||
/// 黄灯
|
||
/// </summary>
|
||
public GameObject yellowlight1;
|
||
/// <summary>
|
||
/// 绿灯
|
||
/// </summary>
|
||
public GameObject greenlight1;
|
||
/// <summary>
|
||
/// 红绿灯时间
|
||
/// </summary>
|
||
public TextMeshPro LightNumber1;
|
||
/// <summary>
|
||
/// 1号红绿灯空气墙
|
||
/// </summary>
|
||
public GameObject LightBox1;
|
||
/// <summary>
|
||
/// 被点击的红绿灯模型
|
||
/// </summary>
|
||
public GameObject lightobj2;
|
||
/// <summary>
|
||
/// 红灯
|
||
/// </summary>
|
||
public GameObject redlight2;
|
||
/// <summary>
|
||
/// 黄灯
|
||
/// </summary>
|
||
public GameObject yellowlight2;
|
||
/// <summary>
|
||
/// 绿灯
|
||
/// </summary>
|
||
public GameObject greenlight2;
|
||
/// <summary>
|
||
/// 红绿灯时间
|
||
/// </summary>
|
||
public TextMeshPro LightNumber2;
|
||
/// <summary>
|
||
/// 2号红绿灯空气墙
|
||
/// </summary>
|
||
public GameObject LightBox2;
|
||
/// <summary>
|
||
/// 计数:1号语音
|
||
/// </summary>
|
||
int index1 = 0;
|
||
/// <summary>
|
||
/// 计数:2号语音
|
||
/// </summary>
|
||
int index2 = 0;
|
||
private void Awake()
|
||
{
|
||
Instance = this;
|
||
}
|
||
void Start()
|
||
{
|
||
AudiosBt1.onClick.AddListener(() =>
|
||
{
|
||
index1++;
|
||
|
||
if (index1 == 1)
|
||
{
|
||
Enter1.interactable = false;
|
||
AudiosBt2.interactable = false;
|
||
}
|
||
else if (index1 == 2)
|
||
{
|
||
index1 = 0;
|
||
AudiosBt1.interactable = false;
|
||
AudiosBt2.interactable = true;
|
||
}
|
||
});
|
||
AudiosBt2.onClick.AddListener(() =>
|
||
{
|
||
index2++;
|
||
if (index2 == 1)
|
||
{
|
||
Enter2.interactable = false;
|
||
AudiosBt1.interactable = false;
|
||
}
|
||
else if (index2 == 2)
|
||
{
|
||
index2 = 0;
|
||
AudiosBt1.interactable = true;
|
||
AudiosBt2.interactable = false;
|
||
}
|
||
});
|
||
Enter1.onClick.AddListener(() =>
|
||
{
|
||
AudiosBt1.interactable = false;
|
||
Enter1.interactable = false;
|
||
LightNumber1.text = WaitTime1.text;
|
||
if (Green1.isOn)
|
||
{
|
||
Red1.interactable = false;
|
||
StartCoroutine(TimeSub_1(int.Parse(LightNumber1.text), "红"));
|
||
StartCoroutine(GreenToRed_1(int.Parse(LightNumber1.text), greenlight1, redlight1));
|
||
}
|
||
else if (Red1.isOn)
|
||
{
|
||
Green1.interactable = false;
|
||
StartCoroutine(TimeSub_1(int.Parse(LightNumber1.text), "绿"));
|
||
StartCoroutine(RedToGreen_1(int.Parse(LightNumber1.text), greenlight1, redlight1));
|
||
}
|
||
});
|
||
Enter2.onClick.AddListener(() =>
|
||
{
|
||
AudiosBt2.interactable = false;
|
||
Enter2.interactable = false;
|
||
LightNumber2.text = WaitTime2.text;
|
||
if (Green2.isOn)
|
||
{
|
||
Red2.interactable = false;
|
||
StartCoroutine(TimeSub_2(int.Parse(LightNumber2.text), "红"));
|
||
StartCoroutine(GreenToRed_2(int.Parse(LightNumber2.text), greenlight2, redlight2));
|
||
}
|
||
else if (Red2.isOn)
|
||
{
|
||
Green2.interactable = false;
|
||
StartCoroutine(TimeSub_2(int.Parse(LightNumber2.text), "绿"));
|
||
StartCoroutine(RedToGreen_2(int.Parse(LightNumber2.text), greenlight2, redlight2));
|
||
}
|
||
});
|
||
}
|
||
private IEnumerator GreenToRed_1(int waittiem, GameObject Green, GameObject red)
|
||
{
|
||
yield return new WaitForSeconds(waittiem);
|
||
Green.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yellowlight1.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
LightNumber1.color = Color.green;
|
||
Green.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yield return new WaitForSeconds(1);
|
||
red.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
yellowlight1.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
LightNumber1.color = Color.red;
|
||
LightNumber1.text = "99";
|
||
|
||
|
||
}
|
||
private IEnumerator RedToGreen_1(int waittiem, GameObject Green, GameObject red)
|
||
{
|
||
yield return new WaitForSeconds(waittiem);
|
||
red.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
LightNumber1.color = Color.red;
|
||
yellowlight1.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
red.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yield return new WaitForSeconds(1);
|
||
yellowlight1.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
Green.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
LightNumber1.color = Color.green;
|
||
LightNumber1.text = "99";
|
||
}
|
||
/// <summary>
|
||
/// 倒计时
|
||
/// </summary>
|
||
private IEnumerator TimeSub_1(int waittiem, string type)
|
||
{
|
||
for (int i = waittiem; i >= 0; i--)
|
||
{
|
||
LightNumber1.text = i.ToString();
|
||
yield return new WaitForSeconds(1);
|
||
}
|
||
if (type == "绿")
|
||
{
|
||
Red1.isOn = false;
|
||
Green1.isOn = true;
|
||
Red1.interactable = false;
|
||
Green1.interactable = true;
|
||
Enter1.interactable = true;
|
||
AudiosBt1.interactable = true;
|
||
LightBox1.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
Red1.isOn = true;
|
||
Green1.isOn = false;
|
||
Red1.interactable = true;
|
||
Green1.interactable = false;
|
||
Enter1.interactable = true;
|
||
AudiosBt1.interactable = true;
|
||
LightBox1.SetActive(true);
|
||
}
|
||
}
|
||
private IEnumerator GreenToRed_2(int waittiem, GameObject Green, GameObject red)
|
||
{
|
||
yield return new WaitForSeconds(waittiem);
|
||
Green.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yellowlight2.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
LightNumber2.color = Color.green;
|
||
Green.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yield return new WaitForSeconds(1);
|
||
red.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
yellowlight2.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
LightNumber2.color = Color.red;
|
||
LightNumber2.text = "99";
|
||
|
||
|
||
}
|
||
private IEnumerator RedToGreen_2(int waittiem, GameObject Green, GameObject red)
|
||
{
|
||
yield return new WaitForSeconds(waittiem);
|
||
red.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
LightNumber2.color = Color.red;
|
||
yellowlight2.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
red.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
yield return new WaitForSeconds(1);
|
||
yellowlight2.GetComponent<Renderer>().material.DisableKeyword("_EMISSION");
|
||
Green.GetComponent<Renderer>().material.EnableKeyword("_EMISSION");
|
||
LightNumber2.color = Color.green;
|
||
LightNumber2.text = "99";
|
||
}
|
||
/// <summary>
|
||
/// 倒计时
|
||
/// </summary>
|
||
private IEnumerator TimeSub_2(int waittiem, string type)
|
||
{
|
||
for (int i = waittiem; i >= 0; i--)
|
||
{
|
||
LightNumber2.text = i.ToString();
|
||
yield return new WaitForSeconds(1);
|
||
}
|
||
if (type == "绿")
|
||
{
|
||
Red2.isOn = false;
|
||
Green2.isOn = true;
|
||
Red2.interactable = false;
|
||
Green2.interactable = true;
|
||
Enter2.interactable = true;
|
||
AudiosBt2.interactable = true;
|
||
LightBox2.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
Red2.isOn = true;
|
||
Green2.isOn = false;
|
||
Red2.interactable = true;
|
||
Green2.interactable = false;
|
||
Enter2.interactable = true;
|
||
AudiosBt2.interactable = true;
|
||
LightBox2.SetActive(true);
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 语音控制红绿灯
|
||
/// </summary>
|
||
/// <param name="types">哪一个红绿灯</param>
|
||
/// <param name="talkstr">说话内容</param>
|
||
public void AudiosTalk(string types, string talkstr)
|
||
{
|
||
if (types == "1号红绿灯")
|
||
{
|
||
if (talkstr.Contains("红灯"))
|
||
{
|
||
if (Green1.interactable)
|
||
{
|
||
StartCoroutine(ImageTips.instance.WaitHide());
|
||
ImageTips.instance.Tips.text = "当前不支持切换为红灯,请先设置绿灯时间后再设置。";
|
||
}
|
||
else
|
||
{
|
||
Red1.interactable = false;
|
||
StartCoroutine(TimeSub_1(20, "绿"));
|
||
StartCoroutine(RedToGreen_1(20, greenlight1, redlight1));
|
||
}
|
||
}
|
||
else if (talkstr.Contains("绿灯"))
|
||
{
|
||
if (Red1.interactable)
|
||
{
|
||
StartCoroutine(ImageTips.instance.WaitHide());
|
||
ImageTips.instance.Tips.text = "当前不支持切换为绿灯,请先设置红灯时间后再设置。";
|
||
}
|
||
else
|
||
{
|
||
Enter1.interactable = false;
|
||
Green1.interactable = false;
|
||
StartCoroutine(TimeSub_1(20, "红"));
|
||
StartCoroutine(GreenToRed_1(20, greenlight1, redlight1));
|
||
}
|
||
}
|
||
else if (!talkstr.Contains("红灯") && !talkstr.Contains("绿灯"))
|
||
{
|
||
Enter1.interactable = true;
|
||
AudiosBt1.interactable = true;
|
||
AudiosBt2.interactable = true;
|
||
}
|
||
}
|
||
else if (types == "2号红绿灯")
|
||
{
|
||
if (talkstr.Contains("红灯"))
|
||
{
|
||
if (Green2.interactable)
|
||
{
|
||
StartCoroutine(ImageTips.instance.WaitHide());
|
||
ImageTips.instance.Tips.text = "当前不支持切换为红灯,请先设置绿灯时间后再设置。";
|
||
}
|
||
else
|
||
{
|
||
Red2.interactable = false;
|
||
StartCoroutine(TimeSub_2(20, "绿"));
|
||
StartCoroutine(RedToGreen_2(20, greenlight2, redlight2));
|
||
}
|
||
}
|
||
else if (talkstr.Contains("绿灯"))
|
||
{
|
||
if (Red2.interactable)
|
||
{
|
||
StartCoroutine(ImageTips.instance.WaitHide());
|
||
ImageTips.instance.Tips.text = "当前不支持切换为绿灯,请先设置红灯时间后再设置。";
|
||
}
|
||
else
|
||
{
|
||
Enter2.interactable = false;
|
||
Green2.interactable = false;
|
||
StartCoroutine(TimeSub_2(20, "红"));
|
||
StartCoroutine(GreenToRed_2(20, greenlight2, redlight2));
|
||
}
|
||
}
|
||
else if (!talkstr.Contains("红灯") && !talkstr.Contains("绿灯"))
|
||
{
|
||
Enter2.interactable = true;
|
||
AudiosBt1.interactable = true;
|
||
AudiosBt2.interactable = true;
|
||
}
|
||
Debug.Log(!talkstr.Contains("红灯")+","+ !talkstr.Contains("绿灯"));
|
||
}
|
||
}
|
||
}
|