using UnityEngine;
using System.Collections;
using InnerSpace.Utility;
namespace InnerSpace
{
//SomeStateMachine being a state machine that receives an enum type for it\'s states
public class GameState : SomeStateMachine<GameState.States>
{
class StateInfo : System.Attribute
{
public string Name;
public bool Paused;
public States Parent;
public States Resume;
public StateInfo (string name, bool paused, States parent, States resume)
{
Name = name;
Paused = paused;
Parent = parent;
Resume = resume;
}
public StateInfo (string name, bool paused, States parent)
: this(name, paused, parent, parent) {}
}
public enum States
{
[StateInfo("Playing", false, States.Playing, States.Paused)]
Playing,
[StateInfo("Paused", true, States.Playing)]
Paused,
[StateInfo("RelicCatalogue", true, States.Paused)]
RelicCatalogue,
[StateInfo("Inspector", true, States.RelicCatalogue)]
RelicInspector,
[StateInfo("PlaneSwap", true, States.Paused)]
PlaneSwap,
[StateInfo("CompanionSwap", true, States.Paused)]
CompanionSwap,
[StateInfo("Settings", true, States.Paused)]
Settings,
[StateInfo("MainMenu", true, States.MainMenu)]
MainMenu,
[StateInfo("Save/Load", true, States.MainMenu)]
SaveLoad
}
void Update ()
{
if (Input.GetButtonDown (InnerStrings.INPUT_CANCEL)) {
StateInfo si = CurrentState.GetAttributeOfType<StateInfo> ();
SetStateAndDoActions (si.Parent);
}
else if (Input.GetButtonDown (InnerStrings.INPUT_PAUSE)) {
StateInfo si = CurrentState.GetAttributeOfType<StateInfo> ();
SetStateAndDoActions (si.Parent);
}
}
public void SetStateAndDoActions (States state)
{
StateInfo gs = state.GetAttributeOfType<StateInfo> ();
Time.timeScale = gs.Paused ? 0f : 1f;
//Some method from "SomeStateMachine"
this.ChangeState(state);
}
}
}