5 changed files with 166 additions and 2 deletions
@ -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; |
||||
} |
||||
} |
||||
} |
||||
|
||||
} |
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2 |
||||
guid: d73a4523e32ec485db5ced2e5d7fa9b6 |
||||
MonoImporter: |
||||
serializedVersion: 2 |
||||
defaultReferences: [] |
||||
executionOrder: 0 |
||||
icon: {instanceID: 0} |
||||
userData: |
Binary file not shown.
Loading…
Reference in new issue