/// <summary> /// Creates a delegate that returns the X value of a navigator's transition as an int, /// even if the field is an sbyte. /// /// TODO Vanilla/DLC code /// </summary> /// <returns>A delegate to properly retrieve NavGrid.Transition.x</returns> private static GetTransitionXDelegate GetTransitionX() { const string x = nameof(NavTransition.x); var xField = typeof(NavTransition).GetFieldSafe(x, false); GetTransitionXDelegate ret; if (xField.FieldType == typeof(int)) { var getter = PDetours.DetourStructField <int>(typeof(NavTransition), x); ret = (transition) => { return(getter.Get(transition)); }; } else if (xField.FieldType == typeof(sbyte)) { var getter = PDetours.DetourStructField <sbyte>(typeof(NavTransition), x); ret = (transition) => { return((int)getter.Get(transition)); }; } else { throw new InvalidOperationException("Field type of NavGrid.Transition: " + xField.FieldType); } return(ret); }
public override void OnLoad(Harmony harmony) { IsMono = PPatchTools.GetTypeSafe("Mono.Runtime") != null; base.OnLoad(harmony); PUtil.InitLibrary(); #if DEBUG SpamObjectsHandler.PrepareSpamHandler(new PLib.PatchManager.PPatchManager(harmony)); #endif var inst = ExtendedTagBits.Instance; // Force these tags into the efficient lower bits foreach (var tag in FORCE_LOWER_BITS) { inst.ManifestFlagIndex(tag); } FetchManager.disallowedTagMask = TagBitOps.Not(FetchManager.disallowedTagBits); PDetours.DetourField <FetchAreaChore.StatesInstance, TagBits>( "s_transientDeliveryMask").Set(null, TagBitOps.Not(new TagBits(new Tag[] { GameTags.Garbage, GameTags.Creatures.Deliverable }))); new PVersionCheck().Register(this, new SteamVersionChecker()); }
public static void OnLoad() { #if DEBUG PUtil.InitLibrary(); SpamObjectsHandler.PrepareSpamHandler(); #else var assembly = Assembly.GetExecutingAssembly(); PUtil.LogDebug("Mod {0} initialized, version {1}".F(assembly.GetName()?.Name, assembly.GetFileVersion() ?? "Unknown")); #endif var inst = ExtendedTagBits.Instance; // Force these tags into the efficient lower bits foreach (var tag in FORCE_LOWER_BITS) { inst.ManifestFlagIndex(tag); } FetchManager.disallowedTagMask = TagBitOps.Not(FetchManager.disallowedTagBits); PDetours.DetourField <FetchAreaChore.StatesInstance, TagBits>( "s_transientDeliveryMask").Set(null, TagBitOps.Not(new TagBits(new Tag[] { GameTags.Garbage, GameTags.Creatures.Deliverable }))); }