NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Procedure/ProcedureManager.cs

117 lines
3.1 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using cfg.GuideCfg;
using cfg.ProcedureCfg;
using Framework;
using PhxhSDK;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// 强制流程管理器
/// </summary>
public class ProcedureManager : Singlenton<ProcedureManager>, IInitable
{
/// <summary>
/// 强制流程数据key:检查类型value:强制流程数组
/// </summary>
private Dictionary<E_ProcedureCheck, List<ProcedureBase>> dicProcedure;
/// <summary>
/// 当前流程
/// </summary>
private ProcedureBase curProcedureBase;
/// <summary>
/// 是否强制流程中
/// </summary>
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);
}
/// <summary>
/// 检查是否可以进入强制流程
/// </summary>
/// <returns></returns>
public bool CheckEnterProcedure(E_ProcedureCheck procedureCheck)
{
curProcedureBase = null;
return false;
if (!dicProcedure.TryGetValue(procedureCheck, out List<ProcedureBase> 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;
}
/// <summary>
/// 进入强制流程
/// </summary>
public void EnterProcedure()
{
if (null == curProcedureBase)
return;
curProcedureBase.Begin();
}
/// <summary>
/// 初始化数据
/// </summary>
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<ProcedureBase> listProcedure))
{
listProcedure = new();
dicProcedure[procedureCheck] = listProcedure;
}
listProcedure.Add(procedureBase);
}
}
}
}