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.
149 lines
3.2 KiB
149 lines
3.2 KiB
10 years ago
|
// 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;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|