From feebcdeae336ec35497a9ed0bc685dcc31656aaf Mon Sep 17 00:00:00 2001 From: ManlyMarco <39247311+ManlyMarco@users.noreply.github.com> Date: Wed, 9 Nov 2022 20:29:17 +0100 Subject: [PATCH] TitleShortcuts - Add KoikatuSunshine version --- KeelPlugins.sln | 12 ++- .../TitleShortcuts.KoikatuSunshine.csproj | 16 +++ .../TitleShortcuts.cs | 97 +++++++++++++++++++ 3 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.KoikatuSunshine.csproj create mode 100644 src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.cs diff --git a/KeelPlugins.sln b/KeelPlugins.sln index 52b45c4..4acfbf8 100644 --- a/KeelPlugins.sln +++ b/KeelPlugins.sln @@ -221,6 +221,8 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "FreeHDefaults.Core", "src\F EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TitleShortcuts.HoneySelect2", "src\TitleShortcuts.HoneySelect2\TitleShortcuts.HoneySelect2.csproj", "{CA3C684F-A778-4C76-8CA2-DFB93A8CAC13}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TitleShortcuts.KoikatuSunshine", "src\TitleShortcuts.KoikatuSunshine\TitleShortcuts.KoikatuSunshine.csproj", "{74EA67FD-3A71-4043-ABD5-B8907D70938C}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -397,6 +399,10 @@ Global {CA3C684F-A778-4C76-8CA2-DFB93A8CAC13}.Debug|Any CPU.Build.0 = Debug|Any CPU {CA3C684F-A778-4C76-8CA2-DFB93A8CAC13}.Release|Any CPU.ActiveCfg = Release|Any CPU {CA3C684F-A778-4C76-8CA2-DFB93A8CAC13}.Release|Any CPU.Build.0 = Release|Any CPU + {74EA67FD-3A71-4043-ABD5-B8907D70938C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {74EA67FD-3A71-4043-ABD5-B8907D70938C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {74EA67FD-3A71-4043-ABD5-B8907D70938C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {74EA67FD-3A71-4043-ABD5-B8907D70938C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -494,6 +500,7 @@ Global {A7AFC683-C17F-4B97-8127-122BAD10FBE8} = {A541BB96-39B7-44C7-98A1-C934EFBD52AE} {D77A4720-B234-4A59-B7EF-7F9ABEA81CD3} = {A541BB96-39B7-44C7-98A1-C934EFBD52AE} {CA3C684F-A778-4C76-8CA2-DFB93A8CAC13} = {E462D3D8-0715-45C9-869C-F1FA8CD2F5CD} + {74EA67FD-3A71-4043-ABD5-B8907D70938C} = {E462D3D8-0715-45C9-869C-F1FA8CD2F5CD} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {CECC9C6B-8041-49A1-B7FD-DC89264B7393} @@ -509,7 +516,7 @@ Global src\Common.Unity\Common.Unity.projitems*{0d28ab7e-cc4c-4ec5-b322-876641d7426b}*SharedItemsImports = 4 src\DefaultParamEditor.Core\DefaultParamEditor.Core.projitems*{0d28ab7e-cc4c-4ec5-b322-876641d7426b}*SharedItemsImports = 4 src\Common.Core\Common.Core.projitems*{0dfa53ab-37b6-4aca-b5d2-4441f62cc15a}*SharedItemsImports = 5 - src\Common.Koikatu\Common.Koikatu.projitems*{0dfa53ab-37b6-4aca-b5d2-4441f62cc15a}*SharedItemsImports = 5 + src\Common.KoikatsuSunshine\Common.KoikatsuSunshine.projitems*{0dfa53ab-37b6-4aca-b5d2-4441f62cc15a}*SharedItemsImports = 5 src\RealPOV.Core.Koikatu\RealPOV.Core.Koikatu.projitems*{0dfa53ab-37b6-4aca-b5d2-4441f62cc15a}*SharedItemsImports = 5 src\RealPOV.Core\RealPOV.Core.projitems*{0dfa53ab-37b6-4aca-b5d2-4441f62cc15a}*SharedItemsImports = 5 src\Common.AISyoujyo\Common.AISyoujyo.projitems*{0efad08f-d9a9-49a0-aaeb-a47e9b60fb91}*SharedItemsImports = 4 @@ -577,6 +584,9 @@ Global src\Common.Core\Common.Core.projitems*{736f80a7-88a4-4508-b6c7-b36fdd175ae4}*SharedItemsImports = 4 src\Common.HoneySelect2\Common.HoneySelect2.projitems*{736f80a7-88a4-4508-b6c7-b36fdd175ae4}*SharedItemsImports = 4 src\DefaultStudioScene.Core\DefaultStudioScene.Core.projitems*{736f80a7-88a4-4508-b6c7-b36fdd175ae4}*SharedItemsImports = 4 + src\Common.Core\Common.Core.projitems*{74ea67fd-3a71-4043-abd5-b8907d70938c}*SharedItemsImports = 5 + src\Common.KoikatsuSunshine\Common.KoikatsuSunshine.projitems*{74ea67fd-3a71-4043-abd5-b8907d70938c}*SharedItemsImports = 5 + src\TitleShortcuts.Core\TitleShortcuts.Core.projitems*{74ea67fd-3a71-4043-abd5-b8907d70938c}*SharedItemsImports = 5 src\UIUtility\UIUtility.projitems*{7f30866a-1b8b-40f1-8960-0e203eede225}*SharedItemsImports = 13 src\Common.Core\Common.Core.projitems*{805950cd-b415-4a41-97e2-7bce459c08a0}*SharedItemsImports = 5 src\Common.Koikatu\Common.Koikatu.projitems*{805950cd-b415-4a41-97e2-7bce459c08a0}*SharedItemsImports = 5 diff --git a/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.KoikatuSunshine.csproj b/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.KoikatuSunshine.csproj new file mode 100644 index 0000000..6aa945a --- /dev/null +++ b/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.KoikatuSunshine.csproj @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.cs b/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.cs new file mode 100644 index 0000000..5326750 --- /dev/null +++ b/src/TitleShortcuts.KoikatuSunshine/TitleShortcuts.cs @@ -0,0 +1,97 @@ +using System; +using BepInEx; +using BepInEx.Configuration; +using HarmonyLib; +using KeelPlugins.Koikatu; +using System.Collections; +using TitleShortcuts.Core; +using UnityEngine; + +[assembly: System.Reflection.AssemblyFileVersion(TitleShortcuts.KoikatuSunshine.TitleShortcuts.Version)] + +namespace TitleShortcuts.KoikatuSunshine +{ + [BepInProcess(Constants.MainGameProcessName)] + //[BepInProcess(Constants.MainGameProcessNameSteam)] + [BepInPlugin(GUID, PluginName, Version)] + public class TitleShortcuts : TitleShortcutsCore + { + public const string Version = "1.3.0." + BuildNumber.Version; + + private static ConfigEntry StartFemaleMaker { get; set; } + private static ConfigEntry StartMaleMaker { get; set; } + private static ConfigEntry StartUploader { get; set; } + private static ConfigEntry StartDownloader { get; set; } + private static ConfigEntry StartFreeH { get; set; } + private static ConfigEntry StartGameLoad { get; set; } + + protected override void Awake() + { + base.Awake(); + + StartFemaleMaker = Config.Bind(SECTION_HOTKEYS, "Open female maker", new KeyboardShortcut(KeyCode.F)); + StartMaleMaker = Config.Bind(SECTION_HOTKEYS, "Open male maker", new KeyboardShortcut(KeyCode.M)); + StartUploader = Config.Bind(SECTION_HOTKEYS, "Open uploader", new KeyboardShortcut(KeyCode.U)); + StartDownloader = Config.Bind(SECTION_HOTKEYS, "Open downloader", new KeyboardShortcut(KeyCode.D)); + StartFreeH = Config.Bind(SECTION_HOTKEYS, "Start free H", new KeyboardShortcut(KeyCode.H)); + StartGameLoad = Config.Bind(SECTION_HOTKEYS, "Open Load Game screen", new KeyboardShortcut(KeyCode.G)); + + Harmony.CreateAndPatchAll(GetType()); + } + + [HarmonyPrefix, HarmonyPatch(typeof(TitleScene), nameof(TitleScene.Start))] + private static void TitleStart(TitleScene __instance) + { + Plugin.StartCoroutine(TitleInput(__instance)); + } + + private static IEnumerator TitleInput(TitleScene titleScene) + { + do + { + yield return null; + + if(StartFemaleMaker.Value.IsDown()) StartMode(titleScene.OnCustomFemale, "Starting female maker"); + else if(StartMaleMaker.Value.IsDown()) StartMode(titleScene.OnCustomMale, "Starting male maker"); + else if(StartUploader.Value.IsDown()) StartMode(titleScene.OnUploader, "Starting uploader"); + else if(StartDownloader.Value.IsDown()) StartMode(titleScene.OnDownloader, "Starting downloader"); + else if(StartFreeH.Value.IsDown()) StartMode(titleScene.OnOtherFreeH, "Starting free H"); + else if(StartGameLoad.Value.IsDown()) StartMode(titleScene.OnLoad, "Opening Load Game screen"); + } + while(titleScene); + + void StartMode(Action action, string msg) + { + if(titleScene && (!FindObjectOfType() || !ConfigScene.active)) + { + Log.Message(msg); + action(); + titleScene = null; + } + } + } + + [HarmonyPostfix, HarmonyPatch(typeof(FreeHScene), nameof(FreeHScene.Start))] + private static void TitleStart(FreeHScene __instance, ref IEnumerator __result) + { + var origResult = __result; + __result = new object[]{origResult, HSceneInput(__instance)}.GetEnumerator(); + } + + private static IEnumerator HSceneInput(FreeHScene freeHScene) + { + for(int i = 0; i < 4; i++) + yield return null; + + while(freeHScene != null) + { + if(StartFreeH.Value.IsDown()) + { + freeHScene.enterButton.onClick.Invoke(); + freeHScene = null; + } + yield return null; + } + } + } +}