using System.Globalization; using System.Reflection; using HarmonyLib; using UnityEngine; namespace CLre.Fixes { [Bugfix(name = "ExclusionImprovement", description = "Sync exclusion zone collision check with visual location", more = "https://trello.com/c/Ue4yIqWQ/11-placing-material-in-restricted-areas", component = BugfixType.HarmonyPatch, id = 2)] [HarmonyPatch] class ExclusionZoneCollisionEngine_TestExclusionZoneCollision_Patch { [HarmonyPrefix] public static void BeforeMethodCall(ref Vector3 structurePosition, ref bool __result) { if (ResourcePlacementPreviewEngine_GetLerpPosition_Patch.quantizedPosition != Vector3.zero) { structurePosition = ResourcePlacementPreviewEngine_GetLerpPosition_Patch.quantizedPosition; } } [HarmonyTargetMethod] public static MethodBase Target() { return AccessTools.Method("Game.Building.ExclusionZone.ExclusionZoneCollisionEngine:TestExclusionZoneCollision"); } } [Bugfix(name = "ExclusionImprovement", description = "Sync exclusion zone collision check with visual location", more = "https://trello.com/c/Ue4yIqWQ/11-placing-material-in-restricted-areas", component = BugfixType.HarmonyPatch, id = 2)] [HarmonyPatch] class ResourcePlacementPreviewEngine_GetLerpPosition_Patch { internal static Vector3 quantizedPosition = Vector3.zero; [HarmonyPrefix] public static void BeforeMethodCall(ref Vector3 voxelWorldPos, ref Vector3 __result) { quantizedPosition = voxelWorldPos; } [HarmonyTargetMethod] public static MethodBase Target() { return AccessTools.Method("Game.Handhelds.ResourcePlacementPreviewEngine:GetLerpPosition"); } } }