using System; using System.Collections.Generic; using DragonSoul.Shared; using Mono.Event; using Sirenix.OdinInspector; using Sirenix.Serialization; using UnityEditor; using UnityEngine; namespace UnityTest.ZXL { public class ProcessManager : SerializedMonoBehaviour { [ShowInInspector] [ReadOnly] private ProcessBase currentProcess; private ETCancellationToken _token; [OdinSerialize] private Dictionary processGos = new Dictionary(); private int processIndex; [ReadOnly] public string hhh = "**************************************"; [LabelText("初始启动流程")] public ProcessType startProcessType; private void Awake() { EventManager.Instance.Subscribe(ProcessOverEventArgs.EventId, PlayableStoppedEvent); // SetProcess(ProcessType.一_爆炸发生场景); // processIndex = 0; SetProcess(startProcessType); processIndex = (int)startProcessType; } private void OnDestroy() { EventManager.Instance.Unsubscribe(ProcessOverEventArgs.EventId, PlayableStoppedEvent); } private void PlayableStoppedEvent(object sender, GameEventArgs e) { var args = e as ProcessOverEventArgs; ChangeProcess(); } void ChangeProcess() { processIndex++; ProcessType processType; if (processIndex == 0) { processType = ProcessType.一_爆炸发生场景; } else if (processIndex == 1) { processType = ProcessType.二_汇报程序; } else if (processIndex == 2) { processType = ProcessType.三_准备场景; } else if (processIndex == 3) { processType = ProcessType.四_现场处置场景; } else { // 完成四个模块的任务了 Debug.Log("完成四个模块的任务了"); return; } Debug.Log($"{processType}"); _token = new ETCancellationToken(); processGos.TryGetValue(processType, out ProcessBase processBase); foreach (var processGosValue in processGos.Values) { processGosValue.gameObject.SetActive(false); } currentProcess = processBase; if (currentProcess != null) currentProcess.gameObject.SetActive(true); } void SetProcess(ProcessType processType) { Debug.Log($"{processType}"); _token = new ETCancellationToken(); processGos.TryGetValue(processType, out ProcessBase processBase); foreach (var processGosValue in processGos.Values) { processGosValue.gameObject.SetActive(false); } currentProcess = processBase; if (currentProcess != null) currentProcess.gameObject.SetActive(true); } #if UNITY_EDITOR [Button] void Add() { processGos = new Dictionary(); for (var i = 0; i < transform.childCount; i++) { var tran = transform.GetChild(i); var processBase = tran.GetComponent(); processGos.Add(processBase.processType, processBase); } UnityEditor.EditorUtility.SetDirty(this); AssetDatabase.SaveAssets(); } #endif } }