Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class #SCRIPTNAME# : MonoBehaviour {
- public bool bLogStateChanges;
- public enum State
- {
- State1,
- State2
- }
- public State state;
- //============================================
- // EVENTS
- //============================================
- #region Events
- public delegate void StateHandler(GameObject thisGO, State state);
- public static event StateHandler StateChanged;
- #endregion
- #region Event Subscriptions
- void OnEnable()
- {
- }
- void OnDisable()
- {
- }
- #endregion
- //============================================
- // STATES
- //============================================
- #region StateFunctions
- void NextState()
- {
- string methodName = state.ToString() + "State";
- System.Reflection.MethodInfo info = GetType().GetMethod(methodName, System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
- StartCoroutine((IEnumerator)info.Invoke(this, null));
- }
- void StateEnter()
- {
- if (bLogStateChanges)
- Debug.Log(this.GetType().Name + " / " + state + " / " + "ENTER");
- // SEND EVENT
- if (StateChanged != null)
- StateChanged(gameObject, state);
- }
- void StateExit()
- {
- }
- #endregion
- IEnumerator State1State()
- {
- StateEnter();
- while (state == State.State1)
- {
- yield return null;
- }
- StateExit();
- NextState();
- }
- IEnumerator State2State()
- {
- StateEnter();
- while (state == State.State2)
- {
- yield return null;
- }
- StateExit();
- NextState();
- }
- //============================================
- // FUNCTIONS
- //============================================
- void Start()
- {
- NextState();
- }
- //============================================
- // EVENT RECEIVERS
- //============================================
- }
Add Comment
Please, Sign In to add comment