public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { var l = EditorGUI.BeginProperty(position, label, property); var startPos = position; position = EditorGUI.PrefixLabel(position, l); position.height = EditorGUIUtility.singleLineHeight; var variable = property.FindPropertyRelative("variable"); Fungus.Variable v = variable.objectReferenceValue as Fungus.Variable; if (variable.objectReferenceValue != null && lastFlowchart == null) { if (v != null) { lastFlowchart = v.GetComponent <Flowchart>(); } } lastFlowchart = EditorGUI.ObjectField(position, lastFlowchart, typeof(Fungus.Flowchart), true) as Fungus.Flowchart; position.y += EditorGUIUtility.singleLineHeight; if (lastFlowchart != null) { var ourPos = startPos; ourPos.y = position.y; var prefixLabel = new GUIContent(v != null ? v.GetType().Name : "No Var Selected"); EditorGUI.indentLevel++; VariableEditor.VariableField(variable, prefixLabel, lastFlowchart, "<None>", null, //lable, index, elements (s, t, u) => (EditorGUI.Popup(ourPos, s, t, u))); EditorGUI.indentLevel--; } else { EditorGUI.PrefixLabel(position, new GUIContent("Flowchart Required")); } variable.serializedObject.ApplyModifiedProperties(); property.serializedObject.ApplyModifiedProperties(); EditorGUI.EndProperty(); }
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { VariablePropertyAttribute variableProperty = attribute as VariablePropertyAttribute; if (variableProperty == null) { return; } EditorGUI.BeginProperty(position, label, property); // Filter the variables by the types listed in the VariableProperty attribute Func <Variable, bool> compare = v => { if (v == null) { return(false); } if (variableProperty.VariableTypes.Length == 0) { var compatChecker = property.serializedObject.targetObject as ICollectionCompatible; if (compatChecker != null) { return(compatChecker.IsVarCompatibleWithCollection(v, variableProperty.compatibleVariableName)); } else { return(true); } } return(variableProperty.VariableTypes.Contains <System.Type>(v.GetType())); }; VariableEditor.VariableField(property, label, FlowchartWindow.GetFlowchart(), variableProperty.defaultText, compare, (s, t, u) => (EditorGUI.Popup(position, s, t, u))); EditorGUI.EndProperty(); }