Files
Main/Assets/Code/Logic/_Required/GameState/System/BaseStateSystem.cs
2025-01-25 04:38:09 +08:00

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
}
}