H_SafeExperienceDrivingSystem/U3D_DrivingSystem/Assets/Script/Manaegr/GameManager.cs

186 lines
4.2 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public enum CarType
{
,
,
,
}
public class GameManager : MonoBehaviour
{
public static GameManager instance;
public List<BtClick> home; //首页
public List<BtClick> carType; //车类型
public List<BtClick> weather; //天气
public List<BtClick> dangerDriving; //危险驾驶
public GameObject[] uiGames;
private List<string> stepValues = new List<string>(); // 保存每个步骤的值
private int currentStep = 0; // 当前步骤索引
private void Awake()
{
instance = this;
home = new List<BtClick>();
carType = new List<BtClick>();
weather = new List<BtClick>();
dangerDriving = new List<BtClick>();
DontDestroyOnLoad(this);
}
private IEnumerator Start()
{
// 等待所有 BtClick 对象的 Start 方法完成
yield return StartCoroutine(WaitForBtClickStarts());
// 所有 BtClick 的 Start 方法已完成,继续执行其他代码
Debug.Log("All BtClick Start methods completed.");
// 执行其他方法
for (int i = 0; i < uiGames.Length; i++)
{
uiGames[i].SetActive(false);
}
uiGames[0].SetActive(true);
}
private IEnumerator WaitForBtClickStarts()
{
// 获取所有 BtClick 实例
BtClick[] btClicks = FindObjectsOfType<BtClick>();
int completedCount = 0;
// 为每个 BtClick 实例的 OnStartCompleted 事件添加监听器
foreach (var btClick in btClicks)
{
btClick.OnStartCompleted += () => { completedCount++; };
}
// 等待直到所有 BtClick 实例的 Start 方法完成
while (completedCount < btClicks.Length)
{
yield return null; // 等待一帧
}
}
public void UIClick(string name, CarType ct)
{
List<BtClick> btList = null;
switch (ct)
{
case CarType.:
btList = home;
break;
case CarType.:
btList = carType;
break;
case CarType.:
btList = weather;
break;
case CarType.:
btList = dangerDriving;
break;
}
Reset(btList);
foreach (var v in btList)
{
Debug.Log(v.name);
}
}
/// <summary>
/// 重置UI状态
/// </summary>
/// <param name="list"></param>
private void Reset(List<BtClick> list)
{
foreach (var v in list)
{
v.Cancel();
}
}
public void NextStep(string value)
{
if (currentStep >= uiGames.Length - 1)
return;
if (currentStep < stepValues.Count)
{
// 更新当前步骤的值
stepValues[currentStep] = value;
}
else
{
// 添加新步骤的值
stepValues.Add(value);
}
for (int i = 0; i < uiGames.Length; i++)
{
uiGames[i].SetActive(false);
}
currentStep++;
uiGames[currentStep].SetActive(true);
DisplayCurrentStepValue();
}
// 调用这个方法来返回上一个步骤
public void PreviousStep()
{
if (currentStep > 0)
{
for (int i = 0; i < uiGames.Length; i++)
{
uiGames[i].SetActive(false);
}
currentStep--;
uiGames[currentStep].SetActive(true);
// 移除当前步骤的值
if (currentStep < stepValues.Count)
{
stepValues.RemoveAt(currentStep);
}
DisplayCurrentStepValue();
}
}
// 显示当前步骤的值(仅为示例)
private void DisplayCurrentStepValue()
{
if (currentStep < stepValues.Count)
{
Debug.Log("Current Step: " + currentStep + ", Value: " + stepValues[currentStep]);
}
else
{
Debug.Log("Current Step: " + currentStep + ", No Value Yet");
}
}
}