using ChivaVR.State; using ChivaXR; using System.Collections; using System.Collections.Generic; using UnityEngine; public class ProcedureStateGraphController : MonoBehaviour { [Header("是否使用原ProcedureManager的线性执行")] public bool linerRunning = true; //线性执行, public bool orderRunGraph = false; public List stateGraphBases = new List(); private int currentStateGraphID = 0; private bool stateGraphRuning = false; #region StateGraph public void InitStateGraphBases() { if (stateGraphBases.Count == 0) { Debug.LogError("暂无流程图,退出流程执行"); return; } currentStateGraphID = 0; EnterStateGraphByIndex(currentStateGraphID); } public void EnterStateGraphByIndex(int index) { if (index >= stateGraphBases.Count) return; if (stateGraphRuning) { stateGraphBases[currentStateGraphID].stateGraph.OnStateExit -= FinishedStateGraph; } stateGraphRuning = true; Debug.Log("进入流程图:" + stateGraphBases[index].description); stateGraphBases[index].stateGraph.InitState(); stateGraphBases[index].stateGraph.EnterStateGraph(); stateGraphBases[index].stateGraph.OnStateExit += FinishedStateGraph; } public void EnterStateGraphByStateGraph(StateGraphBase stateGraphBase) { if (stateGraphRuning) { stateGraphBases[currentStateGraphID].stateGraph.OnStateExit -= FinishedStateGraph; } stateGraphRuning = true; Debug.Log("进入流程图:" + stateGraphBase.description); stateGraphBase.stateGraph.InitState(); stateGraphBase.stateGraph.EnterStateGraph(); stateGraphBase.stateGraph.OnStateExit += FinishedStateGraph; } public void FinishedStateGraph(StateGraph stateGraph) { stateGraphRuning = false; //获取未完成步骤描述 string info = stateGraph.GetUnFinishedDescription(); //ExamManager.Instance.SubExamInfo(stateGraph); stateGraphBases[currentStateGraphID].stateGraph.OnStateExit -= FinishedStateGraph; Debug.Log("完成流程图:" + stateGraphBases[currentStateGraphID].description); //是否依次执行 if (!orderRunGraph) return; currentStateGraphID++; if (currentStateGraphID <= stateGraphBases.Count) { EnterStateGraphByIndex(currentStateGraphID); } else { Debug.Log("完成所有流程图列表"); } } public void EnterTargetGraphBase(StateGraphBase stateGraphBase) { //ProcessManagement.Instance.InitStepState(false); //ProcedureManager.Instance.JumpStep(stateGraphBase.startInitStep, false); EnterStateGraphByStateGraph(stateGraphBase); } #endregion }