/// <summary>
        /// Get an animation from a legacy animation component.
        /// </summary>
        /// <param name="title">Title for action field.</param>
        /// <param name="actionParams">Action field parameters.</param>
        /// <param name="actionField">Action field.</param>
        /// <param name="heroObject">Hero object that is the target of this action.</param>
        /// <param name="stateID">ID of the state that contains the animation controller.</param>
        /// <param name="titleToLeft">Show the title on the left?</param>
        /// <returns>The animation controller.</returns>
        public static Animation BuildFieldA_Legacy(string title, HeroActionParams actionParams, HeroActionField actionField, HeroObject heroObject, int stateID, bool titleToLeft = false)
        {
            // create the fields
            AnimationParameterFieldData data = CreateFieldData(title, actionField);

            //-----------------------------------------
            // Display this title above the field
            //-----------------------------------------
            if (data.title != "" && !titleToLeft)
            {
                SimpleLayout.Label(data.title);
            }
            SimpleLayout.BeginHorizontal();
            if (data.title != "" && titleToLeft)
            {
                SimpleLayout.Label(data.title);
            }

            //-----------------------------------------
            // Get the animation controller we are working with
            //-----------------------------------------
            Animation animation = null;

            if (heroObject.states.states[stateID].heroVisuals.prefab != null)
            {
                animation = heroObject.states.states[stateID].heroVisuals.prefab.GetComponent <Animation>();
            }

            if (animation == null)
            {
                SimpleLayout.Space();
                SimpleLayout.EndHorizontal();
                return(null);
            }

            //-----------------------------------------
            // Get the triggers we want to work with
            //-----------------------------------------
            List <string> items = GetItemsFromList_Legacy(animation);

            data = BuildItemFieldList(data, items);

            //-----------------------------------------
            // assign values back to hero object fields
            //-----------------------------------------
            actionField.ints[0]    = data.fieldID;
            actionField.strings[0] = data.fieldName;

            //-----------------------------------------
            // Visual stuff
            //-----------------------------------------
            SimpleLayout.Space();
            SimpleLayout.EndHorizontal();

            return(animation);
        }
        // --------------------------------------------------------------
        // Initialize Action Field
        // --------------------------------------------------------------

        /// <summary>
        /// Create the subfields that we need for this action field.
        /// </summary>
        /// <param name="title">The title of the action.</param>
        /// <param name="actionField">The action field.</param>
        /// <returns>The data for this action field.</returns>
        private static AnimationParameterFieldData CreateFieldData(string title, HeroActionField actionField)
        {
            AnimationParameterFieldData data = new AnimationParameterFieldData();

            data.Init(ref actionField);
            data.title     = title;
            data.fieldID   = actionField.ints[0];
            data.fieldName = actionField.strings[0];
            return(data);
        }
        // --------------------------------------------------------------
        // Action Fields
        // --------------------------------------------------------------

        /// <summary>
        /// Get an animation controller.
        /// </summary>
        /// <param name="title">Title for action field.</param>
        /// <param name="actionParams">Action field parameters.</param>
        /// <param name="actionField">Action field.</param>
        /// <param name="heroObject">Hero object that is the target of this action.</param>
        /// <param name="stateID">ID of the state that contains the animation controller.</param>
        /// <param name="paramType">Animation controller parameter type.</param>
        /// <param name="titleToLeft">Show the title on the left?</param>
        /// <returns>The animation controller.</returns>
        public static RuntimeAnimatorController BuildFieldA(string title, HeroActionParams actionParams, HeroActionField actionField, HeroObject heroObject, int stateID, AnimatorControllerParameterType paramType, bool titleToLeft = false)
        {
            // create the fields
            AnimationParameterFieldData data = CreateFieldData(title, actionField);

            //-----------------------------------------
            // Display this title above the field
            //-----------------------------------------
            if (data.title != "" && !titleToLeft)
            {
                SimpleLayout.Label(data.title);
            }
            SimpleLayout.BeginHorizontal();
            if (data.title != "" && titleToLeft)
            {
                SimpleLayout.Label(data.title);
            }

            //-----------------------------------------
            // Get the animation controller we are working with
            //-----------------------------------------
            RuntimeAnimatorController animatorController = heroObject.states.states[stateID].heroVisuals.animatorController;

            if (animatorController == null)
            {
                SimpleLayout.Space();
                SimpleLayout.EndHorizontal();
                return(null);
            }

            //-----------------------------------------
            // Get the triggers we want to work with
            //-----------------------------------------
            List <string> items = GetItemsFromList(animatorController, paramType);

            data = BuildItemFieldList(data, items);

            //-----------------------------------------
            // assign values back to hero object fields
            //-----------------------------------------
            actionField.ints[0]    = data.fieldID;
            actionField.strings[0] = data.fieldName;

            //-----------------------------------------
            // Visual stuff
            //-----------------------------------------
            SimpleLayout.Space();
            SimpleLayout.EndHorizontal();

            return(animatorController);
        }
        /// <summary>
        /// Create a list of animation controller parameters.
        /// </summary>
        /// <param name="data">Current data for this action field.</param>
        /// <param name="items">A list of animation controller parameter names.</param>
        /// <returns></returns>
        private static AnimationParameterFieldData BuildItemFieldList(AnimationParameterFieldData data, List <string> items)
        {
            data.fieldID = new GenericListField(items.ToArray()).SetValues(data.fieldID, 0);

            // if a field is selected, get the name of the field
            int itemID = data.fieldID - 1;

            if (itemID >= 0 && items != null && items.Count > itemID)
            {
                data.fieldName = items[itemID];
            }

            return(data);
        }