public bool Corresponds(AnimatorParameter other)
 {
     return
         ((other != null || !this.isAssigned) &&
          this.target == other.target &&
          this.name == other.name);
 }
        /// <inheritdoc />
        protected override void RenderMemberControl(Rect position)
        {
            var options = GetNameOptions();

            PopupOption <AnimatorParameter> selectedOption = null;
            PopupOption <AnimatorParameter> noneOption     = new PopupOption <AnimatorParameter>(null, "No Parameter");

            AnimatorParameter value = GetValue();

            if (value != null)
            {
                string label = value.name;

                AnimatorParameter valueInOptions = options.Select(option => option.value).FirstOrDefault(ap => ap.Corresponds(value));

                if (valueInOptions != null)
                {
                    selectedOption = new PopupOption <AnimatorParameter>(valueInOptions, label);
                }
                else
                {
                    selectedOption = new PopupOption <AnimatorParameter>(value, label);
                }
            }

            // Make sure the callback uses the property of this drawer, not at its later value.
            var propertyNow = property;

            bool enabled = targets.Any(target => target != null);

            if (!enabled)
            {
                EditorGUI.BeginDisabledGroup(true);
            }

            PopupGUI <AnimatorParameter> .Render
            (
                position,
                newValue =>
            {
                Update(propertyNow);
                SetValue(newValue);
                propertyNow.serializedObject.ApplyModifiedProperties();
            },
                options,
                selectedOption,
                noneOption,
                nameProperty.hasMultipleDifferentValues
            );

            if (!enabled)
            {
                EditorGUI.EndDisabledGroup();
            }
        }
 /// <summary>
 /// Assigns the property values from a specified animator parameter.
 /// </summary>
 protected void SetValue(AnimatorParameter value)
 {
     if (value != null)
     {
         nameProperty.stringValue = value.name;
     }
     else
     {
         nameProperty.stringValue = null;
     }
 }