You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
2.5 KiB
67 lines
2.5 KiB
5 years ago
|
// This code is part of the Fungus library (https://github.com/snozbot/fungus)
|
||
|
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
|
||
|
|
||
|
using UnityEditor;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace Fungus.EditorUtils
|
||
|
{
|
||
|
/// <summary>
|
||
|
/// Custom drawer for the AnyVaraibleAndDataPair, shows only the matching data for the targeted variable
|
||
|
/// scripts.
|
||
|
/// </summary>
|
||
|
[CustomPropertyDrawer(typeof(Fungus.AnyVariableAndDataPair))]
|
||
|
public class AnyVariableAndDataPairDrawer : PropertyDrawer
|
||
|
{
|
||
|
public Fungus.Flowchart lastFlowchart;
|
||
|
|
||
|
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
position.height = EditorGUIUtility.singleLineHeight;
|
||
|
|
||
|
var varProp = property.FindPropertyRelative("variable");
|
||
|
|
||
|
EditorGUI.PropertyField(position, varProp, label);
|
||
|
|
||
|
position.y += EditorGUIUtility.singleLineHeight;
|
||
|
|
||
|
if (varProp.objectReferenceValue != null)
|
||
|
{
|
||
|
var varPropType = varProp.objectReferenceValue.GetType();
|
||
|
|
||
|
var typeActionsRes = AnyVariableAndDataPair.typeActionLookup[varPropType];
|
||
|
|
||
|
if (typeActionsRes != null)
|
||
|
{
|
||
|
var targetName = "data." + typeActionsRes.DataPropName;
|
||
|
var dataProp = property.FindPropertyRelative(targetName);
|
||
|
if (dataProp != null)
|
||
|
{
|
||
|
EditorGUI.PropertyField(position, dataProp, new GUIContent("Data", "Data to use in pair with the above variable."));
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
EditorGUI.LabelField(position, "Cound not find property in AnyVariableData of name " + targetName);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//no matching data type, oops
|
||
|
EditorGUI.LabelField(position, "Cound not find property in AnyVariableData of type " + varPropType.Name);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
//no var selected
|
||
|
EditorGUI.LabelField(position, "Must select a variable before setting data.");
|
||
|
}
|
||
|
|
||
|
property.serializedObject.ApplyModifiedProperties();
|
||
|
}
|
||
|
|
||
|
public override float GetPropertyHeight(SerializedProperty property, GUIContent label)
|
||
|
{
|
||
|
return EditorGUIUtility.singleLineHeight * 2;
|
||
|
}
|
||
|
}
|
||
|
}
|