258 lines
8.4 KiB
C#
258 lines
8.4 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using System.Net.NetworkInformation;
|
||
using UnityEngine;
|
||
|
||
public class ProcessManager : BaseManager<ProcessManager>
|
||
{
|
||
/// <summary>
|
||
/// 构造函数
|
||
/// </summary>
|
||
private ProcessManager()
|
||
{
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 模式
|
||
/// </summary>
|
||
public E_ModeType mode;
|
||
|
||
/// <summary>
|
||
/// 用户数据
|
||
/// </summary>
|
||
public UserData userData = new UserData();
|
||
/// <summary>
|
||
/// 当前的项目/方案
|
||
/// </summary>
|
||
public D_Scheme d_Scheme;
|
||
|
||
|
||
/// <summary>
|
||
///当前方案ID
|
||
/// </summary>
|
||
public int schemeID = -1;
|
||
|
||
/// <summary>
|
||
/// 当前流程Id
|
||
/// </summary>
|
||
public int processId = -1;
|
||
|
||
/// <summary>
|
||
/// 当前子流程Id
|
||
/// </summary>
|
||
public int subProcessId = -1;
|
||
|
||
/// <summary>
|
||
/// 当前子流程步骤Id
|
||
/// </summary>
|
||
public int subProcessStepId = -1;
|
||
|
||
public string subProcessStepTriggerID = "-1";
|
||
|
||
/// <summary>
|
||
/// 倒计时,剩余时长
|
||
/// </summary>
|
||
public int countDown = 0;
|
||
|
||
/// <summary>
|
||
/// 实训/考试时长
|
||
/// </summary>
|
||
private int time;
|
||
|
||
/// <summary>
|
||
/// 记录倒计时的协程
|
||
/// </summary>
|
||
private Coroutine coroutine;
|
||
|
||
/// <summary>
|
||
/// 初始化
|
||
/// 根据方案id 生成流程数据
|
||
/// </summary>
|
||
/// <param name="id">方案id</param>
|
||
public void Init(int id, E_ModeType mode, int countDown = 600) //TODO 考试断线重连应该考虑初始化问题
|
||
{
|
||
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("流程初始化完成");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 切换流程
|
||
/// </summary>
|
||
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);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 切换流程
|
||
/// </summary>
|
||
public void HandoverSubProcess(int subProcessId, int subProcessStepId = 0)
|
||
{
|
||
if (processId == -1 || subProcessId == -1 || subProcessStepId == -1)
|
||
return;
|
||
d_Scheme.HandoverProcess(processId, subProcessId, subProcessStepId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 切换流程
|
||
/// </summary>
|
||
public void HandoverSubProcessStep(int subProcessStepId)
|
||
{
|
||
if (processId == -1 || subProcessId == -1 || subProcessStepId == -1)
|
||
return;
|
||
d_Scheme.HandoverProcess(processId, subProcessId, subProcessStepId);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 切换
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public bool 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 true;
|
||
}
|
||
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<int>(Enum_EventType.SwitchSubProcess, d_Scheme.CurrentProcess.CurrentSubProcessId);
|
||
|
||
Debug.Log("进入下一步子流程");
|
||
return true;
|
||
}
|
||
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<int>(Enum_EventType.SwitchSubProcessStep, d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStepId);
|
||
GameManager.EventMgr.EventTrigger<int>(Enum_EventType.SwitchSubProcess, d_Scheme.CurrentProcess.CurrentSubProcessId);
|
||
|
||
Debug.Log("进入下一步流程");
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
Debug.Log("完成所有");
|
||
return false;
|
||
}
|
||
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Debug.Log("按照流程走");
|
||
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.Mid, (panel) =>
|
||
{
|
||
panel.Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}");
|
||
});
|
||
return false;
|
||
}
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 0 正常,1 不在当前步骤触发ID,2 当前步骤没有触发ID了
|
||
/// </summary>
|
||
/// <param name="triggerID"></param>
|
||
/// <returns></returns>
|
||
public int IsRightSubProcessStepsTriggerID(string triggerID, bool isRemove)
|
||
{
|
||
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 (triggerID == currentSubProcessStepTriggerID)
|
||
{
|
||
if (isRemove)
|
||
d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.RemoveAt(0);
|
||
if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count == 0)
|
||
{
|
||
CheckSubProcessSteps(GameManager.ProcessMgr.subProcessStepId);
|
||
Debug.Log($"<color=red>triggersId空了</color>");
|
||
}
|
||
if (d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName.Count != 0)
|
||
{
|
||
GameManager.EventMgr.EventTrigger<string>(Enum_EventType.SwitchSubProcessStepTriggerID, d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.triggersName[0]);
|
||
}
|
||
return 0;
|
||
}
|
||
else
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.System, (p) =>
|
||
{
|
||
p.Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}");
|
||
});
|
||
return 1;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Debug.Log($"<color=red>没有提示</color>");
|
||
return 2;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.System, (p) =>
|
||
{
|
||
p.Init($"错误,请前往{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.SceneName()}");
|
||
});
|
||
return -1;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 倒计时
|
||
/// </summary>
|
||
/// <param name="time">倒计时多久</param>
|
||
/// <returns></returns>
|
||
private IEnumerator CountDown(int time)
|
||
{
|
||
this.time = time;
|
||
countDown = time;
|
||
WaitForSeconds waitForSeconds = new WaitForSeconds(1);
|
||
while (countDown > 0)
|
||
{
|
||
yield return waitForSeconds;
|
||
countDown--;
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 结束
|
||
/// </summary>
|
||
public void End()
|
||
{
|
||
schemeID = -1;
|
||
mode = E_ModeType.None;
|
||
if (coroutine != null)
|
||
GameManager.MonoMgr.StopCoroutine(coroutine);
|
||
d_Scheme = null;
|
||
}
|
||
} |