66 lines
2.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|