using HarmonyLib;
using System;
using SandBox.View.Map;
using TaleWorlds.CampaignSystem;
using TaleWorlds.Core;
using System.Collections.Generic;
using TaleWorlds.Localization;
using TaleWorlds.MountAndBlade.ViewModelCollection;
using System.Reflection;
namespace CCM.Patch
{
[HarmonyPatch(typeof(MapScreen), "GetEscapeMenuItems")]
public class EscapeMenuPatch
{
public static bool Prefix(MapScreen __instance, ref List<EscapeMenuItemVM> __result)
{
__result = new List<EscapeMenuItemVM>
{
new EscapeMenuItemVM(new TextObject("{=XzZFhRwr}Return To Game", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
}, null, false, true),
new EscapeMenuItemVM(new TextObject("{=PXT6aA4J}Campaign Options", null), delegate(object o)
{
typeof(MapScreen).GetField("_campaignOptionsView", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, __instance.AddMapView<MapCampaignOptions>(Array.Empty<object>()));
__instance.IsInCampaignOptions = true;
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=NqarFr4P}Options", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
__instance.OpenOptions();
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=bV75iwKa}Save", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
Campaign.Current.SaveHandler.QuickSaveCurrentGame();
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=e0KdfaNe}Save As", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
__instance.OpenSaveLoad(true);
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=9NuttOBC}Load", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
__instance.OpenSaveLoad(false);
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=AbEh2y8o}Save And Exit", null), delegate(object o)
{
Campaign.Current.SaveHandler.QuickSaveCurrentGame();
MethodInfo privMethod = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod.Invoke(__instance, new object[] { false });
InformationManager.HideInquiry();
__instance.OnExit();
}, null, false, false),
new EscapeMenuItemVM(new TextObject("{=RamV6yLM}Exit to Main Menu", null), delegate(object o)
{
MethodInfo privMethod = __instance.GetType().GetMethod("OnExitToMainMenu", BindingFlags.NonPublic | BindingFlags.Instance);
Action cring = (Action) privMethod.CreateDelegate(typeof(Action), __instance);
InformationManager.ShowInquiry(new InquiryData(GameTexts.FindText("str_exit", null).ToString(), GameTexts.FindText("str_mission_exit_query", null).ToString(), true, true, GameTexts.FindText("str_yes", null).ToString(), GameTexts.FindText("str_no", null).ToString(), new Action(cring), delegate()
{
MethodInfo privMethod2 = __instance.GetType().GetMethod("OnEscapeMenuToggled", BindingFlags.NonPublic | BindingFlags.Instance);
privMethod2.Invoke(__instance, new object[] { false });
}, ""), false);
}, null, false, false)
};
return false;
}
}
}