using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using MaterialHud;
using Microsoft.CodeAnalysis;
using Mono.Cecil;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using RoR2;
using RoR2.Scripts.GameBehaviors.UI;
using RoR2.UI;
using TMPro;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("RiskUIRevived")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("RiskUIRevived")]
[assembly: AssemblyTitle("RiskUIRevived")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace RiskUIRevived
{
public static class Assets
{
}
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(string data)
{
}
internal static void Info(string data)
{
}
internal static void Message(string data)
{
_logSource.LogMessage((object)data);
}
internal static void Warning(string data)
{
_logSource.LogWarning((object)data);
}
internal static void Error(string data)
{
_logSource.LogError((object)data);
}
internal static void Fatal(string data)
{
_logSource.LogFatal((object)data);
}
}
[HarmonyPatch]
public static class NewHarmonyPatches
{
[HarmonyILManipulator]
[HarmonyPatch(typeof(CameraRigController), "UpdateHUD")]
public static void ReplaceHUD(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
int num = default(int);
MethodReference val2 = default(MethodReference);
val.GotoNext((MoveType)1, new Func<Instruction, bool>[3]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref num),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, ref val2),
(Instruction x) => ILPatternMatchingExt.MatchStsfld(x, typeof(CameraRigController), "HudPrefab")
});
val.EmitDelegate<Func<GameObject>>((Func<GameObject>)RiskUIPlugin.CreateHud);
val.RemoveRange(2);
val.GotoNext((MoveType)1, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(CameraRigController), "HudPrefab")
});
val.EmitDelegate<Func<GameObject>>((Func<GameObject>)RiskUIPlugin.CreateHud);
val.Remove();
}
[HarmonyILManipulator]
[HarmonyPatch(typeof(HealthBar), "UpdateBarInfos")]
public static void FixInfusionColor(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "voidPanelColor")
});
val.Remove();
val.EmitDelegate<Func<Color>>((Func<Color>)delegate
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
Color value3 = RiskUIPlugin.VoidColor.Value;
return (value3 == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value3;
});
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "infusionPanelColor")
});
val.Remove();
val.EmitDelegate<Func<Color>>((Func<Color>)delegate
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
Color value2 = RiskUIPlugin.InfusionColor.Value;
return (value2 == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value2;
});
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(HealthBar), "voidShieldsColor")
});
val.Remove();
val.EmitDelegate<Func<Color>>((Func<Color>)delegate
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
Color value = RiskUIPlugin.VoidShieldColor.Value;
return (value == Color.clear) ? Color.HSVToRGB(Mathf.Sin(Time.time) * 0.5f + 0.5f, 1f, 1f) : value;
});
}
[HarmonyPrefix]
[HarmonyPatch(typeof(Run), "InstantiateUi")]
public static bool OverwriteTracker(Run __instance, Transform uiRoot, ref GameObject __result)
{
if (!Object.op_Implicit((Object)(object)uiRoot))
{
return true;
}
string nameToken = __instance.nameToken;
if (nameToken == "ECLIPSE_GAMEMODE_NAME" || nameToken == "GAMEMODE_CLASSIC_RUN_NAME")
{
__result = Object.Instantiate<GameObject>(RiskUIPlugin.CreateClassicRunHud(), uiRoot);
__instance.uiInstances.Add(__result);
return false;
}
return true;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(DifficultyDef), "GetIconSprite")]
public static bool SwapIcon(DifficultyDef __instance, ref Sprite __result)
{
if (__instance.nameToken == null || !RiskUIPlugin.DifficultyIconMap.ContainsKey(__instance.nameToken))
{
return true;
}
__result = RiskUIPlugin.DifficultyIconMap[__instance.nameToken];
return false;
}
[HarmonyILManipulator]
[HarmonyPatch(typeof(AllyCardManager), "Awake")]
public static void ReplaceAllyCards(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "Prefabs/UI/AllyCard")
});
val.RemoveRange(2);
val.EmitDelegate<Func<GameObject>>((Func<GameObject>)RiskUIPlugin.CreateAllyCard);
}
public static void MoveVoidSurvivorController(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
(Instruction x) => ILPatternMatchingExt.MatchLdfld<VoidSurvivorController>(x, "overlayChildLocatorEntry")
});
val.RemoveRange(2);
val.Emit(OpCodes.Ldstr, "BottomLeftCluster");
}
[HarmonyPostfix]
[HarmonyPatch(typeof(EnemyInfoPanel), "Init")]
public static void ChangeMonsterInventory()
{
EnemyInfoPanel.panelPrefab = RiskUIPlugin.EnemyInfoPanel;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ScoreboardStrip), "ResetNavIndicators")]
public static bool ResetNav()
{
return false;
}
[HarmonyILManipulator]
[HarmonyPatch(typeof(ItemIcon), "SetItemIndex")]
public static void ItemCount(ILContext il)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
ILCursor[] array = null;
if (new ILCursor(il).TryFindNext(ref array, new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(ItemIcon), "spriteAsNumberManager"),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<SpriteAsNumberManager>(x, "SetItemCount"),
(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(ItemIcon), "spriteAsNumberManager"),
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<SpriteAsNumberManager>(x, "SetVisible")
}))
{
array[0].Remove();
array[0].Emit<ItemIcon>(OpCodes.Ldfld, "stackText");
array[1].Remove();
array[1].EmitDelegate<Action<TextMeshProUGUI, int>>((Action<TextMeshProUGUI, int>)delegate(TextMeshProUGUI image, int num)
{
((TMP_Text)image).text = "x" + num;
((Behaviour)image).enabled = true;
});
array[2].Remove();
array[2].Emit<ItemIcon>(OpCodes.Ldfld, "stackText");
array[3].Remove();
array[3].EmitDelegate<Action<TextMeshProUGUI, bool>>((Action<TextMeshProUGUI, bool>)delegate(TextMeshProUGUI image, bool num)
{
((TMP_Text)image).text = "";
((Behaviour)image).enabled = false;
});
}
}
[HarmonyPrefix]
[HarmonyPatch(typeof(ScoreboardStrip), "UpdateItemCountText")]
public static bool NoCount()
{
return false;
}
[HarmonyPrefix]
[HarmonyPatch(typeof(InspectPanelLocator), "Awake")]
public static bool NoPanel()
{
return false;
}
[HarmonyILManipulator]
[HarmonyPatch(typeof(ContextManager), "Update")]
public static void NoInspect(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
val.Index = val.Instrs.Count - 1;
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(GameObject), "SetActive")
}))
{
val.Remove();
val.EmitDelegate<Action<GameObject, bool>>((Action<GameObject, bool>)Slurp2);
}
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertySetter(typeof(TMP_Text), "text"))
}))
{
val.Remove();
val.EmitDelegate<Action<TMP_Text, string>>((Action<TMP_Text, string>)Slurp);
}
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertySetter(typeof(TMP_Text), "text"))
}))
{
val.Remove();
val.EmitDelegate<Action<TMP_Text, string>>((Action<TMP_Text, string>)Slurp);
}
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(GameObject), "SetActive")
}))
{
val.Remove();
val.EmitDelegate<Action<GameObject, bool>>((Action<GameObject, bool>)Slurp2);
}
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertySetter(typeof(TMP_Text), "text"))
}))
{
val.Remove();
val.EmitDelegate<Action<TMP_Text, string>>((Action<TMP_Text, string>)Slurp);
}
if (val.TryGotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, (MethodBase)AccessTools.PropertySetter(typeof(TMP_Text), "text"))
}))
{
val.Remove();
val.EmitDelegate<Action<TMP_Text, string>>((Action<TMP_Text, string>)Slurp);
}
static void Slurp(TMP_Text _, string __)
{
if (Object.op_Implicit((Object)(object)_))
{
_.text = "";
}
}
static void Slurp2(GameObject _, bool __)
{
if (Object.op_Implicit((Object)(object)_))
{
_.SetActive(false);
}
}
}
}
[BepInPlugin("_score.RiskUIRevived", "RiskUIRevived", "1.0.0")]
public class RiskUIRevivedPlugin : BaseUnityPlugin
{
public const string PluginGUID = "_score.RiskUIRevived";
public const string PluginAuthor = "score";
public const string PluginName = "RiskUIRevived";
public const string PluginVersion = "1.0.0";
public static RiskUIRevivedPlugin Instance { get; private set; }
public void Awake()
{
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
Instance = this;
Log.Init(((BaseUnityPlugin)this).Logger);
new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID).CreateClassProcessor(typeof(PatchPlugin)).Patch();
}
}
[HarmonyPatch]
public class PatchPlugin
{
[HarmonyPatch(typeof(RiskUIPlugin), "Awake")]
[HarmonyILManipulator]
public static void ReplaceTarget(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
IMetadataTokenProvider val4 = default(IMetadataTokenProvider);
MethodReference val3 = default(MethodReference);
MethodReference val2 = default(MethodReference);
val.GotoNext(new Func<Instruction, bool>[6]
{
(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0),
(Instruction x) => ILPatternMatchingExt.MatchLdfld<RiskUIPlugin>(x, "harm"),
(Instruction x) => ILPatternMatchingExt.MatchLdtoken(x, ref val4),
(Instruction x) => ILPatternMatchingExt.MatchCall(x, ref val3),
(Instruction x) => ILPatternMatchingExt.MatchNewobj(x, ref val2),
(Instruction x) => ILPatternMatchingExt.MatchStfld<RiskUIPlugin>(x, "patcher")
});
val.RemoveRange(6);
val.EmitDelegate<Action<RiskUIPlugin>>((Action<RiskUIPlugin>)delegate(RiskUIPlugin instance)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
instance.patcher = new PatchClassProcessor(instance.harm, typeof(NewHarmonyPatches));
});
}
[HarmonyPatch(typeof(RiskUIPlugin), "DisableSynergies")]
[HarmonyPrefix]
public static bool NoCompat()
{
return false;
}
[HarmonyPatch(typeof(RiskUIPlugin), "CheckForBetterUI")]
[HarmonyPrefix]
public static bool NoCompat2()
{
return false;
}
[HarmonyPatch(typeof(RiskUIPlugin), "Awake")]
[HarmonyPostfix]
public static void EditShit(RiskUIPlugin __instance)
{
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
AssetBundle assetBundle = __instance.assetBundle;
HUD component = RiskUIPlugin._newHud.GetComponent<HUD>();
GameObject go = assetBundle.LoadAsset<GameObject>("SkillIconRoot");
GameObject go2 = assetBundle.LoadAsset<GameObject>("HealthBarSub");
GameObject go3 = assetBundle.LoadAsset<GameObject>("MaterialChatbox");
GameObject go4 = assetBundle.LoadAsset<GameObject>("MaterialArtifactStatusIcon");
SkillIcon[] skillIcons = component.skillIcons;
GameObject buffIconPrefab = component.buffDisplay.buffIconPrefab;
GameObject gameObject = ((Component)component.itemInventoryDisplay).gameObject;
EquipmentIcon[] equipmentIcons = component.equipmentIcons;
GameObject val = assetBundle.LoadAsset<GameObject>("MaterialObjectiveStrip");
val.TryAddComponent<UIInputPassthrough>();
val.TryAddComponent<MPEventSystemLocator>();
val.transform.Find("Checkbox").SetParent(val.transform.Find("Label"));
val.gameObject.AddComponent<ObjectiveStripAnimationParams>().Params = new List<ObjectiveStripAnimationParam>(4)
{
new ObjectiveStripAnimationParam
{
Param = "enterAlphaStartPercent",
Value = 0.25f
},
new ObjectiveStripAnimationParam
{
Param = "enterAlphaEndPercent",
Value = 0.5f
},
new ObjectiveStripAnimationParam
{
Param = "enterHeightStartPercent",
Value = 0f
},
new ObjectiveStripAnimationParam
{
Param = "enterHeightEndPercent",
Value = 0.25f
}
};
buffIconPrefab.TryAddComponent<UIInputPassthrough>();
buffIconPrefab.TryAddComponent<MPEventSystemLocator>();
MPButton obj = buffIconPrefab.TryAddComponent<MPButton>();
obj.disableGamepadClick = true;
obj.disablePointerClick = true;
((Component)equipmentIcons[0]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)equipmentIcons[0]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj2 = ((Component)equipmentIcons[0]).gameObject.TryAddComponent<MPButton>();
obj2.disableGamepadClick = true;
obj2.disablePointerClick = true;
((Component)equipmentIcons[1]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)equipmentIcons[1]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj3 = ((Component)equipmentIcons[1]).gameObject.TryAddComponent<MPButton>();
obj3.disableGamepadClick = true;
obj3.disablePointerClick = true;
((Component)skillIcons[0]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)skillIcons[0]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj4 = ((Component)skillIcons[0]).gameObject.TryAddComponent<MPButton>();
obj4.disableGamepadClick = true;
obj4.disablePointerClick = true;
((Component)skillIcons[1]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)skillIcons[1]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj5 = ((Component)skillIcons[1]).gameObject.TryAddComponent<MPButton>();
obj5.disableGamepadClick = true;
obj5.disablePointerClick = true;
((Component)skillIcons[2]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)skillIcons[2]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj6 = ((Component)skillIcons[2]).gameObject.TryAddComponent<MPButton>();
obj6.disableGamepadClick = true;
obj6.disablePointerClick = true;
((Component)skillIcons[3]).gameObject.TryAddComponent<MPEventSystemLocator>();
((Component)skillIcons[3]).gameObject.TryAddComponent<UIInputPassthrough>();
MPButton obj7 = ((Component)skillIcons[3]).gameObject.TryAddComponent<MPButton>();
obj7.disableGamepadClick = true;
obj7.disablePointerClick = true;
gameObject.TryAddComponent<UIInputPassthrough>();
gameObject.TryAddComponent<MPEventSystemLocator>();
gameObject.TryAddComponent<MPButton>();
component.scoreboardPanel.TryAddComponent<UIInputPassthrough>();
component.scoreboardPanel.TryAddComponent<MPEventSystemLocator>();
ScoreboardController component2 = component.scoreboardPanel.GetComponent<ScoreboardController>();
component2.stripPrefab.AddComponent<UIInputPassthrough>();
ScoreboardStrip component3 = component2.stripPrefab.GetComponent<ScoreboardStrip>();
component3.eventSystemLocator = component2.stripPrefab.TryAddComponent<MPEventSystemLocator>();
((Component)component3).gameObject.TryAddComponent<MPButton>();
((Component)component3.equipmentIcon).gameObject.TryAddComponent<UIInputPassthrough>();
((Component)component3.equipmentIcon).gameObject.TryAddComponent<MPEventSystemLocator>();
go3.TryAddComponent<UIInputPassthrough>();
go3.TryAddComponent<MPEventSystemLocator>();
go4.TryAddComponent<UIInputPassthrough>();
go4.TryAddComponent<MPEventSystemLocator>();
go2.TryAddComponent<UIInputPassthrough>();
go2.TryAddComponent<MPEventSystemLocator>();
go.TryAddComponent<UIInputPassthrough>();
go.TryAddComponent<MPEventSystemLocator>();
RiskUIPlugin.EnemyInfoPanel.TryAddComponent<UIInputPassthrough>();
RiskUIPlugin.EnemyInfoPanel.TryAddComponent<MPEventSystemLocator>();
RiskUIPlugin._allyCard.TryAddComponent<UIInputPassthrough>();
RiskUIPlugin._allyCard.TryAddComponent<MPEventSystemLocator>();
RiskUIPlugin._newClassicRunHud.TryAddComponent<UIInputPassthrough>();
RiskUIPlugin._newClassicRunHud.TryAddComponent<MPEventSystemLocator>();
RiskUIPlugin._newSimulacrumHud.TryAddComponent<UIInputPassthrough>();
RiskUIPlugin._newSimulacrumHud.TryAddComponent<MPEventSystemLocator>();
RiskUIPlugin.BaseWaveUI.TryAddComponent<UIInputPassthrough>();
RiskUIPlugin.BaseWaveUI.TryAddComponent<MPEventSystemLocator>();
}
}
internal static class Utils
{
public static T TryAddComponent<T>(this GameObject go) where T : Component
{
T result = default(T);
if (go.TryGetComponent<T>(ref result))
{
return result;
}
return go.AddComponent<T>();
}
public static void RemoveComponent<T>(this GameObject go) where T : Component
{
T val = default(T);
if (go.TryGetComponent<T>(ref val))
{
Object.Destroy((Object)(object)val);
}
}
public static void RemoveComponents<T>(this GameObject go) where T : Component
{
T[] components = go.GetComponents<T>();
for (int i = 0; i < components.Length; i++)
{
Object.Destroy((Object)(object)components[i]);
}
}
public static T GetCopyOf<T>(this Component comp, T other) where T : Component
{
Type type = ((object)comp).GetType();
if (type != ((object)other).GetType())
{
return default(T);
}
BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
PropertyInfo[] properties = type.GetProperties(bindingAttr);
foreach (PropertyInfo propertyInfo in properties)
{
if (propertyInfo.CanWrite)
{
try
{
propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null);
}
catch
{
}
}
}
FieldInfo[] fields = type.GetFields(bindingAttr);
foreach (FieldInfo fieldInfo in fields)
{
fieldInfo.SetValue(comp, fieldInfo.GetValue(other));
}
return (T)(object)((comp is T) ? comp : null);
}
public static T GetCopyOf<T>(this ScriptableObject comp, T other) where T : ScriptableObject
{
Type type = ((object)comp).GetType();
if (type != ((object)other).GetType())
{
return default(T);
}
BindingFlags bindingAttr = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
PropertyInfo[] properties = type.GetProperties(bindingAttr);
foreach (PropertyInfo propertyInfo in properties)
{
if (propertyInfo.CanWrite)
{
try
{
propertyInfo.SetValue(comp, propertyInfo.GetValue(other, null), null);
}
catch
{
}
}
}
FieldInfo[] fields = type.GetFields(bindingAttr);
foreach (FieldInfo fieldInfo in fields)
{
fieldInfo.SetValue(comp, fieldInfo.GetValue(other));
}
return (T)(object)((comp is T) ? comp : null);
}
public static T AddComponentCopy<T>(this GameObject go, T toAdd) where T : Component
{
return ((Component)(object)go.AddComponent<T>()).GetCopyOf(toAdd);
}
}
}