Browse Source

Added property drawers for BooleanData, IntegerData, etc.

master
chrisgregan 10 years ago
parent
commit
80949c4d19
  1. 292
      Assets/Fungus/Editor/FungusScript/FungusVariableEditor.cs
  2. 8
      Assets/Fungus/VisualScripting/BooleanVariable.cs
  3. 7
      Assets/Fungus/VisualScripting/FloatVariable.cs
  4. 7
      Assets/Fungus/VisualScripting/IntegerVariable.cs
  5. 7
      Assets/Fungus/VisualScripting/StringVariable.cs
  6. BIN
      Assets/Shuttle/ShuttleGame.unity

292
Assets/Fungus/Editor/FungusScript/FungusVariableEditor.cs

@ -75,4 +75,296 @@ namespace Fungus.Script
} }
} }
[CustomPropertyDrawer (typeof(BooleanData))]
public class BooleanDataDrawer : PropertyDrawer
{
public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SerializedProperty referenceProp = property.FindPropertyRelative("booleanReference");
SerializedProperty valueProp = property.FindPropertyRelative("booleanValue");
const int popupWidth = 65;
Rect controlRect = EditorGUI.PrefixLabel(position, label);
Rect valueRect = controlRect;
valueRect.width = controlRect.width - popupWidth - 5;
Rect popupRect = controlRect;
if (referenceProp.objectReferenceValue == null)
{
valueProp.boolValue = EditorGUI.Toggle(valueRect, valueProp.boolValue);
popupRect.x += valueRect.width + 5;
popupRect.width = popupWidth;
}
FungusScript fungusScript = property.serializedObject.targetObject as FungusScript;
if (fungusScript == null)
{
FungusCommand command = property.serializedObject.targetObject as FungusCommand;
if (command != null)
{
fungusScript = command.GetFungusScript();
}
}
if (fungusScript != null)
{
BooleanVariable selectedBooleanVariable = referenceProp.objectReferenceValue as BooleanVariable;
List<string> variableKeys = new List<string>();
List<FungusVariable> variableObjects = new List<FungusVariable>();
variableKeys.Add("<Value>");
variableObjects.Add(null);
FungusVariable[] variables = fungusScript.GetComponents<FungusVariable>();
int index = 0;
int selectedIndex = 0;
foreach (FungusVariable v in variables)
{
if (v.GetType() != typeof(BooleanVariable))
{
continue;
}
variableKeys.Add(v.key);
variableObjects.Add(v);
index++;
if (v == selectedBooleanVariable)
{
selectedIndex = index;
}
}
selectedIndex = EditorGUI.Popup(popupRect, selectedIndex, variableKeys.ToArray());
referenceProp.objectReferenceValue = variableObjects[selectedIndex];
}
EditorGUI.EndProperty();
}
}
[CustomPropertyDrawer (typeof(IntegerData))]
public class IntegerDataDrawer : PropertyDrawer
{
public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SerializedProperty referenceProp = property.FindPropertyRelative("integerReference");
SerializedProperty valueProp = property.FindPropertyRelative("integerValue");
const int popupWidth = 65;
Rect controlRect = EditorGUI.PrefixLabel(position, label);
Rect valueRect = controlRect;
valueRect.width = controlRect.width - popupWidth - 5;
Rect popupRect = controlRect;
if (referenceProp.objectReferenceValue == null)
{
valueProp.intValue = EditorGUI.IntField(valueRect, valueProp.intValue);
popupRect.x += valueRect.width + 5;
popupRect.width = popupWidth;
}
FungusScript fungusScript = property.serializedObject.targetObject as FungusScript;
if (fungusScript == null)
{
FungusCommand command = property.serializedObject.targetObject as FungusCommand;
if (command != null)
{
fungusScript = command.GetFungusScript();
}
}
if (fungusScript != null)
{
IntegerVariable selectedVariable = referenceProp.objectReferenceValue as IntegerVariable;
List<string> variableKeys = new List<string>();
List<FungusVariable> variableObjects = new List<FungusVariable>();
variableKeys.Add("<Value>");
variableObjects.Add(null);
FungusVariable[] variables = fungusScript.GetComponents<FungusVariable>();
int index = 0;
int selectedIndex = 0;
foreach (FungusVariable v in variables)
{
if (v.GetType() != typeof(IntegerVariable))
{
continue;
}
variableKeys.Add(v.key);
variableObjects.Add(v);
index++;
if (v == selectedVariable)
{
selectedIndex = index;
}
}
selectedIndex = EditorGUI.Popup(popupRect, selectedIndex, variableKeys.ToArray());
referenceProp.objectReferenceValue = variableObjects[selectedIndex];
}
EditorGUI.EndProperty();
}
}
[CustomPropertyDrawer (typeof(FloatData))]
public class FloatDataDrawer : PropertyDrawer
{
public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SerializedProperty referenceProp = property.FindPropertyRelative("floatReference");
SerializedProperty valueProp = property.FindPropertyRelative("floatValue");
const int popupWidth = 65;
Rect controlRect = EditorGUI.PrefixLabel(position, label);
Rect valueRect = controlRect;
valueRect.width = controlRect.width - popupWidth - 5;
Rect popupRect = controlRect;
if (referenceProp.objectReferenceValue == null)
{
valueProp.floatValue = EditorGUI.FloatField(valueRect, valueProp.floatValue);
popupRect.x += valueRect.width + 5;
popupRect.width = popupWidth;
}
FungusScript fungusScript = property.serializedObject.targetObject as FungusScript;
if (fungusScript == null)
{
FungusCommand command = property.serializedObject.targetObject as FungusCommand;
if (command != null)
{
fungusScript = command.GetFungusScript();
}
}
if (fungusScript != null)
{
FloatVariable selectedVariable = referenceProp.objectReferenceValue as FloatVariable;
List<string> variableKeys = new List<string>();
List<FungusVariable> variableObjects = new List<FungusVariable>();
variableKeys.Add("<Value>");
variableObjects.Add(null);
FungusVariable[] variables = fungusScript.GetComponents<FungusVariable>();
int index = 0;
int selectedIndex = 0;
foreach (FungusVariable v in variables)
{
if (v.GetType() != typeof(FloatVariable))
{
continue;
}
variableKeys.Add(v.key);
variableObjects.Add(v);
index++;
if (v == selectedVariable)
{
selectedIndex = index;
}
}
selectedIndex = EditorGUI.Popup(popupRect, selectedIndex, variableKeys.ToArray());
referenceProp.objectReferenceValue = variableObjects[selectedIndex];
}
EditorGUI.EndProperty();
}
}
[CustomPropertyDrawer (typeof(StringData))]
public class StringDataDrawer : PropertyDrawer
{
public override void OnGUI (Rect position, SerializedProperty property, GUIContent label)
{
EditorGUI.BeginProperty(position, label, property);
SerializedProperty referenceProp = property.FindPropertyRelative("stringReference");
SerializedProperty valueProp = property.FindPropertyRelative("stringValue");
const int popupWidth = 65;
Rect controlRect = EditorGUI.PrefixLabel(position, label);
Rect valueRect = controlRect;
valueRect.width = controlRect.width - popupWidth - 5;
Rect popupRect = controlRect;
if (referenceProp.objectReferenceValue == null)
{
valueProp.stringValue = EditorGUI.TextField(valueRect, valueProp.stringValue);
popupRect.x += valueRect.width + 5;
popupRect.width = popupWidth;
}
FungusScript fungusScript = property.serializedObject.targetObject as FungusScript;
if (fungusScript == null)
{
FungusCommand command = property.serializedObject.targetObject as FungusCommand;
if (command != null)
{
fungusScript = command.GetFungusScript();
}
}
if (fungusScript != null)
{
StringVariable selectedVariable = referenceProp.objectReferenceValue as StringVariable;
List<string> variableKeys = new List<string>();
List<FungusVariable> variableObjects = new List<FungusVariable>();
variableKeys.Add("<Value>");
variableObjects.Add(null);
FungusVariable[] variables = fungusScript.GetComponents<FungusVariable>();
int index = 0;
int selectedIndex = 0;
foreach (FungusVariable v in variables)
{
if (v.GetType() != typeof(StringVariable))
{
continue;
}
variableKeys.Add(v.key);
variableObjects.Add(v);
index++;
if (v == selectedVariable)
{
selectedIndex = index;
}
}
selectedIndex = EditorGUI.Popup(popupRect, selectedIndex, variableKeys.ToArray());
referenceProp.objectReferenceValue = variableObjects[selectedIndex];
}
EditorGUI.EndProperty();
}
}
} }

