YanCheng_Metrology/Assets/Scripts/Project/Manager/ProcessManager.cs

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;
}
}