void ButtonAddEffect(SerializedProperty list, int id, string name) { var listId = -1; for (int i = 0; i < list.arraySize && listId == -1; i++) { if (list.GetArrayElementAtIndex(i).intValue == id) { listId = i; } } EditorGUILayout.BeginHorizontal(); var has = (listId != -1); if (EditorGUILayout.Toggle(has, GUILayout.MaxWidth(15)) != has) { if (!has) { listId = list.arraySize; list.arraySize++; list.GetArrayElementAtIndex(listId).intValue = id; } else { K10EditorGUIUtils.RemoveItemFromArray(list, listId); } } var icon = IconCache.Get(name.ToLower()).Texture; if (icon != null) { GUILayout.Label(icon, K10GuiStyles.basicCenterStyle, GUILayout.Width(ICON_SIZE)); } GUILayout.Label(name, K10GuiStyles.smallboldStyle); EditorGUILayout.EndHorizontal(); }
public override void OnInspectorGUI() { bool changed = false; serializedObject.Update(); _target = (UiSkinManager)target; Event ev = Event.current; HashSet <string> _codes = new HashSet <string>(); var defsProp = serializedObject.FindProperty("_colorDefinitions"); //var defs = _target.SkinDefinitions; //if( defsProp.arraySize == 0 ) // return; if (_folds == null) { _folds = new List <bool>(); } while (_folds.Count > defsProp.arraySize) { _folds.RemoveAt(_folds.Count - 1); } while (_folds.Count < defsProp.arraySize) { _folds.Add(false); } for (int i = 0; i < defsProp.arraySize; i++) { SeparationLine.Horizontal(); var def = defsProp.GetArrayElementAtIndex(i); var codeName = def.FindPropertyRelative("_code"); var valid = !_codes.Contains(codeName.stringValue); var color = valid ? Color.white : Color.red; GuiColorManager.New(color); EditorGUILayout.BeginHorizontal(); _folds[i] = EditorGUILayout.Foldout(_folds[i], (valid ? "" : "!UNUSED! ") + codeName.stringValue, K10GuiStyles.bigFoldStyle); var fxOrderProp = def.FindPropertyRelative("_effectOrder"); var instance = _target.SkinDefinitions[i]; for (int e = 0; e < instance.FxCount; e++) { var fx = instance.GetFxAt(e); DrawFxIcon(fx); } bool canUp = i > 0; GuiColorManager.New((canUp) ? color : Color.gray); if (GUILayout.Button("↑", GUILayout.MaxWidth(15)) && canUp) { SwapSkins(i, i - 1); } GuiColorManager.Revert(); bool canDown = i < defsProp.arraySize - 1; GuiColorManager.New((canDown) ? color : Color.gray); if (GUILayout.Button("↓", GUILayout.MaxWidth(15)) && canDown) { SwapSkins(i, i + 1); } GuiColorManager.Revert(); GuiColorManager.New(new Color(.6f, .1f, .1f, 1)); if (GUILayout.Button("X", GUILayout.MaxWidth(20))) { K10EditorGUIUtils.RemoveItemFromArray(defsProp, i); i--; GuiColorManager.Revert(); GuiColorManager.Revert(); EditorGUILayout.EndHorizontal(); continue; } GuiColorManager.Revert(); EditorGUILayout.EndHorizontal(); if (_folds[i]) { SeparationLine.Horizontal(); EditorGUILayout.BeginHorizontal(); GUILayout.Label("Codename", K10GuiStyles.smallboldStyle, GUILayout.Width(75)); codeName.stringValue = EditorGUILayout.TextField(codeName.stringValue, K10GuiStyles.smalltextFieldStyle, GUILayout.Height(18)); _codes.Add(codeName.stringValue); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); //GUILayout.Label( "Color", K10EditorGUIUtils._smallboldStyle, GUILayout.Width( 40 ) ); ColorPicker.Layout(def.FindPropertyRelative("_color")); //def.Color = EditorGUILayout.ColorField( def.Color ); //GUILayout.Label( "Font", K10EditorGUIUtils._smallboldStyle, GUILayout.Width( 35 ) ); var fontProp = def.FindPropertyRelative("_font"); fontProp.objectReferenceValue = (Font)EditorGUILayout.ObjectField(fontProp.objectReferenceValue, typeof(Font), false); EditorGUILayout.EndHorizontal(); SeparationLine.Horizontal(); GUILayout.Label("Effects", K10GuiStyles.titleStyle); SeparationLine.Horizontal(); var shadowProp = def.FindPropertyRelative("_shadow"); var outlineProp = def.FindPropertyRelative("_outline"); var gradientProp = def.FindPropertyRelative("_gradient"); var sid = UiSkinDefinition.GetID <UiShadowEffect>(); var oid = UiSkinDefinition.GetID <UiOutlineEffect>(); var gid = UiSkinDefinition.GetID <UiGradientEffect>(); EditorGUILayout.BeginHorizontal(); //GUILayout.FlexibleSpace(); //EditorGUILayout.BeginVertical(); ButtonAddEffect(fxOrderProp, sid, "Shadow"); ButtonAddEffect(fxOrderProp, oid, "Outline"); ButtonAddEffect(fxOrderProp, gid, "Gradient"); //EditorGUILayout.EndVertical(); //GUILayout.FlexibleSpace(); EditorGUILayout.EndHorizontal(); if (fxOrderProp.arraySize > 0) { SeparationLine.Horizontal(); GUILayout.Label("Edit Effects", K10GuiStyles.titleStyle); for (int e = 0; e < fxOrderProp.arraySize; e++) { SeparationLine.Horizontal(); if (sid == fxOrderProp.GetArrayElementAtIndex(e).intValue) { EditShadow(shadowProp, fxOrderProp, e); } else if (oid == fxOrderProp.GetArrayElementAtIndex(e).intValue) { EditOutline(outlineProp, fxOrderProp, e); } else if (gid == fxOrderProp.GetArrayElementAtIndex(e).intValue) { EditGradient(gradientProp, fxOrderProp, e); } } } } SeparationLine.Horizontal(); EditorGUILayout.Space(); GuiColorManager.Revert(); } if (GUILayout.Button("Add New Skin Definition", K10GuiStyles.buttonStyle, GUILayout.Height(30))) { defsProp.arraySize++; } serializedObject.ApplyModifiedProperties(); changed = true; if (changed) { UpdateInstances(); } }