8
Assets/Fungus/VisualScripting/BooleanVariable.cs

@ -1,4 +1,5 @@
using UnityEngine; using UnityEngine;
using System;
using System.Collections; using System.Collections;
namespace Fungus.Script namespace Fungus.Script
@ -15,4 +16,11 @@ namespace Fungus.Script
} }
} }
[System.Serializable]
public class BooleanData
{
public BooleanVariable booleanReference;
public bool booleanValue;
}
} }

7
Assets/Fungus/VisualScripting/FloatVariable.cs

@ -15,4 +15,11 @@ namespace Fungus.Script
} }
} }
[System.Serializable]
public class FloatData
{
public FloatVariable floatReference;
public float floatValue;
}
} }

7
Assets/Fungus/VisualScripting/IntegerVariable.cs

@ -15,4 +15,11 @@ namespace Fungus.Script
} }
} }
[System.Serializable]
public class IntegerData
{
public IntegerVariable integerReference;
public int integerValue;
}
} }

7
Assets/Fungus/VisualScripting/StringVariable.cs

@ -15,4 +15,11 @@ namespace Fungus.Script
} }
} }
[System.Serializable]
public class StringData
{
public StringVariable stringReference;
public string stringValue;
}
} }

BIN
Assets/Shuttle/ShuttleGame.unity

Binary file not shown.
Loading…
Cancel
Save