Browse Source

Added custom variable list control

master
chrisgregan 11 years ago
parent
commit
d4705b257e
  1. 4
      Assets/Fungus/Editor/FungusScript/FungusScriptEditor.cs
  2. 8
      Assets/Fungus/Editor/FungusScript/FungusVariableEditor.cs
  3. 148
      Assets/Fungus/Editor/FungusScript/VariableList.cs
  4. 8
      Assets/Fungus/Editor/FungusScript/VariableList.cs.meta
  5. BIN
      Assets/Shuttle/ShuttleGame.unity

4
Assets/Fungus/Editor/FungusScript/FungusScriptEditor.cs

@ -63,7 +63,9 @@ namespace Fungus.Script
}
ReorderableListGUI.Title("Variables");
ReorderableListGUI.ListField(variablesProperty, ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton );
VariableListAdaptor adaptor = new VariableListAdaptor(variablesProperty, 0);
ReorderableListControl.DrawControlFromState(adaptor, null, ReorderableListFlags.DisableContextMenu | ReorderableListFlags.HideAddButton);
GUILayout.BeginHorizontal();
GUILayout.FlexibleSpace();

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

@ -8,7 +8,6 @@ using System.Linq;
namespace Fungus.Script
{
[CustomPropertyDrawer (typeof(Variable))]
public class VariableDrawer : PropertyDrawer
{
@ -77,6 +76,13 @@ namespace Fungus.Script
[CustomEditor (typeof(FungusVariable), true)]
public class FungusVariableEditor : FungusCommandEditor
{
void OnEnable()
{
// Uncomment to hide variable components in inspector
//FungusVariable t = target as FungusVariable;
//t.hideFlags = HideFlags.HideInInspector;
}
public override void OnInspectorGUI()
{
FungusVariable t = target as FungusVariable;

148
Assets/Fungus/Editor/FungusScript/VariableList.cs

@ -0,0 +1,148 @@
// Copyright (c) 2012-2013 Rotorz Limited. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
using UnityEngine;
using UnityEditor;
using System;
using Rotorz.ReorderableList;
namespace Fungus.Script
{
public class VariableListAdaptor : IReorderableListAdaptor
{
private SerializedProperty _arrayProperty;
public float fixedItemHeight;
public SerializedProperty this[int index]
{
get { return _arrayProperty.GetArrayElementAtIndex(index); }
}
public SerializedProperty arrayProperty
{
get { return _arrayProperty; }
}
public VariableListAdaptor(SerializedProperty arrayProperty, float fixedItemHeight)
{
if (arrayProperty == null)
throw new ArgumentNullException("Array property was null.");
if (!arrayProperty.isArray)
throw new InvalidOperationException("Specified serialized propery is not an array.");
this._arrayProperty = arrayProperty;
this.fixedItemHeight = fixedItemHeight;
}
public VariableListAdaptor(SerializedProperty arrayProperty) : this(arrayProperty, 0f)
{
}
public int Count
{
get { return _arrayProperty.arraySize; }
}
public virtual bool CanDrag(int index)
{
return true;
}
public virtual bool CanRemove(int index)
{
return true;
}
public void Add()
{
int newIndex = _arrayProperty.arraySize;
++_arrayProperty.arraySize;
ResetValue(_arrayProperty.GetArrayElementAtIndex(newIndex));
}
public void Insert(int index)
{
_arrayProperty.InsertArrayElementAtIndex(index);
ResetValue(_arrayProperty.GetArrayElementAtIndex(index));
}
public void Duplicate(int index)
{
_arrayProperty.InsertArrayElementAtIndex(index);
}
public void Remove(int index) {
_arrayProperty.DeleteArrayElementAtIndex(index);
}
public void Move(int sourceIndex, int destIndex)
{
if (destIndex > sourceIndex)
--destIndex;
_arrayProperty.MoveArrayElement(sourceIndex, destIndex);
}
public void Clear() {
_arrayProperty.ClearArray();
}
public virtual void DrawItem(Rect position, int index)
{
EditorGUI.PropertyField(position, this[index], GUIContent.none, false);
}
public virtual float GetItemHeight(int index)
{
return fixedItemHeight != 0f
? fixedItemHeight
: EditorGUI.GetPropertyHeight(this[index], GUIContent.none, false)
;
}
private void ResetValue(SerializedProperty element)
{
switch (element.type) {
case "string":
element.stringValue = "";
break;
case "Vector2f":
element.vector2Value = Vector2.zero;
break;
case "Vector3f":
element.vector3Value = Vector3.zero;
break;
case "Rectf":
element.rectValue = new Rect();
break;
case "Quaternionf":
element.quaternionValue = Quaternion.identity;
break;
case "int":
element.intValue = 0;
break;
case "float":
element.floatValue = 0f;
break;
case "UInt8":
element.boolValue = false;
break;
case "ColorRGBA":
element.colorValue = Color.black;
break;
default:
if (element.type.StartsWith("PPtr"))
element.objectReferenceValue = null;
break;
}
}
}
}

8
Assets/Fungus/Editor/FungusScript/VariableList.cs.meta

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: d73a4523e32ec485db5ced2e5d7fa9b6
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

BIN
Assets/Shuttle/ShuttleGame.unity

Binary file not shown.
Loading…
Cancel
Save