mirror of
https://github.com/sinai-dev/UnityExplorer.git
synced 2025-06-17 06:28:42 +08:00
103 lines
3.0 KiB
C#
103 lines
3.0 KiB
C#
![]() |
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Reflection;
|
|||
|
using UnityEngine;
|
|||
|
using Explorer.UI;
|
|||
|
using Explorer.UI.Shared;
|
|||
|
|
|||
|
namespace Explorer.CacheObject
|
|||
|
{
|
|||
|
public class CacheObjectBase
|
|||
|
{
|
|||
|
public InteractiveValue IValue;
|
|||
|
|
|||
|
public virtual bool CanWrite => false;
|
|||
|
public virtual bool HasParameters => false;
|
|||
|
public virtual bool IsMember => false;
|
|||
|
|
|||
|
public bool IsStaticClassSearchResult { get; set; }
|
|||
|
|
|||
|
public virtual void Init(object obj, Type valueType)
|
|||
|
{
|
|||
|
if (valueType == null && obj == null)
|
|||
|
{
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
InteractiveValue interactive;
|
|||
|
|
|||
|
if (valueType == typeof(GameObject) || valueType == typeof(Transform))
|
|||
|
{
|
|||
|
interactive = new InteractiveGameObject();
|
|||
|
}
|
|||
|
else if (valueType.IsPrimitive || valueType == typeof(string))
|
|||
|
{
|
|||
|
interactive = new InteractivePrimitive();
|
|||
|
}
|
|||
|
else if (valueType.IsEnum)
|
|||
|
{
|
|||
|
if (valueType.GetCustomAttributes(typeof(FlagsAttribute), true) is object[] attributes && attributes.Length > 0)
|
|||
|
{
|
|||
|
interactive = new InteractiveFlags();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
interactive = new InteractiveEnum();
|
|||
|
}
|
|||
|
}
|
|||
|
else if (valueType == typeof(Vector2) || valueType == typeof(Vector3) || valueType == typeof(Vector4))
|
|||
|
{
|
|||
|
interactive = new InteractiveVector();
|
|||
|
}
|
|||
|
else if (valueType == typeof(Quaternion))
|
|||
|
{
|
|||
|
interactive = new InteractiveQuaternion();
|
|||
|
}
|
|||
|
else if (valueType == typeof(Color))
|
|||
|
{
|
|||
|
interactive = new InteractiveColor();
|
|||
|
}
|
|||
|
else if (valueType == typeof(Rect))
|
|||
|
{
|
|||
|
interactive = new InteractiveRect();
|
|||
|
}
|
|||
|
// must check this before IsEnumerable
|
|||
|
else if (ReflectionHelpers.IsDictionary(valueType))
|
|||
|
{
|
|||
|
interactive = new InteractiveDictionary();
|
|||
|
}
|
|||
|
else if (ReflectionHelpers.IsEnumerable(valueType))
|
|||
|
{
|
|||
|
interactive = new InteractiveEnumerable();
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
interactive = new InteractiveValue();
|
|||
|
}
|
|||
|
|
|||
|
interactive.Value = obj;
|
|||
|
interactive.ValueType = valueType;
|
|||
|
|
|||
|
this.IValue = interactive;
|
|||
|
this.IValue.OwnerCacheObject = this;
|
|||
|
|
|||
|
UpdateValue();
|
|||
|
|
|||
|
this.IValue.Init();
|
|||
|
}
|
|||
|
|
|||
|
public virtual void Draw(Rect window, float width)
|
|||
|
{
|
|||
|
IValue.Draw(window, width);
|
|||
|
}
|
|||
|
|
|||
|
public virtual void UpdateValue()
|
|||
|
{
|
|||
|
IValue.UpdateValue();
|
|||
|
}
|
|||
|
|
|||
|
public virtual void SetValue() => throw new NotImplementedException();
|
|||
|
}
|
|||
|
}
|