using cfg.GuideCfg; using cfg.ProcedureCfg; using Framework; using PhxhSDK; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 强制流程管理器 /// public class ProcedureManager : Singlenton, IInitable { /// /// 强制流程数据,key:检查类型,value:强制流程数组 /// private Dictionary> dicProcedure; /// /// 当前流程 /// private ProcedureBase curProcedureBase; /// /// 是否强制流程中 /// public bool IsProceduring { get { if (null == curProcedureBase) return false; return curProcedureBase.IsProceduring(); } } public void Init() { EventManager.Instance.Register(EventManager.EventName.AllConfigLoad, InitData); } public void Release() { EventManager.Instance.Unregister(EventManager.EventName.AllConfigLoad, InitData); } /// /// 检查是否可以进入强制流程 /// /// public bool CheckEnterProcedure(E_ProcedureCheck procedureCheck) { curProcedureBase = null; return false; if (!dicProcedure.TryGetValue(procedureCheck, out List listProcedure)) { DebugUtil.LogError($"没有获得到{procedureCheck.GetType()}类型的配置"); curProcedureBase = null; return false; } foreach (ProcedureBase procedure in listProcedure) { if (!procedure.IsCanStart()) continue; curProcedureBase = procedure; return true; } curProcedureBase = null; return false; } /// /// 进入强制流程 /// public void EnterProcedure() { if (null == curProcedureBase) return; curProcedureBase.Begin(); } /// /// 初始化数据 /// private void InitData() { dicProcedure = new(); foreach (DataProcedure cfg in TableManager.Instance.Tables.ProcedureConfig.DataList) { ProcedureBase procedureBase = cfg.ProcedureType switch { E_Procedure.EnterLevel => new EnterLevel_Procedure(cfg), E_Procedure.EnterTeamInfoUI => new EnterTeamInfoUI_Procedure(cfg), E_Procedure.EnterEditTeamUI => new EnterEditTeamUI_Procedure(cfg), _ => throw new Exception($"未处理类型{cfg.ProcedureType}"), }; foreach (E_ProcedureCheck procedureCheck in cfg.ProcedureCheckType) { if (!dicProcedure.TryGetValue(procedureCheck, out List listProcedure)) { listProcedure = new(); dicProcedure[procedureCheck] = listProcedure; } listProcedure.Add(procedureBase); } } } }