Files
BH3/Assets/Plugins/Assembly-CSharp-firstpass/CinemaDirector/Helpers/RevertInfo.cs
2025-08-13 09:26:42 +08:00

84 lines
1.8 KiB
C#

using System;
using System.Reflection;
using CinemaSuite.Common;
using UnityEngine;
namespace CinemaDirector.Helpers
{
public class RevertInfo
{
private MonoBehaviour MonoBehaviour;
private Type Type;
private object Instance;
private MemberInfo[] MemberInfo;
private object value;
public RevertMode RuntimeRevert
{
get
{
return (MonoBehaviour as IRevertable).RuntimeRevertMode;
}
}
public RevertMode EditorRevert
{
get
{
return (MonoBehaviour as IRevertable).EditorRevertMode;
}
}
public RevertInfo(MonoBehaviour monoBehaviour, Type type, string memberName, object value)
{
MonoBehaviour = monoBehaviour;
Type = type;
this.value = value;
MemberInfo = ReflectionHelper.GetMemberInfo(type, memberName);
}
public RevertInfo(MonoBehaviour monoBehaviour, object obj, string memberName, object value)
{
MonoBehaviour = monoBehaviour;
Instance = obj;
Type = obj.GetType();
this.value = value;
MemberInfo = ReflectionHelper.GetMemberInfo(Type, memberName);
}
public void Revert()
{
if (MemberInfo == null || MemberInfo.Length <= 0)
{
return;
}
if (MemberInfo[0] is FieldInfo)
{
FieldInfo fieldInfo = MemberInfo[0] as FieldInfo;
if (fieldInfo.IsStatic || (!fieldInfo.IsStatic && Instance != null))
{
fieldInfo.SetValue(Instance, value);
}
}
else if (MemberInfo[0] is PropertyInfo)
{
PropertyInfo propertyInfo = MemberInfo[0] as PropertyInfo;
propertyInfo.SetValue(Instance, value, null);
}
else if (MemberInfo[0] is MethodInfo)
{
MethodInfo methodInfo = MemberInfo[0] as MethodInfo;
if (methodInfo.IsStatic || (!methodInfo.IsStatic && Instance != null))
{
object[] parameters = new object[1] { value };
methodInfo.Invoke(Instance, parameters);
}
}
}
}
}