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

310 lines
10 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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("按照流程走");
StepErrorTips();
return false;
}
}
//public int currentSubProcessIDTemp = 0;
/// <summary>
/// 0 正常1 不在当前步骤触发ID2 当前步骤没有触发ID了
/// </summary>
/// <param name="triggerName"></param>
/// <returns></returns>
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 (currentSubProcessIDTemp == d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.subProcessId)
//{
// Debug.Log($"<color=red>子流程id相等</color>");
//}
//else
//{
// Debug.Log($"<color=green>子流程id不相等</color>");
//}
if (triggerName != "工具间按钮" && triggerName != "现场按钮" && triggerName != "收回工具")
{
GameManager.UIMgr.ShowPanel<UI_MessagePanel>(E_UI_Layer.System, (p) =>
{
p.Init("提示", "当前步骤已完成,即将进入下一步", E_MessageType.Normal, () =>
{
CheckSubProcessSteps(subProcessStepId);
CurrentSubProcessStepTriggerNames();
});
});
}
else
{
CheckSubProcessSteps(subProcessStepId);
}
}
CurrentSubProcessStepTriggerNames();
return 0;
}
else
{
StepErrorTips();
return 1;
}
}
else
{
Debug.Log($"<color=red>没有提示</color>");
return 2;
}
}
else
{
StepErrorTips();
return -1;
}
}
/// <summary>
/// 切换流程之后, 当前子流程步骤triggerName不等于0的时候操作
/// </summary>
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<string>(Enum_EventType.SwitchSubProcessStepTriggerID, splitResult);
}
}
/// <summary>
/// 操作错子流程步骤的triggerName的错误提示
/// </summary>
private void StepErrorTips()
{
if (GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>())
{
GameManager.UIMgr.GetPanel<UI_MiddleTipPanel>().Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}");
}
else
{
GameManager.UIMgr.ShowPanel<UI_MiddleTipPanel>(E_UI_Layer.System, (p) =>
{
p.Init($"错误,{d_Scheme.CurrentProcess.CurrentSubProcess.CurrentSubProcessStep.tipTitle}");
});
}
}
/// <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;
}
}