using UnityEngine;
using QFramework;
namespace Neo
{
public class GameStateManager : MonoBehaviour
{
public enum GameStates
{
GameStart,
World,
Battle,
}
public FSM<GameStates> FSM = new FSM<GameStates>();
// Start is called before the first frame update
void Start()
{
FSM.State(GameStates.GameStart)
.OnCondition(
() => true //FSM.CurrentStateId == GameStates.GameStart
)
.OnEnter(() =>
{
Debug.Log("Enter A");
})
.OnUpdate(() =>
{
})
.OnFixedUpdate(() =>
{
})
.OnGUI(() =>
{
GUILayout.Label("State Start");
if (GUILayout.Button("To State World"))
{
FSM.ChangeState(GameStates.World);
}
})
.OnExit(() =>
{
Debug.Log("Enter B");
});
FSM.State(GameStates.World)
.OnCondition(() => true)
.OnGUI(() =>
{
GUILayout.Label("State World");
if (GUILayout.Button("To State Start"))
{
FSM.ChangeState(GameStates.GameStart);
}
if (GUILayout.Button("To State Battle"))
{
FSM.ChangeState(GameStates.Battle);
}
});
FSM.State(GameStates.Battle)
.OnCondition(() => true)
.OnGUI(() =>
{
GUILayout.Label("State Battle");
if (GUILayout.Button("To State Start"))
{
FSM.ChangeState(GameStates.GameStart);
}
if (GUILayout.Button("To State World"))
{
FSM.ChangeState(GameStates.World);
}
});
FSM.StartState(GameStates.GameStart);
}
// Update is called once per frame
void Update()
{
FSM.Update();
}
void FixUpdate()
{
FSM.FixedUpdate();
}
private void OnGUI()
{
IMGUIHelper.SetDesignResolution(256, 192);
FSM.OnGUI();
}
}
}