211 lines
6.5 KiB
C#
211 lines
6.5 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;
|
|
|
|
|
|
/// <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);
|
|
|
|
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.CurrentSubProcessStep.id.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);
|
|
GameManager.UIMgr.ShowPanel<UI_TopTipPanel>(E_UI_Layer.System, (panel) =>
|
|
{
|
|
panel.Init($"{d_Scheme.CurrentProcess.processName}:<color=blue>{d_Scheme.CurrentProcess.CurrentSubProcess.subProcessName}</color>", $"{d_Scheme.CurrentProcess.CurrentSubProcess.tips}");
|
|
});
|
|
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.UIMgr.ShowPanel<UI_TopTipPanel>(E_UI_Layer.System, (panel) =>
|
|
{
|
|
panel.Init($"{d_Scheme.CurrentProcess.processName}:<color=blue>{d_Scheme.CurrentProcess.CurrentSubProcess.subProcessName}</color>", $"{d_Scheme.CurrentProcess.CurrentSubProcess.tips}");
|
|
});
|
|
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.UIMgr.ShowPanel<UI_TopTipPanel>(E_UI_Layer.System, (panel) =>
|
|
{
|
|
panel.Init($"{d_Scheme.CurrentProcess.processName}:<color=blue>{d_Scheme.CurrentProcess.CurrentSubProcess.subProcessName}</color>", $"{d_Scheme.CurrentProcess.CurrentSubProcess.tips}");
|
|
});
|
|
Debug.Log("进入下一步流程");
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("完成所有");
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("按照流程走");
|
|
GameManager.UIMgr.ShowPanel<UI_TopTipPanel>(E_UI_Layer.System, (panel) =>
|
|
{
|
|
panel.Init($"<color=red>错误:</color>:<color=blue>{d_Scheme.CurrentProcess.CurrentSubProcess.subProcessName}</color>", $"{d_Scheme.CurrentProcess.CurrentSubProcess.tips}");
|
|
});
|
|
return false;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/// <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;
|
|
}
|
|
} |