This repository has been archived on 2025-04-11. You can view files and clone it, but cannot push or open issues or pull requests.
angels-and-demons/Angels and Demons/Assets/Editor/SerializedPropertyExtensions.cs
2018-05-09 20:42:22 -05:00

181 lines
No EOL
7 KiB
C#

using UnityEngine;
using UnityEditor;
namespace GitMerge
{
public static class SerializedPropertyExtensions
{
public static object GetValue(this SerializedProperty p, bool forComparison = false)
{
switch(p.propertyType)
{
case SerializedPropertyType.AnimationCurve:
return p.animationCurveValue;
case SerializedPropertyType.ArraySize:
return p.intValue;
case SerializedPropertyType.Boolean:
return p.boolValue;
case SerializedPropertyType.Bounds:
return p.boundsValue;
case SerializedPropertyType.Character:
return p.stringValue; //TODO: might be bullshit
case SerializedPropertyType.Color:
return p.colorValue;
case SerializedPropertyType.Enum:
return p.enumValueIndex;
case SerializedPropertyType.Float:
return p.floatValue;
case SerializedPropertyType.Generic: //(arrays)
if(p.isArray)
{
var arr = new object[p.arraySize];
for(int i = 0; i < arr.Length; ++i)
{
arr[i] = p.GetArrayElementAtIndex(i).GetValue();
}
return arr;
}
else
{
return null;
}
case SerializedPropertyType.Gradient:
return 0; //TODO: erm
case SerializedPropertyType.Integer:
return p.intValue;
case SerializedPropertyType.LayerMask:
return p.intValue;
case SerializedPropertyType.ObjectReference:
if(forComparison)
{
return ObjectIDFinder.GetIdentifierFor(p.objectReferenceValue);
}
else
{
return p.objectReferenceValue;
}
case SerializedPropertyType.Quaternion:
return p.quaternionValue;
case SerializedPropertyType.Rect:
return p.rectValue;
case SerializedPropertyType.String:
return p.stringValue;
case SerializedPropertyType.Vector2:
return p.vector2Value;
case SerializedPropertyType.Vector3:
return p.vector3Value;
case SerializedPropertyType.Vector4:
return p.vector4Value;
default:
return 0;
}
}
public static void SetValue(this SerializedProperty p, object value)
{
switch(p.propertyType)
{
case SerializedPropertyType.AnimationCurve:
p.animationCurveValue = value as AnimationCurve;
break;
case SerializedPropertyType.ArraySize:
//TODO: erm
p.intValue = (int)value;
break;
case SerializedPropertyType.Boolean:
p.boolValue = (bool)value;
break;
case SerializedPropertyType.Bounds:
p.boundsValue = (Bounds)value;
break;
case SerializedPropertyType.Character:
p.stringValue = (string)value; //TODO: might be bullshit
break;
case SerializedPropertyType.Color:
p.colorValue = (Color)value;
break;
case SerializedPropertyType.Enum:
p.enumValueIndex = (int)value;
break;
case SerializedPropertyType.Float:
p.floatValue = (float)value;
break;
case SerializedPropertyType.Generic: //(arrays)
if(p.isArray)
{
//var size = p.arraySize;
//var resetPath = p.propertyPath;
var values = (object[])value;
/*
for(int i = 0; i < p.arraySize; ++i)
{
Debug.Log(i + ": " + p.GetArrayElementAtIndex(i).GetValue());
}
*/
p.ClearArray();
for(int i = 0; i < values.Length; ++i)
{
p.InsertArrayElementAtIndex(i);
//Debug.Log(i + ": " + pv.GetArrayElementAtIndex(i).GetValue());
p.GetArrayElementAtIndex(i).SetValue(values[i]);
}
//p.FindPropertyRelative(resetPath);
}
else
{
//p.stringValue = (string)value;
}
break;
case SerializedPropertyType.Gradient:
//TODO: erm
break;
case SerializedPropertyType.Integer:
p.intValue = (int)value;
break;
case SerializedPropertyType.LayerMask:
p.intValue = (int)value;
break;
case SerializedPropertyType.ObjectReference:
p.objectReferenceValue = value as Object; //TODO: what about non-UnityEngine objects?
break;
case SerializedPropertyType.Quaternion:
p.quaternionValue = (Quaternion)value;
break;
case SerializedPropertyType.Rect:
p.rectValue = (Rect)value;
break;
case SerializedPropertyType.String:
p.stringValue = (string)value;
break;
case SerializedPropertyType.Vector2:
p.vector2Value = (Vector2)value;
break;
case SerializedPropertyType.Vector3:
p.vector3Value = (Vector3)value;
break;
case SerializedPropertyType.Vector4:
p.vector4Value = (Vector4)value;
break;
default:
break;
}
}
public static string GetPlainName(this SerializedProperty p)
{
var s = p.name;
var i = s.IndexOf('_');
if(i >= 0)
{
s = s.Substring(i + 1);
}
return s;
}
public static bool IsRealArray(this SerializedProperty p)
{
return p.propertyType == SerializedPropertyType.Generic && p.isArray;
}
}
}