Files
Tarkov-UIFixes/Patches/EditBuildScreenPatch.cs
2024-05-20 02:14:36 -07:00

66 lines
2.1 KiB
C#

using Aki.Reflection.Patching;
using EFT.UI;
using HarmonyLib;
using System;
using System.Linq;
using System.Reflection;
using System.Threading.Tasks;
namespace UIFixes
{
// Two patches are required for the edit preset screen - one to grab the value of moveForward from CloseScreenInterruption(), and one to use it.
// This is because BSG didn't think to pass the argument in to method_35
public class EditBuildScreenPatch
{
public static bool MoveForward;
public static void Enable()
{
new CloseScreenInterruptionPatch().Enable();
new ConfirmDiscardPatch().Enable();
}
// This patch just caches whether this navigation is a forward navigation, which determines if the preset is actually closing
public class CloseScreenInterruptionPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
Type type = typeof(EditBuildScreen).GetNestedTypes().Single(x => x.GetMethod("CloseScreenInterruption") != null); // EditBuildScreen.GClass3126
return AccessTools.Method(type, "CloseScreenInterruption");
}
[PatchPrefix]
public static void Prefix(bool moveForward)
{
MoveForward = moveForward;
}
}
public class ConfirmDiscardPatch : ModulePatch
{
protected override MethodBase GetTargetMethod()
{
return AccessTools.Method(typeof(EditBuildScreen), nameof(EditBuildScreen.method_35));
}
[PatchPrefix]
public static bool Prefix(ref Task<bool> __result)
{
if (MoveForward && Settings.ShowPresetConfirmations.Value == WeaponPresetConfirmationOption.Always)
{
return true;
}
if (!MoveForward && Settings.ShowPresetConfirmations.Value != WeaponPresetConfirmationOption.Never)
{
return true;
}
__result = Task.FromResult(true);
return false;
}
}
}
}