Skip to content

Instantly share code, notes, and snippets.

@boformer
Created July 3, 2015 16:04
Show Gist options
  • Save boformer/223e5b8d17aef3f00b94 to your computer and use it in GitHub Desktop.
Save boformer/223e5b8d17aef3f00b94 to your computer and use it in GitHub Desktop.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace BetterUpgrade.Detour
{
public class BuildingInfoDetour : BuildingInfo
{
private static bool deployed = false;
private static RedirectCallsState _InitializePrefab_state;
private static MethodInfo _InitializePrefab_original;
private static MethodInfo _InitializePrefab_detour;
public static void Deploy()
{
if (!deployed)
{
_InitializePrefab_original = typeof(BuildingInfo).GetMethod("InitializePrefab", BindingFlags.Instance | BindingFlags.Public);
_InitializePrefab_detour = typeof(BuildingInfoDetour).GetMethod("InitializePrefab", BindingFlags.Instance | BindingFlags.Public);
_InitializePrefab_state = RedirectionHelper.RedirectCalls(_InitializePrefab_original, _InitializePrefab_detour);
deployed = true;
BetterUpgradeMod.debugLog.Add("Better Upgrade: BuildingInfo Methods detoured!");
}
}
public static void Revert()
{
if (deployed)
{
RedirectionHelper.RevertRedirect(_InitializePrefab_original, _InitializePrefab_state);
_InitializePrefab_original = null;
_InitializePrefab_detour = null;
deployed = false;
BetterUpgradeMod.debugLog.Add("Better Upgrade: BuildingInfo Methods restored!");
}
}
public virtual void InitializePrefab()
{
BetterUpgradeMod.debugLog.Add("InitializePrefab called");
BetterUpgradeMod.debugLog.Add(this.name);
RedirectionHelper.RevertRedirect(_InitializePrefab_original, _InitializePrefab_state);
base.InitializePrefab();
RedirectionHelper.RedirectCalls(_InitializePrefab_original, _InitializePrefab_detour);
BetterUpgradeMod.debugLog.Add("InitializePrefab called done");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment