void DrawParamsWindow() { float w = 350; float h = 130 + Mathf.Max(serializedObject.FindProperty("frames").GetArrayElementAtIndex(frameToEdit) .FindPropertyRelative("paramList._params").arraySize - 1, 0) * ParamPropertyDrawer.GetPropertyHeight(); float x = position.width - 24 - w; float y = position.height - 24 - h; bool wideMode = EditorGUIUtility.wideMode; float labelWidth = EditorGUIUtility.labelWidth; EditorGUIUtility.labelWidth = 100f; EditorGUIUtility.wideMode = true; GUILayout.BeginArea(new Rect(x, y, w, h), "Clingy Sprite Params", new GUIStyle("window")); EditorGUILayout.PropertyField(serializedObject.FindProperty("previewSprite")); EditorGUILayout.Space(); paramsRL.DoLayoutList(); GUILayout.EndArea(); EditorGUIUtility.labelWidth = labelWidth; EditorGUIUtility.wideMode = wideMode; }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { ParamSelectorAttribute attr = (ParamSelectorAttribute)attribute; Rect initialRect = position; if (attr.providers == null || attr.providers.Length == 0) { attr.GetProvidersFromStrategy(GetStrategy(property)); } else if (!attr.hasLabels) { attr.BuildLabels(GetStrategy(property)); } EditorGUI.BeginProperty(position, label, property); EditorGUI.BeginDisabledGroup(attr.providers.Length == 0); position = EditorGUI.PrefixLabel(position, label); float width = position.width / 2 - 2; Rect rect = new Rect(position.x, position.y, width, EditorGUIUtility.singleLineHeight); int indentLevel = EditorGUI.indentLevel; EditorGUI.indentLevel = 0; ParamRelativityType relativityType = (ParamRelativityType)property.FindPropertyRelative("relativityType").enumValueIndex; ParamNormalRelativity relativeTo = (ParamNormalRelativity)property.FindPropertyRelative("relativeTo").enumValueIndex; // draw the provider picker SerializedProperty prop = property.FindPropertyRelative("provider"); DrawProviderPicker(rect, prop, attr); // draw the name prop rect.x += width + 4; prop = property.FindPropertyRelative("defaultParam.name"); EditorGUI.BeginChangeCheck(); string newName = EditorGUI.DelayedTextField(rect, prop.stringValue); if (EditorGUI.EndChangeCheck()) { prop.stringValue = newName; } EditorGUI.indentLevel = indentLevel + 1; float lineHeight = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; float yOff = lineHeight; // relativity if (relativityType != ParamRelativityType.None) { rect = initialRect; rect.height = EditorGUIUtility.singleLineHeight; rect.y += yOff; DrawRelativityProps(rect, property, attr); yOff += lineHeight; } // position options bool showPositionOptions = property.FindPropertyRelative("showPositionOptions").boolValue; if (showPositionOptions && relativityType == ParamRelativityType.Normal && relativeTo != ParamNormalRelativity.World) { rect = initialRect; rect.height = EditorGUIUtility.singleLineHeight; rect.y += yOff; EditorGUI.PropertyField(rect, property.FindPropertyRelative("useTransform")); rect.y += lineHeight; EditorGUI.PropertyField(rect, property.FindPropertyRelative("useSpriteFlip")); yOff += lineHeight * 2; } // default value rect = initialRect; rect.y += yOff; rect.height = EditorGUIUtility.singleLineHeight; rect = EditorGUI.PrefixLabel(rect, new GUIContent("Default")); ParamPropertyDrawer.DrawValueProp(rect, property.FindPropertyRelative("defaultParam"), ""); EditorGUI.indentLevel = indentLevel; EditorGUI.EndDisabledGroup(); EditorGUI.EndProperty(); }