document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. using UnityEngine;
  2. using System.Collections;
  3. using InnerSpace.Utility;
  4.  
  5. namespace InnerSpace
  6. {
  7.     //SomeStateMachine being a state machine that receives an enum type for it\'s states
  8.     public class GameState : SomeStateMachine<GameState.States>
  9.     {
  10.         class StateInfo : System.Attribute
  11.         {
  12.             public string Name;
  13.             public bool Paused;
  14.             public States Parent;
  15.             public States Resume;
  16.  
  17.             public StateInfo (string name, bool paused, States parent, States resume)
  18.             {
  19.                 Name = name;
  20.                 Paused = paused;
  21.                 Parent = parent;
  22.                 Resume = resume;
  23.             }
  24.             public StateInfo (string name, bool paused, States parent)
  25.                 : this(name, paused, parent, parent) {}
  26.         }
  27.  
  28.         public enum States
  29.         {
  30.             [StateInfo("Playing", false, States.Playing, States.Paused)]
  31.             Playing,
  32.             [StateInfo("Paused", true, States.Playing)]
  33.             Paused,
  34.                 [StateInfo("RelicCatalogue", true, States.Paused)]
  35.                 RelicCatalogue,
  36.                     [StateInfo("Inspector", true, States.RelicCatalogue)]
  37.                     RelicInspector,
  38.                 [StateInfo("PlaneSwap", true, States.Paused)]
  39.                 PlaneSwap,
  40.                 [StateInfo("CompanionSwap", true, States.Paused)]
  41.                 CompanionSwap,
  42.                 [StateInfo("Settings", true, States.Paused)]
  43.                     Settings,
  44.                     [StateInfo("MainMenu", true, States.MainMenu)]
  45.             MainMenu,
  46.                 [StateInfo("Save/Load", true, States.MainMenu)]
  47.                 SaveLoad
  48.         }
  49.  
  50.         void Update ()
  51.         {
  52.             if (Input.GetButtonDown (InnerStrings.INPUT_CANCEL)) {
  53.                 StateInfo si = CurrentState.GetAttributeOfType<StateInfo> ();
  54.                 SetStateAndDoActions (si.Parent);
  55.             }
  56.             else if (Input.GetButtonDown (InnerStrings.INPUT_PAUSE)) {
  57.                 StateInfo si = CurrentState.GetAttributeOfType<StateInfo> ();
  58.                 SetStateAndDoActions (si.Parent);
  59.             }
  60.         }
  61.  
  62.         public void SetStateAndDoActions (States state)
  63.         {
  64.             StateInfo gs = state.GetAttributeOfType<StateInfo> ();
  65.             Time.timeScale = gs.Paused ? 0f : 1f;
  66.             //Some method from "SomeStateMachine"
  67.             this.ChangeState(state);
  68.         }
  69.     }
  70. }
');