//------------------------------------------------------------ // Game Framework // Copyright © 2013-2021 loyalsoft. All rights reserved. // Homepage: http://www.game7000.com/ // Feedback: http://www.game7000.com/ //------------------------------------------------------------ using GameFramework.Fsm; using System; namespace GameFramework.Procedure { /// /// 流程管理器。 /// internal sealed class ProcedureManager : GameFrameworkModule, IProcedureManager { private IFsmManager m_FsmManager; private IFsm m_ProcedureFsm; /// /// 初始化流程管理器的新实例。 /// public ProcedureManager() { m_FsmManager = null; m_ProcedureFsm = null; } /// /// 获取游戏框架模块优先级。 /// /// 优先级较高的模块会优先轮询,并且关闭操作会后进行。 internal override int Priority { get { return -2; } } /// /// 获取当前流程。 /// public ProcedureBase CurrentProcedure { get { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return (ProcedureBase)m_ProcedureFsm.CurrentState; } } /// /// 获取当前流程持续时间。 /// public float CurrentProcedureTime { get { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return m_ProcedureFsm.CurrentStateTime; } } /// /// 流程管理器轮询。 /// /// 逻辑流逝时间,以秒为单位。 /// 真实流逝时间,以秒为单位。 internal override void Update(float elapseSeconds, float realElapseSeconds) { } /// /// 关闭并清理流程管理器。 /// internal override void Shutdown() { if (m_FsmManager != null) { if (m_ProcedureFsm != null) { m_FsmManager.DestroyFsm(m_ProcedureFsm); m_ProcedureFsm = null; } m_FsmManager = null; } } /// /// 初始化流程管理器。 /// /// 有限状态机管理器。 /// 流程管理器包含的流程。 public void Initialize(IFsmManager fsmManager, params ProcedureBase[] procedures) { if (fsmManager == null) { throw new GameFrameworkException("FSM manager is invalid."); } m_FsmManager = fsmManager; m_ProcedureFsm = m_FsmManager.CreateFsm(this, procedures); } /// /// 开始流程。 /// /// 要开始的流程类型。 public void StartProcedure() where T : ProcedureBase { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } m_ProcedureFsm.Start(); } /// /// 开始流程。 /// /// 要开始的流程类型。 public void StartProcedure(Type procedureType) { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } m_ProcedureFsm.Start(procedureType); } /// /// 是否存在流程。 /// /// 要检查的流程类型。 /// 是否存在流程。 public bool HasProcedure() where T : ProcedureBase { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return m_ProcedureFsm.HasState(); } /// /// 是否存在流程。 /// /// 要检查的流程类型。 /// 是否存在流程。 public bool HasProcedure(Type procedureType) { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return m_ProcedureFsm.HasState(procedureType); } /// /// 获取流程。 /// /// 要获取的流程类型。 /// 要获取的流程。 public ProcedureBase GetProcedure() where T : ProcedureBase { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return m_ProcedureFsm.GetState(); } /// /// 获取流程。 /// /// 要获取的流程类型。 /// 要获取的流程。 public ProcedureBase GetProcedure(Type procedureType) { if (m_ProcedureFsm == null) { throw new GameFrameworkException("You must initialize procedure first."); } return (ProcedureBase)m_ProcedureFsm.GetState(procedureType); } } }