public void GoToState(FiniteState newFiniteState)
        {
            if (currentFiniteState != null)
            {
                currentFiniteState.Exit();
            }

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

            currentFiniteState = newFiniteState;
        }
        // as long as this is not called multiple times a frame, this tradeoff of efficiency for flexibility has proven to be worth it (ted)
        public void GoToState(string stateName)
        {
            stateName = stateName.ToLower();
            FiniteState targetState = null;

            foreach (FiniteState finiteState in finiteStates)
            {
                if (finiteState.GetType().ToString().ToLower().Equals(stateName))
                {
                    targetState = finiteState;
                    break;
                }
            }

            if (targetState != null)
            {
                GoToState(targetState);
            }
            else
            {
                Debug.LogError("FiniteStateController could not find state named '" + stateName + "'");
            }
        }