protected override void DrawElementsListFooterCallback(Rect rect)
        {
            var ROLDefaults  = new ReorderableList.Defaults();
            var padding      = 4f;
            var _addBtnWidth = 50f;
            var _labelWidth  = 78f;

            Rect addRect = rect;

            addRect.xMin   = addRect.xMax - 420 > addRect.xMin ? addRect.xMax - 420 : addRect.xMin;
            addRect.height = (EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing * 2);
            var addBtnRect   = new Rect(rect.xMax - _addBtnWidth - (padding * 2), addRect.yMin, _addBtnWidth, EditorGUIUtility.singleLineHeight);
            var fieldRect    = new Rect(addRect.xMin + (padding * 2), addRect.yMin, addRect.width - _addBtnWidth - (padding * 6), EditorGUIUtility.singleLineHeight);
            var labelRect    = new Rect(fieldRect.xMin, fieldRect.yMin, _labelWidth, fieldRect.height);
            var boneNameRect = new Rect(labelRect.xMax + (padding * 2), fieldRect.yMin, ((fieldRect.width - _labelWidth) / 2) - (padding * 2), fieldRect.height);
            var propertyRect = new Rect(boneNameRect.xMax + (padding * 2), fieldRect.yMin, ((fieldRect.width - _labelWidth) / 2) - (padding * 2), fieldRect.height);


            if (Event.current.type == EventType.Repaint)
            {
                var prevFooterFixedHeight = ROLDefaults.footerBackground.fixedHeight;
                ROLDefaults.footerBackground.fixedHeight = addRect.height;
                ROLDefaults.footerBackground.Draw(addRect, false, false, false, false);
                ROLDefaults.footerBackground.fixedHeight = prevFooterFixedHeight;
            }

            EditorGUI.LabelField(labelRect, new GUIContent("Add Modifier:", "Add a Skeleton Modifier to the list"));
            GUI.SetNextControlName("BoneNameField");
            _chosenBoneNameToAdd = EditorGUI.TextField(boneNameRect, _chosenBoneNameToAdd);
            if (_chosenBoneNameToAdd == "" && GUI.GetNameOfFocusedControl() != "BoneNameField")
            {
                EditorGUI.BeginDisabledGroup(true);
                EditorGUI.TextArea(boneNameRect, "Bone Name", _placeholderTextStyle);
                EditorGUI.EndDisabledGroup();
            }
            _chosenPropertyToAdd = EditorGUI.Popup(propertyRect, _chosenPropertyToAdd, _propertyArray);

            //users need a message why they cant add (a warning icon in the button maybe?
            string     warningMessage = CanAddBoneForProp();
            GUIContent addBtnGUI      = new GUIContent("Add", "Choose the bone name and property to add first");

            if (warningMessage != "")
            {
                addBtnGUI.image = _warningIcon;
            }
            addBtnGUI.tooltip = warningMessage;
            EditorGUI.BeginDisabledGroup(warningMessage != "");
            if (GUI.Button(addBtnRect, addBtnGUI))
            {
                //do it!
                Debug.Log("Created a New Modifier");
                var newModifier = new SkeletonModifier(_chosenBoneNameToAdd, UMAUtils.StringToHash(_chosenBoneNameToAdd), (SkeletonModifier.SkeletonPropType)_chosenPropertyToAdd);
                (_target as SkeletonDNAConverterPlugin).AddModifier(newModifier);
                _chosenBoneNameToAdd = "";
                serializedObject.Update();
                CacheArrayElementsByIndex(true);
            }
            EditorGUI.EndDisabledGroup();
        }
Пример #2
0
 public SkeletonModifier(SkeletonModifier importedModifier)
 {
     hashName = importedModifier.hashName;
     hash     = importedModifier.hash;
     property = importedModifier.property;
     valuesX  = importedModifier.valuesX;
     valuesY  = importedModifier.valuesY;
     valuesZ  = importedModifier.valuesZ;
     umaDNA   = importedModifier.umaDNA;
 }
