107 lines
2.4 KiB
C#
107 lines
2.4 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Thousandto.Core.Support;
|
|
using UnityEngine;
|
|
|
|
namespace Thousandto.Code.Logic
|
|
{
|
|
/// <summary>
|
|
/// 状态system基类
|
|
/// </summary>
|
|
public class BaseStateSystem : IStateSystem
|
|
{
|
|
#region//私有变量
|
|
private StateMachine _fsm = null;
|
|
#endregion
|
|
|
|
#region//属性
|
|
public StateMachine Fsm
|
|
{
|
|
get
|
|
{
|
|
return _fsm;
|
|
}
|
|
}
|
|
#endregion
|
|
#region//私有函数
|
|
private void CreateStateMachine()
|
|
{
|
|
_fsm = new StateMachine(this);
|
|
}
|
|
#endregion
|
|
#region//实现接口
|
|
public void Initialize()
|
|
{
|
|
CreateStateMachine();
|
|
OnInitialize();
|
|
}
|
|
|
|
public void UnInitialize()
|
|
{
|
|
OnUnInitialize();
|
|
}
|
|
|
|
public IGameState GetCurState()
|
|
{
|
|
if (_fsm != null)
|
|
return _fsm.GetCurState();
|
|
return null;
|
|
}
|
|
|
|
public IGameState GetNextState()
|
|
{
|
|
if (_fsm != null)
|
|
return _fsm.GetNextState();
|
|
return null;
|
|
}
|
|
|
|
public IGameState GetPrevState()
|
|
{
|
|
if (_fsm != null)
|
|
return _fsm.GetPrevState();
|
|
return null;
|
|
}
|
|
|
|
public IGameState GetStateById(int id)
|
|
{
|
|
return OnGetStateById(id);
|
|
}
|
|
|
|
|
|
public bool IsCurState(int stateID)
|
|
{
|
|
if (_fsm != null)
|
|
{
|
|
return _fsm.IsState(stateID);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void ChangeState(int stateId, object arg = null)
|
|
{
|
|
OnChangeState(stateId, arg);
|
|
}
|
|
|
|
public void HandlerMessage(object msg)
|
|
{
|
|
OnHandlerMessage(msg);
|
|
}
|
|
|
|
public void Update(float dt)
|
|
{
|
|
OnUpdate(dt);
|
|
}
|
|
#endregion
|
|
|
|
#region//子类继承
|
|
protected virtual void OnInitialize() { }
|
|
protected virtual void OnUnInitialize() { }
|
|
protected virtual IGameState OnGetStateById(int id) { return null; }
|
|
protected virtual void OnChangeState(int stateId, object arg) { }
|
|
protected virtual void OnHandlerMessage(object msg) { }
|
|
protected virtual void OnUpdate(float dt) { }
|
|
#endregion
|
|
}
|
|
}
|
|
|