修改fsm
This commit is contained in:
93
Assets/03.FiniteStateMachine/RunTime/Base/IFSMController.cs
Normal file
93
Assets/03.FiniteStateMachine/RunTime/Base/IFSMController.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Stary.Evo.FiniteStateMachine
|
||||
{
|
||||
public interface IFSMController
|
||||
{
|
||||
void Initialize();
|
||||
void AddState(IFSMIState state);
|
||||
void RemoveState(IFSMIState state);
|
||||
}
|
||||
public abstract class FSMController : MonoBehaviour,IFSMController
|
||||
{
|
||||
private IFSMManager manager;
|
||||
|
||||
|
||||
public void Start()
|
||||
{
|
||||
manager = new FSMManager();
|
||||
Initialize();
|
||||
}
|
||||
|
||||
public void AddState(IFSMIState state)
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
manager.AddState(state);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("FSMManager未初始化!!");
|
||||
}
|
||||
}
|
||||
public void RemoveState(IFSMIState state)
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
manager.RemoveState(state);
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("FSMManager未初始化!!");
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// FSM在此类中初始化,进行状态的添加等操作
|
||||
/// </summary>
|
||||
public abstract void Initialize();
|
||||
private void Update()
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
manager.CurState.Update();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("FSMManager未初始化!!");
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
manager.CurState.FixedUpdate();
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("FSMManager未初始化!!");
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (manager != null)
|
||||
{
|
||||
foreach (var state in manager. States)
|
||||
{
|
||||
state.Value.OnDestory();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("FSMManager未初始化!!");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user