using System.Collections; using System.Collections.Generic; using System.Net.NetworkInformation; using UnityEngine; using System.Linq; public class ProcessManager : BaseManager { /// /// 构造函数 /// private ProcessManager() { } /// /// 模式 /// public E_ModeType mode; /// /// 用户数据 /// public UserData userData = new UserData(); /// /// 当前的项目/方案 /// public D_Scheme d_Scheme; /// ///当前方案ID /// public int schemeID = -1; /// /// 当前流程Id /// public int processId = -1; /// /// 当前子流程Id /// public int subProcessId = -1; /// /// 当前子流程步骤Id /// public int subProcessStepId = -1; public string subProcessStepTriggerID = "-1"; /// /// 倒计时,剩余时长 /// public int countDown = 0; /// /// 实训/考试时长 /// private int time; /// /// 记录倒计时的协程 /// private Coroutine coroutine; /// /// 初始化 /// 根据方案id 生成流程数据 /// /// 方案id public void Init(int id, E_ModeType mode, int countDown = 600) //TODO 考试断线重连应该考虑初始化问题(默认时间600) { this.schemeID = id; this.mode = mode; coroutine = GameManager.MonoMgr.StartCoroutine(CountDown(countDown)); d_Scheme = DataManager.Instance.GetSchemeData(id); ReportManager.Instance.creport = DataManager.Instance.GetSchemeReport(id); GameManager.ToolAndmaterialMgr.Init(d_Scheme.ToolOrMaterilOrDevice); d_Scheme.Init(); Debug.Log("流程初始化完成"); } /// /// 切换流程 /// public void HandoverProcess(int processId, int subProcessId = 0, int subProcessStepId = 0) { if (processId == -1 || subProcessId == -1 || subProcessStepId == -1) return; d_Scheme.HandoverProcess(processId, subProcessId, subProcessStepId); } /// /// 切换流程 /// public void HandoverSubProcess(int subProcessId, int subProcessStepId = 0) { if (processId == -1 || subProcessId == -1 || subProcessStepId == -1) return; d_Scheme.HandoverProcess(processId, subProcessId, subProcessStepId); } /// /// 切换流程 /// public void HandoverSubProcessStep(int subProcessStepId) { if (processId == -1 || subProcessId == -1 || subProcessStepId == -1) return; d_Scheme.HandoverProcess(processId, subProcessId, subProcessStepId); } /// /// 切换 -1-错误操作,0-结束,1-流程,2-子流程,3-子流程步骤 /// /// public int CheckSubProcessSteps(int subProcessStepID) { if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStepId.Equals(subProcessStepID)) { int spStepID = subProcessStepId + 1; int spStepcount = d_Scheme.CurrentProcess.CurrentSubProcess.subProcessStepes.Count; if (spStepID <= d_Scheme.CurrentProcess.CurrentSubProcess.subProcessStepes[spStepcount - 1].id) { HandoverSubProcessStep(spStepID); //Debug.Log("进入下一步子流程步骤"); return 3; } else { int spCount = d_Scheme.CurrentProcess.subProcesses.Count; int spID = subProcessId + 1; if (spID <= d_Scheme.CurrentProcess.subProcesses[spCount - 1].id) { HandoverSubProcess(spID, 0); GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcess, d_Scheme.CurrentProcess.CurrentSubProcessId); Debug.Log("进入下一步子流程"); return 2; } else { int pCount = d_Scheme.processes.Count; int pID = processId + 1; if (pID <= d_Scheme.processes[pCount - 1].id) { HandoverProcess(pID, 0, 0); GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStep, d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStepId); GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcess, d_Scheme.CurrentProcess.CurrentSubProcessId); Debug.Log($"进入下一步流程"); return 1; } else { Debug.Log($"完成所有"); //HQB 20240828完成后展示学习完成Tips GameManager.UIMgr.ShowPanel(E_UI_Layer.System); return 0; } } } } else { Debug.Log($"按照流程走"); StepErrorTips(); return -1; } } /// /// 0 正常,1 不在当前步骤触发ID,2 当前步骤没有触发ID了 /// /// /// public int IsRightSubProcessStepsTriggerID(string triggerName, bool isRemove) { if (GameManager.RunModelMgr.ModeType != E_ModeType.Study) return 0; if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.precondition == GameManager.RunModelMgr.SceneType.ToString()) { if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count > 0) { string currentSubProcessStepTriggerID = d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName[0]; if (triggerName == currentSubProcessStepTriggerID) { if (isRemove) { d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.RemoveAt(0); } if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count == 0) { if (triggerName != "工具间按钮" && triggerName != "现场按钮" && triggerName != "收回工具") { if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep == d_Scheme.CurrentProcess.CurrentSubProcess.subProcessStepes.Last()) { if (d_Scheme.CurrentProcess.CurrentSubProcess == d_Scheme.CurrentProcess.subProcesses.Last()) { CheckSubProcessSteps(subProcessStepId); } else { GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (p) => { p.Init("提示", "当前步骤已完成,即将进入下一步", E_MessageType.Normal, () => { CheckSubProcessSteps(subProcessStepId); CurrentSubProcessStepTriggerNames(); }); }); } } else { CheckSubProcessSteps(subProcessStepId); } } else { CheckSubProcessSteps(subProcessStepId); } } CurrentSubProcessStepTriggerNames(); return 0; } else { StepErrorTips(); return 1; } } else { Debug.Log($"没有提示"); return 2; } } else { StepErrorTips(); return -1; } } /// /// 切换流程之后, 当前子流程步骤triggerName不等于0的时候操作 /// private void CurrentSubProcessStepTriggerNames() { if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count != 0) { string triggerNameTemp = d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName[0]; string splitResult = ""; if (triggerNameTemp.Contains("+")) { splitResult = triggerNameTemp.Split('+')[1]; } else { splitResult = triggerNameTemp; } subProcessStepTriggerID = splitResult; GameManager.EventMgr.EventTrigger(Enum_EventType.SwitchSubProcessStepTriggerID, splitResult); } } /// /// 操作错子流程步骤的triggerName的错误提示 /// private void StepErrorTips() { if (GameManager.UIMgr.GetPanel()) { GameManager.UIMgr.GetPanel().Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}"); } else { GameManager.UIMgr.ShowPanel(E_UI_Layer.System, (p) => { p.Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}"); }); } } /// /// 倒计时 /// /// 倒计时多久 /// private IEnumerator CountDown(int time) { this.time = time; countDown = time; WaitForSeconds waitForSeconds = new WaitForSeconds(1); while (countDown > 0) { yield return waitForSeconds; countDown--; } } /// /// 结束 /// public void End() { schemeID = -1; mode = E_ModeType.None; if (coroutine != null) GameManager.MonoMgr.StopCoroutine(coroutine); d_Scheme = null; } }