Пример #3
0
#pragma warning disable 618 //disable obsolete warning
        /// <summary>
        /// Returns the DNANames used by the given skeleton modifier,
        /// optionally filtering by a given name, in which case the returned list count will only be greater than zero if the modifier used the name.
        /// This can be used to query if any modifiers were using the given name
        /// </summary>
        /// <returns></returns>
        private List <string> SkeletonModifierUsedDNANames(SkeletonModifier skeletonModifier, bool searchLegacy = false, string dnaName = "")
        {
            List <string> usedNames = new List <string>();
            //names from new _modifyingDNA in the modifiers
            var xNames = skeletonModifier.valuesX.val.modifyingDNA.UsedDNANames;
            var yNames = skeletonModifier.valuesY.val.modifyingDNA.UsedDNANames;
            var zNames = skeletonModifier.valuesZ.val.modifyingDNA.UsedDNANames;

            for (int i = 0; i < xNames.Count; i++)
            {
                if (!usedNames.Contains(xNames[i]) && (dnaName == "" || (!string.IsNullOrEmpty(dnaName) && xNames[i] == dnaName)))
                {
                    usedNames.Add(xNames[i]);
                }
            }
            for (int i = 0; i < yNames.Count; i++)
            {
                if (!usedNames.Contains(yNames[i]) && (dnaName == "" || (!string.IsNullOrEmpty(dnaName) && yNames[i] == dnaName)))
                {
                    usedNames.Add(yNames[i]);
                }
            }
            for (int i = 0; i < zNames.Count; i++)
            {
                if (!usedNames.Contains(zNames[i]) && (dnaName == "" || (!string.IsNullOrEmpty(dnaName) && zNames[i] == dnaName)))
                {
                    usedNames.Add(zNames[i]);
                }
            }
            if (searchLegacy)
            {
                //legacy names
                for (int xi = 0; xi < skeletonModifier.valuesX.val.modifiers.Count; xi++)
                {
                    if (!string.IsNullOrEmpty(skeletonModifier.valuesX.val.modifiers[xi].DNATypeName) &&
                        dnaName == "" || (!string.IsNullOrEmpty(dnaName) && skeletonModifier.valuesX.val.modifiers[xi].DNATypeName == dnaName))
                    {
                        if (!usedNames.Contains(skeletonModifier.valuesX.val.modifiers[xi].DNATypeName))
                        {
                            usedNames.Add(skeletonModifier.valuesX.val.modifiers[xi].DNATypeName);
                        }
                    }
                }
                for (int yi = 0; yi < skeletonModifier.valuesY.val.modifiers.Count; yi++)
                {
                    if (!string.IsNullOrEmpty(skeletonModifier.valuesY.val.modifiers[yi].DNATypeName) &&
                        dnaName == "" || (!string.IsNullOrEmpty(dnaName) && skeletonModifier.valuesY.val.modifiers[yi].DNATypeName == dnaName))
                    {
                        if (!usedNames.Contains(skeletonModifier.valuesY.val.modifiers[yi].DNATypeName))
                        {
                            usedNames.Add(skeletonModifier.valuesY.val.modifiers[yi].DNATypeName);
                        }
                    }
                }
                for (int zi = 0; zi < skeletonModifier.valuesZ.val.modifiers.Count; zi++)
                {
                    if (!string.IsNullOrEmpty(skeletonModifier.valuesZ.val.modifiers[zi].DNATypeName) &&
                        dnaName == "" || (!string.IsNullOrEmpty(dnaName) && skeletonModifier.valuesZ.val.modifiers[zi].DNATypeName == dnaName))
                    {
                        if (!usedNames.Contains(skeletonModifier.valuesZ.val.modifiers[zi].DNATypeName))
                        {
                            usedNames.Add(skeletonModifier.valuesZ.val.modifiers[zi].DNATypeName);
                        }
                    }
                }
            }
            return(usedNames);
        }
Пример #4
0
 public void AddModifier(SkeletonModifier modifier)
 {
     _skeletonModifiers.Add(modifier);
 }