AquaDX/AquaMai/ModKeyMap/QuickSkip.cs

75 lines
3.0 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using AquaMai.Helpers;
using HarmonyLib;
using Mai2.Mai2Cue;
using MAI2.Util;
using Main;
using Manager;
using MelonLoader;
using Process;
2024-11-01 17:03:57 +08:00
namespace AquaMai.ModKeyMap;
2024-10-24 01:15:55 +08:00
public class QuickSkip
{
2024-10-24 01:15:55 +08:00
[HarmonyPrefix]
[HarmonyPatch(typeof(GameMainObject), "Update")]
public static void OnGameMainObjectUpdate()
{
2024-11-01 17:03:57 +08:00
if (!ModKeyListener.GetKeyDownOrLongPress(AquaMai.AppConfig.ModKeyMap.QuickSkip, AquaMai.AppConfig.ModKeyMap.QuickSkipLongPress)) return;
2024-10-24 01:15:55 +08:00
MelonLogger.Msg("[QuickSkip] Activated");
2024-10-24 01:15:55 +08:00
var traverse = Traverse.Create(SharedInstances.ProcessDataContainer.processManager);
var processList = traverse.Field("_processList").GetValue<LinkedList<ProcessManager.ProcessControle>>();
2024-10-24 01:15:55 +08:00
ProcessBase processToRelease = null;
2024-10-24 01:15:55 +08:00
foreach (ProcessManager.ProcessControle process in processList)
{
switch (process.Process.ToString())
{
2024-10-24 01:15:55 +08:00
// After login
case "Process.ModeSelect.ModeSelectProcess":
case "Process.LoginBonus.LoginBonusProcess":
case "Process.RegionalSelectProcess":
case "Process.CharacterSelectProcess":
case "Process.TicketSelect.TicketSelectProcess":
processToRelease = process.Process;
break;
2024-10-24 01:15:55 +08:00
case "Process.MusicSelectProcess":
// Skip to save
SoundManager.PreviewEnd();
SoundManager.PlayBGM(Cue.BGM_COLLECTION, 2);
SharedInstances.ProcessDataContainer.processManager.AddProcess(new FadeProcess(SharedInstances.ProcessDataContainer, process.Process, new UnlockMusicProcess(SharedInstances.ProcessDataContainer)));
break;
}
2024-10-24 01:15:55 +08:00
}
2024-10-24 01:15:55 +08:00
if (processToRelease != null)
{
GameManager.SetMaxTrack();
SharedInstances.ProcessDataContainer.processManager.AddProcess(new FadeProcess(SharedInstances.ProcessDataContainer, processToRelease, new MusicSelectProcess(SharedInstances.ProcessDataContainer)));
}
2024-10-24 01:15:55 +08:00
}
2024-10-24 01:15:55 +08:00
[HarmonyPostfix]
[HarmonyPatch(typeof(GameProcess), "OnUpdate")]
public static void PostGameProcessUpdate(GameProcess __instance, Message[] ____message, ProcessDataContainer ___container)
{
2024-11-01 17:03:57 +08:00
if (ModKeyListener.GetKeyDownOrLongPress(AquaMai.AppConfig.ModKeyMap.InGameSkip, AquaMai.AppConfig.ModKeyMap.InGameSkipLongPress))
2024-05-26 11:55:36 +08:00
{
2024-10-24 01:15:55 +08:00
var traverse = Traverse.Create(__instance);
___container.processManager.SendMessage(____message[0]);
Singleton<GamePlayManager>.Instance.SetSyncResult(0);
traverse.Method("SetRelease").GetValue();
}
2024-05-26 11:55:36 +08:00
2024-11-01 17:03:57 +08:00
if (ModKeyListener.GetKeyDownOrLongPress(AquaMai.AppConfig.ModKeyMap.InGameRetry, AquaMai.AppConfig.ModKeyMap.InGameRetryLongPress) && GameInfo.GameVersion >= 23000)
2024-10-24 01:15:55 +08:00
{
// This is original typo in Assembly-CSharp
Singleton<GamePlayManager>.Instance.SetQuickRetryFrag(flag: true);
2024-05-26 11:55:36 +08:00
}
2024-10-24 01:15:55 +08:00
}
2024-07-30 00:39:58 +08:00
}