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(); }
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; }
#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); }
public void AddModifier(SkeletonModifier modifier) { _skeletonModifiers.Add(modifier); }