public ScriptableState GetState(ScriptableState value)
 {
     if (!states.Contains(value))
     {
         states.Add(value);
     }
     return(states.Find(state => state.Equals(value)));
 }
        protected void Transition(ScriptableState value)
        {
            if (currentState == value || inTransition)
            {
                return;
            }

            inTransition = true;

            if (currentState != null)
            {
                currentState.Exit();
            }

            currentState = value;

            if (currentState != null)
            {
                currentState.Enter();
            }

            inTransition = false;
        }
 public void ChangeState(ScriptableState value)
 {
     CurrentState = GetState(value);
 }