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