同步
This commit is contained in:
@@ -0,0 +1,82 @@
|
||||
/*
|
||||
Yarn Spinner is licensed to you under the terms found in the file LICENSE.md.
|
||||
*/
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Yarn.Unity.Editor
|
||||
{
|
||||
[CustomPropertyDrawer(typeof(FunctionInfo))]
|
||||
public class DerivedFunctionsPropertyDrawer : PropertyDrawer
|
||||
{
|
||||
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||||
{
|
||||
EditorGUI.BeginProperty(position, label, property);
|
||||
|
||||
const float leftInset = 8;
|
||||
|
||||
Rect RectForFieldIndex(int index, int lineCount = 1)
|
||||
{
|
||||
float verticalOffset = EditorGUIUtility.singleLineHeight * index + EditorGUIUtility.standardVerticalSpacing * index;
|
||||
float height = EditorGUIUtility.singleLineHeight * lineCount + EditorGUIUtility.standardVerticalSpacing * (lineCount - 1);
|
||||
|
||||
return new Rect(
|
||||
position.x + leftInset,
|
||||
position.y + verticalOffset,
|
||||
position.width - leftInset,
|
||||
height
|
||||
);
|
||||
}
|
||||
|
||||
var foldoutPosition = RectForFieldIndex(0);
|
||||
|
||||
SerializedProperty nameProperty = property.FindPropertyRelative("Name");
|
||||
string name = nameProperty?.stringValue ?? "FUNCTION NAME";
|
||||
|
||||
property.isExpanded = EditorGUI.Foldout(foldoutPosition, property.isExpanded, name);
|
||||
|
||||
if (property.isExpanded)
|
||||
{
|
||||
EditorGUI.indentLevel += 1;
|
||||
var typePosition = RectForFieldIndex(1);
|
||||
var paramPosition = RectForFieldIndex(2);
|
||||
|
||||
SerializedProperty typeProperty = property.FindPropertyRelative("ReturnType");
|
||||
EditorGUI.LabelField(typePosition, typeProperty?.stringValue ?? "RETURN");
|
||||
|
||||
SerializedProperty paramProperty = property.FindPropertyRelative("Parameters");
|
||||
int count = paramProperty?.arraySize ?? 0;
|
||||
if (count > 0)
|
||||
{
|
||||
string[] p = new string[count];
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
p[i] = paramProperty.GetArrayElementAtIndex(i).stringValue;
|
||||
}
|
||||
EditorGUI.LabelField(paramPosition, $"({string.Join(", ", p)})");
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUI.LabelField(paramPosition, $"No Parameters");
|
||||
}
|
||||
EditorGUI.indentLevel -= 1;
|
||||
}
|
||||
|
||||
EditorGUI.EndProperty();
|
||||
}
|
||||
|
||||
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||||
{
|
||||
|
||||
int lines = 1;
|
||||
|
||||
if (property.isExpanded)
|
||||
{
|
||||
lines = 3;
|
||||
}
|
||||
|
||||
return EditorGUIUtility.singleLineHeight * lines + EditorGUIUtility.standardVerticalSpacing * lines + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user