Compare commits
	
		
			11 Commits
		
	
	
		
			b6e8129b78
			...
			1a8b971a91
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1a8b971a91 | |||
| 
						 | 
					d12ecf0fae | ||
| 
						 | 
					ac190f5939 | ||
| 
						 | 
					8b0350497b | ||
| 
						 | 
					8059e09089 | ||
| 
						 | 
					cf0e46ecdd | ||
| 
						 | 
					31f3144bfd | ||
| 
						 | 
					ecb256ad57 | ||
| 
						 | 
					c9c62d4fa9 | ||
| 
						 | 
					e595a03be6 | ||
| 
						 | 
					5296c4cabe | 
@@ -48,7 +48,7 @@ namespace stardew_access
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            harmony.Patch(
 | 
					            harmony.Patch(
 | 
				
			||||||
                original: AccessTools.Method(typeof(CharacterCustomization), nameof(CharacterCustomization.draw), new Type[] { typeof(SpriteBatch) }),
 | 
					                original: AccessTools.Method(typeof(CharacterCustomization), nameof(CharacterCustomization.draw), new Type[] { typeof(SpriteBatch) }),
 | 
				
			||||||
                postfix: new HarmonyMethod(typeof(TitleMenuPatches), nameof(CharacterCustomizationPatches.CharacterCustomizationMenuPatch))
 | 
					                postfix: new HarmonyMethod(typeof(CharacterCustomizationMenuPatch), nameof(CharacterCustomizationMenuPatch.DrawPatch))
 | 
				
			||||||
            );
 | 
					            );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            harmony.Patch(
 | 
					            harmony.Patch(
 | 
				
			||||||
@@ -225,7 +225,7 @@ namespace stardew_access
 | 
				
			|||||||
            #region On Menu CLose Patch
 | 
					            #region On Menu CLose Patch
 | 
				
			||||||
            harmony.Patch(
 | 
					            harmony.Patch(
 | 
				
			||||||
                    original: AccessTools.Method(typeof(IClickableMenu), nameof(IClickableMenu.exitThisMenu)),
 | 
					                    original: AccessTools.Method(typeof(IClickableMenu), nameof(IClickableMenu.exitThisMenu)),
 | 
				
			||||||
                    postfix: new HarmonyMethod(typeof(MenuPatches), nameof(MenuPatches.IClickableMenuOnExitPatch))
 | 
					                    postfix: new HarmonyMethod(typeof(IClickableMenuPatch), nameof(IClickableMenuPatch.ExitThisMenuPatch))
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
            harmony.Patch(
 | 
					            harmony.Patch(
 | 
				
			||||||
                    original: AccessTools.Method(typeof(Game1), nameof(Game1.exitActiveMenu)),
 | 
					                    original: AccessTools.Method(typeof(Game1), nameof(Game1.exitActiveMenu)),
 | 
				
			||||||
@@ -285,6 +285,11 @@ namespace stardew_access
 | 
				
			|||||||
                    original: AccessTools.Method(typeof(InstanceGame), nameof(InstanceGame.Exit)),
 | 
					                    original: AccessTools.Method(typeof(InstanceGame), nameof(InstanceGame.Exit)),
 | 
				
			||||||
                    prefix: new HarmonyMethod(typeof(MenuPatches), nameof(MenuPatches.ExitEventPatch))
 | 
					                    prefix: new HarmonyMethod(typeof(MenuPatches), nameof(MenuPatches.ExitEventPatch))
 | 
				
			||||||
                );
 | 
					                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            harmony.Patch(
 | 
				
			||||||
 | 
					                    original: AccessTools.Method(typeof(TextBox), nameof(TextBox.Draw)),
 | 
				
			||||||
 | 
					                    prefix: new HarmonyMethod(typeof(TextBoxPatch), nameof(TextBoxPatch.DrawPatch))
 | 
				
			||||||
 | 
					                );
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,6 +13,7 @@ namespace stardew_access
 | 
				
			|||||||
    public class MainClass : Mod
 | 
					    public class MainClass : Mod
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        #region Global Vars & Properties
 | 
					        #region Global Vars & Properties
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #pragma warning disable CS8603
 | 
					        #pragma warning disable CS8603
 | 
				
			||||||
        private static int prevDate = -99;
 | 
					        private static int prevDate = -99;
 | 
				
			||||||
        private static ModConfig? config;
 | 
					        private static ModConfig? config;
 | 
				
			||||||
@@ -99,7 +100,6 @@ namespace stardew_access
 | 
				
			|||||||
                return warnings;
 | 
					                return warnings;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
#pragma warning restore CS8603
 | 
					 | 
				
			||||||
        #endregion
 | 
					        #endregion
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        /*********
 | 
					        /*********
 | 
				
			||||||
@@ -210,54 +210,32 @@ namespace stardew_access
 | 
				
			|||||||
                return;
 | 
					                return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            #region Simulate left and right clicks
 | 
					            #region Simulate left and right clicks
 | 
				
			||||||
            if (Game1.activeClickableMenu != null)
 | 
					            if (Game1.activeClickableMenu != null && !TextBoxPatch.isAnyTextBoxActive)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                bool isCustomizingCharacter = Game1.activeClickableMenu is CharacterCustomization || (TitleMenu.subMenu != null && TitleMenu.subMenu is CharacterCustomization);
 | 
					                bool isCustomizingCharacter = Game1.activeClickableMenu is CharacterCustomization || (TitleMenu.subMenu != null && TitleMenu.subMenu is CharacterCustomization);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                #region Mouse Click Simulation
 | 
					                #region Mouse Click Simulation
 | 
				
			||||||
                // Main Keybinds
 | 
					                if (Config.LeftClickMainKey.JustPressed() || Config.LeftClickAlternateKey.JustPressed())
 | 
				
			||||||
                if (Config.LeftClickMainKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Game1.activeClickableMenu.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					                    Game1.activeClickableMenu.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (Config.RightClickMainKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    Game1.activeClickableMenu.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Alternate Keybinds
 | 
					                if (Config.RightClickMainKey.JustPressed() || Config.RightClickAlternateKey.JustPressed())
 | 
				
			||||||
                if (!isCustomizingCharacter && Game1.activeClickableMenu is not AnimalQueryMenu && Config.LeftClickAlternateKey.JustPressed()) // Excluding the character creation menu
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    Game1.activeClickableMenu.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                if (!isCustomizingCharacter && Game1.activeClickableMenu is not AnimalQueryMenu && Config.RightClickAlternateKey.JustPressed()) // Excluding the character creation menu
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Game1.activeClickableMenu.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					                    Game1.activeClickableMenu.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                #endregion
 | 
					                #endregion
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (Game1.currentMinigame != null)
 | 
					            if (Game1.currentMinigame != null && !TextBoxPatch.isAnyTextBoxActive)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                bool isCustomizingCharacter = Game1.activeClickableMenu is CharacterCustomization || (TitleMenu.subMenu != null && TitleMenu.subMenu is CharacterCustomization);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                #region Mouse Click Simulation
 | 
					                #region Mouse Click Simulation
 | 
				
			||||||
                // Main Keybinds
 | 
					                if (Config.LeftClickMainKey.JustPressed() || Config.LeftClickAlternateKey.JustPressed())
 | 
				
			||||||
                if (Config.LeftClickMainKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Game1.currentMinigame.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					                    Game1.currentMinigame.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if (Config.RightClickMainKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    Game1.currentMinigame.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Alternate Keybinds
 | 
					                if (Config.RightClickMainKey.JustPressed() || Config.RightClickAlternateKey.JustPressed())
 | 
				
			||||||
                if (Config.LeftClickAlternateKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    Game1.currentMinigame.receiveLeftClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                if (Config.RightClickAlternateKey.JustPressed())
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    Game1.currentMinigame.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
					                    Game1.currentMinigame.receiveRightClick(Game1.getMouseX(true), Game1.getMouseY(true));
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,26 +27,16 @@ namespace stardew_access.Patches
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (TextBoxPatch.isAnyTextBoxActive) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
					                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
				
			||||||
                bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); // For narrating animal details
 | 
					                bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); // For narrating animal details
 | 
				
			||||||
                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
					 | 
				
			||||||
                string toSpeak = " ", details = " ";
 | 
					                string toSpeak = " ", details = " ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                isOnFarm = ___movingAnimal;
 | 
					                isOnFarm = ___movingAnimal;
 | 
				
			||||||
                animalQueryMenu = __instance;
 | 
					                animalQueryMenu = __instance;
 | 
				
			||||||
                animalBeingPurchasedOrMoved = ___animal;
 | 
					                animalBeingPurchasedOrMoved = ___animal;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (___textBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___textBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___textBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                if (isPrimaryInfoKeyPressed & !isNarratingAnimalInfo)
 | 
					                if (isPrimaryInfoKeyPressed & !isNarratingAnimalInfo)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    string name = ___animal.displayName;
 | 
					                    string name = ___animal.displayName;
 | 
				
			||||||
@@ -84,7 +74,6 @@ namespace stardew_access.Patches
 | 
				
			|||||||
                    toSpeak = ((___animal.allowReproduction.Value) ? "Enabled" : "Disabled") + " allow reproduction button";
 | 
					                    toSpeak = ((___animal.allowReproduction.Value) ? "Enabled" : "Disabled") + " allow reproduction button";
 | 
				
			||||||
                else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
					                else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
				
			||||||
                    toSpeak = "Animal name text box";
 | 
					                    toSpeak = "Animal name text box";
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (animalQueryMenuQuery != toSpeak)
 | 
					                if (animalQueryMenuQuery != toSpeak)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
@@ -102,6 +91,8 @@ namespace stardew_access.Patches
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (TextBoxPatch.isAnyTextBoxActive) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
					                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
				
			||||||
                purchaseAnimalsMenu = __instance;
 | 
					                purchaseAnimalsMenu = __instance;
 | 
				
			||||||
                isOnFarm = ___onFarm;
 | 
					                isOnFarm = ___onFarm;
 | 
				
			||||||
@@ -125,9 +116,9 @@ namespace stardew_access.Patches
 | 
				
			|||||||
                    else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
					                    else if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        toSpeak = "Name Text Box";
 | 
					                        toSpeak = "Name Text Box";
 | 
				
			||||||
                        string? value = ___textBox.Text;
 | 
					                        // string? value = ___textBox.Text;
 | 
				
			||||||
                        if (value != "" && value != null && value != "null")
 | 
					                        // if (value != "" && value != null && value != "null")
 | 
				
			||||||
                            toSpeak = $"{toSpeak}, Value: {value}";
 | 
					                        //     toSpeak = $"{toSpeak}, Value: {value}";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (purchaseAnimalMenuQuery != toSpeak)
 | 
					                    if (purchaseAnimalMenuQuery != toSpeak)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,8 +1,10 @@
 | 
				
			|||||||
using StardewValley;
 | 
					using StardewValley;
 | 
				
			||||||
using StardewValley.Menus;
 | 
					using StardewValley.Menus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace stardew_access.Patches {
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
    internal class CharacterCustomizationPatches {
 | 
					{
 | 
				
			||||||
 | 
					    internal class CharacterCustomizationMenuPatch
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
        private static bool isRunning = false;
 | 
					        private static bool isRunning = false;
 | 
				
			||||||
        private static int saveGameIndex = -1;
 | 
					        private static int saveGameIndex = -1;
 | 
				
			||||||
        public static string characterCreationMenuQueryKey = " ";
 | 
					        public static string characterCreationMenuQueryKey = " ";
 | 
				
			||||||
@@ -28,12 +30,14 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
        public static bool characterDesignToggleShouldSpeak = true;
 | 
					        public static bool characterDesignToggleShouldSpeak = true;
 | 
				
			||||||
        public static ClickableComponent? currentComponent = null;
 | 
					        public static ClickableComponent? currentComponent = null;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static void CharacterCustomizationMenuPatch(CharacterCustomization __instance, bool ___skipIntro,
 | 
					        internal static void DrawPatch(CharacterCustomization __instance, bool ___skipIntro,
 | 
				
			||||||
        ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
					        ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
				
			||||||
        TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
					        TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
 | 
					                if (TextBoxPatch.isAnyTextBoxActive) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
					                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
				
			||||||
                string toSpeak = "";
 | 
					                string toSpeak = "";
 | 
				
			||||||
                if (characterDesignToggleShouldSpeak)
 | 
					                if (characterDesignToggleShouldSpeak)
 | 
				
			||||||
@@ -44,34 +48,7 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                string itemsToSpeak = "";
 | 
					                string itemsToSpeak = "";
 | 
				
			||||||
                string changesToSpeak = "";
 | 
					                string changesToSpeak = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (___nameBox.Selected)
 | 
					                if (MainClass.Config.CharacterCreationMenuNextKey.JustPressed() && !isRunning)
 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___nameBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___nameBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (___farmnameBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___farmnameBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___farmnameBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (___favThingBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___favThingBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___favThingBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (MainClass.Config.CharacterCreationMenuNextKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    isRunning = true;
 | 
					                    isRunning = true;
 | 
				
			||||||
                    itemsToSpeak = CycleThroughItems(true, __instance, ___skipIntro, ___startingCabinsLabel, ___difficultyModifierLabel, ___nameBox, ___farmnameBox, ___favThingBox);
 | 
					                    itemsToSpeak = CycleThroughItems(true, __instance, ___skipIntro, ___startingCabinsLabel, ___difficultyModifierLabel, ___nameBox, ___farmnameBox, ___favThingBox);
 | 
				
			||||||
@@ -122,7 +99,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                    if (characterDesignToggle)
 | 
					                    if (characterDesignToggle)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        displayState = "shown";
 | 
					                        displayState = "shown";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        displayState = "hidden";
 | 
					                        displayState = "hidden";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    toSpeak = $"Character design controls {displayState}. \n {toSpeak}";
 | 
					                    toSpeak = $"Character design controls {displayState}. \n {toSpeak}";
 | 
				
			||||||
@@ -210,7 +189,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevEyeColorHue = currentEyeColorHue;
 | 
					                        prevEyeColorHue = currentEyeColorHue;
 | 
				
			||||||
                        if (currentEyeColorHue != "")
 | 
					                        if (currentEyeColorHue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentEyeColorHue}";
 | 
					                            toSpeak = $"{toSpeak} \n Hue: {currentEyeColorHue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevEyeColorHue = "";
 | 
					                        prevEyeColorHue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -222,7 +203,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevEyeColorSaturation = currentEyeColorSaturation;
 | 
					                        prevEyeColorSaturation = currentEyeColorSaturation;
 | 
				
			||||||
                        if (currentEyeColorSaturation != "")
 | 
					                        if (currentEyeColorSaturation != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentEyeColorSaturation}";
 | 
					                            toSpeak = $"{toSpeak} \n Saturation: {currentEyeColorSaturation}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevEyeColorSaturation = "";
 | 
					                        prevEyeColorSaturation = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -234,7 +217,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevEyeColorValue = currentEyeColorValue;
 | 
					                        prevEyeColorValue = currentEyeColorValue;
 | 
				
			||||||
                        if (currentEyeColorValue != "")
 | 
					                        if (currentEyeColorValue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentEyeColorValue}";
 | 
					                            toSpeak = $"{toSpeak} \n Value: {currentEyeColorValue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevEyeColorValue = "";
 | 
					                        prevEyeColorValue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -256,7 +241,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevHairColorHue = currentHairColorHue;
 | 
					                        prevHairColorHue = currentHairColorHue;
 | 
				
			||||||
                        if (currentHairColorHue != "")
 | 
					                        if (currentHairColorHue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentHairColorHue}";
 | 
					                            toSpeak = $"{toSpeak} \n Hue: {currentHairColorHue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevHairColorHue = "";
 | 
					                        prevHairColorHue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -268,7 +255,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevHairColorSaturation = currentHairColorSaturation;
 | 
					                        prevHairColorSaturation = currentHairColorSaturation;
 | 
				
			||||||
                        if (currentHairColorSaturation != "")
 | 
					                        if (currentHairColorSaturation != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentHairColorSaturation}";
 | 
					                            toSpeak = $"{toSpeak} \n Saturation: {currentHairColorSaturation}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevHairColorSaturation = "";
 | 
					                        prevHairColorSaturation = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -280,7 +269,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevHairColorValue = currentHairColorValue;
 | 
					                        prevHairColorValue = currentHairColorValue;
 | 
				
			||||||
                        if (currentHairColorValue != "")
 | 
					                        if (currentHairColorValue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentHairColorValue}";
 | 
					                            toSpeak = $"{toSpeak} \n Value: {currentHairColorValue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevHairColorValue = "";
 | 
					                        prevHairColorValue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -302,7 +293,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevPantsColorHue = currentPantsColorHue;
 | 
					                        prevPantsColorHue = currentPantsColorHue;
 | 
				
			||||||
                        if (currentPantsColorHue != "")
 | 
					                        if (currentPantsColorHue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentPantsColorHue}";
 | 
					                            toSpeak = $"{toSpeak} \n Hue: {currentPantsColorHue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevPantsColorHue = "";
 | 
					                        prevPantsColorHue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -314,7 +307,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevPantsColorSaturation = currentPantsColorSaturation;
 | 
					                        prevPantsColorSaturation = currentPantsColorSaturation;
 | 
				
			||||||
                        if (currentPantsColorSaturation != "")
 | 
					                        if (currentPantsColorSaturation != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentPantsColorSaturation}";
 | 
					                            toSpeak = $"{toSpeak} \n Saturation: {currentPantsColorSaturation}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevPantsColorSaturation = "";
 | 
					                        prevPantsColorSaturation = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -326,7 +321,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        prevPantsColorValue = currentPantsColorValue;
 | 
					                        prevPantsColorValue = currentPantsColorValue;
 | 
				
			||||||
                        if (currentPantsColorValue != "")
 | 
					                        if (currentPantsColorValue != "")
 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentPantsColorValue}";
 | 
					                            toSpeak = $"{toSpeak} \n Value: {currentPantsColorValue}";
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        prevPantsColorValue = "";
 | 
					                        prevPantsColorValue = "";
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@@ -351,7 +348,6 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
            return toSpeak.Trim();
 | 
					            return toSpeak.Trim();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string CycleThroughItems(bool increase, CharacterCustomization __instance, bool ___skipIntro,
 | 
					        private static string CycleThroughItems(bool increase, CharacterCustomization __instance, bool ___skipIntro,
 | 
				
			||||||
         ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
					         ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
				
			||||||
         TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
					         TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
				
			||||||
@@ -369,7 +365,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                if (___nameBox.Text != "")
 | 
					                if (___nameBox.Text != "")
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    postText = $": {___nameBox.Text}";
 | 
					                    postText = $": {___nameBox.Text}";
 | 
				
			||||||
                } else {
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    postText = " Text Box";
 | 
					                    postText = " Text Box";
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                buttons.Add(__instance.nameBoxCC, $"Farmer's Name{postText}");
 | 
					                buttons.Add(__instance.nameBoxCC, $"Farmer's Name{postText}");
 | 
				
			||||||
@@ -380,7 +378,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                if (___farmnameBox.Text != "")
 | 
					                if (___farmnameBox.Text != "")
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    postText = $": {___farmnameBox.Text}";
 | 
					                    postText = $": {___farmnameBox.Text}";
 | 
				
			||||||
                } else {
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    postText = " Text Box";
 | 
					                    postText = " Text Box";
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                buttons.Add(__instance.farmnameBoxCC, $"Farm's Name{postText}");
 | 
					                buttons.Add(__instance.farmnameBoxCC, $"Farm's Name{postText}");
 | 
				
			||||||
@@ -391,7 +391,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                if (___favThingBox.Text != "")
 | 
					                if (___favThingBox.Text != "")
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    postText = $": {___favThingBox.Text}";
 | 
					                    postText = $": {___favThingBox.Text}";
 | 
				
			||||||
                } else {
 | 
					                }
 | 
				
			||||||
 | 
					                else
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
                    postText = " Text Box";
 | 
					                    postText = " Text Box";
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                buttons.Add(__instance.favThingBoxCC, $"Favourite Thing{postText}");
 | 
					                buttons.Add(__instance.favThingBoxCC, $"Favourite Thing{postText}");
 | 
				
			||||||
@@ -655,7 +657,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                        break;
 | 
					                        break;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                return sb;
 | 
					                return sb;
 | 
				
			||||||
            } else {
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                return null;
 | 
					                return null;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -675,7 +679,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
                    {
 | 
					                    {
 | 
				
			||||||
                        value = Math.Min(value + amount, 99d);
 | 
					                        value = Math.Min(value + amount, 99d);
 | 
				
			||||||
                        x = Math.Min(Math.Ceiling((value * step)), (double)sb.bounds.Width);
 | 
					                        x = Math.Min(Math.Ceiling((value * step)), (double)sb.bounds.Width);
 | 
				
			||||||
                    } else {
 | 
					                    }
 | 
				
			||||||
 | 
					                    else
 | 
				
			||||||
 | 
					                    {
 | 
				
			||||||
                        value = Math.Max(value - amount, 0d);
 | 
					                        value = Math.Max(value - amount, 0d);
 | 
				
			||||||
                        x = Math.Max(Math.Ceiling((value * step)), 0d);
 | 
					                        x = Math.Max(Math.Ceiling((value * step)), 0d);
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
@@ -821,7 +827,9 @@ namespace stardew_access.Patches {
 | 
				
			|||||||
            if (currentComponent != null && currentComponent.name == "Pet")
 | 
					            if (currentComponent != null && currentComponent.name == "Pet")
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return ((Game1.player.catPerson) ? "Cat" : "Dog") + " Breed: " + Game1.player.whichPetBreed;
 | 
					                return ((Game1.player.catPerson) ? "Cat" : "Dog") + " Breed: " + Game1.player.whichPetBreed;
 | 
				
			||||||
            } else {
 | 
					            }
 | 
				
			||||||
 | 
					            else
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
                return "";
 | 
					                return "";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,5 +1,4 @@
 | 
				
			|||||||
using StardewValley;
 | 
					using StardewValley.Menus;
 | 
				
			||||||
using StardewValley.Menus;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace stardew_access.Patches
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										123
									
								
								stardew-access/Patches/IClickableMenuPatch.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								stardew-access/Patches/IClickableMenuPatch.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,123 @@
 | 
				
			|||||||
 | 
					using StardewValley.Menus;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    // These patches are global, i.e. work on every menus
 | 
				
			||||||
 | 
					    internal class IClickableMenuPatch
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        internal static void ExitThisMenuPatch(IClickableMenu __instance)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Cleanup(__instance);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception e)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal static void Cleanup(IClickableMenu menu)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (menu is LetterViewerMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                DialoguePatches.currentLetterText = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is LevelUpMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MenuPatches.currentLevelUpTitle = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is Billboard)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                QuestPatches.currentDailyQuestText = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is GameMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                GameMenuPatches.gameMenuQueryKey = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.craftingPageQueryKey = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.inventoryPageQueryKey = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.exitPageQueryKey = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.optionsPageQueryKey = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.socialPageQuery = "";
 | 
				
			||||||
 | 
					                GameMenuPatches.currentSelectedCraftingRecipe = -1;
 | 
				
			||||||
 | 
					                GameMenuPatches.isSelectingRecipe = false;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is JunimoNoteMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                BundleMenuPatches.currentIngredientListItem = -1;
 | 
				
			||||||
 | 
					                BundleMenuPatches.currentIngredientInputSlot = -1;
 | 
				
			||||||
 | 
					                BundleMenuPatches.currentInventorySlot = -1;
 | 
				
			||||||
 | 
					                BundleMenuPatches.junimoNoteMenuQuery = "";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is ShopMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                GameMenuPatches.shopMenuQueryKey = "";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is ItemGrabMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                GameMenuPatches.itemGrabMenuQueryKey = "";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is GeodeMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                GameMenuPatches.geodeMenuQueryKey = "";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is CarpenterMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.carpenterMenuQuery = "";
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.isUpgrading = false;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.isDemolishing = false;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.isPainting = false;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.isMoving = false;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.isConstructing = false;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.carpenterMenu = null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is PurchaseAnimalsMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.purchaseAnimalMenuQuery = "";
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.firstTimeInNamingMenu = true;
 | 
				
			||||||
 | 
					                BuildingNAnimalMenuPatches.purchaseAnimalsMenu = null;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is DialogueBox)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                DialoguePatches.isDialogueAppearingFirstTime = true;
 | 
				
			||||||
 | 
					                DialoguePatches.currentDialogue = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is JojaCDMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                BundleMenuPatches.jojaCDMenuQuery = "";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is QuestLog)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                QuestPatches.questLogQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is TailoringMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MenuPatches.tailoringMenuQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is ForgeMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MenuPatches.forgeMenuQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is ItemListMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MenuPatches.itemListMenuQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is FieldOfficeMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                DonationMenuPatches.fieldOfficeMenuQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is MuseumMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                DonationMenuPatches.museumQueryKey = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            else if (menu is PondQueryMenu)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MenuPatches.pondQueryMenuQuery = " ";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            InventoryUtils.hoveredItemQueryKey = "";
 | 
				
			||||||
 | 
					            InventoryUtils.prevSlotIndex = -999;
 | 
				
			||||||
 | 
					            TextBoxPatch.activeTextBoxes = "";
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -420,35 +420,24 @@ namespace stardew_access.Patches
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                string toSpeak = "";
 | 
					 | 
				
			||||||
                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
					 | 
				
			||||||
                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (firstTimeInNamingMenu)
 | 
					                if (firstTimeInNamingMenu)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    firstTimeInNamingMenu = false;
 | 
					                    firstTimeInNamingMenu = false;
 | 
				
			||||||
                    ___textBox.Selected = false;
 | 
					                    ___textBox.Selected = false;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (___textBox.Selected)
 | 
					                if (TextBoxPatch.isAnyTextBoxActive) return;
 | 
				
			||||||
                {
 | 
					
 | 
				
			||||||
                    ___textBox.Update();
 | 
					                string toSpeak = "";
 | 
				
			||||||
                    toSpeak = ___textBox.Text;
 | 
					                int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position
 | 
				
			||||||
 | 
					                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___textBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
					                if (__instance.textBoxCC != null && __instance.textBoxCC.containsPoint(x, y))
 | 
				
			||||||
                    toSpeak = $"{___title} text box";
 | 
					                    toSpeak = $"{___title} text box";
 | 
				
			||||||
                else if (__instance.doneNamingButton != null && __instance.doneNamingButton.containsPoint(x, y))
 | 
					                else if (__instance.doneNamingButton != null && __instance.doneNamingButton.containsPoint(x, y))
 | 
				
			||||||
                    toSpeak = $"Done naming button";
 | 
					                    toSpeak = $"Done naming button";
 | 
				
			||||||
                else if (__instance.randomButton != null && __instance.randomButton.containsPoint(x, y))
 | 
					                else if (__instance.randomButton != null && __instance.randomButton.containsPoint(x, y))
 | 
				
			||||||
                    toSpeak = $"Random button";
 | 
					                    toSpeak = $"Random button";
 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (toSpeak != "")
 | 
					                if (toSpeak != "")
 | 
				
			||||||
                    MainClass.ScreenReader.SayWithChecker(toSpeak, true);
 | 
					                    MainClass.ScreenReader.SayWithChecker(toSpeak, true);
 | 
				
			||||||
@@ -615,12 +604,11 @@ namespace stardew_access.Patches
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        #region Cleanup on exitting a menu
 | 
					 | 
				
			||||||
        internal static void Game1ExitActiveMenuPatch()
 | 
					        internal static void Game1ExitActiveMenuPatch()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Cleanup(Game1.activeClickableMenu);
 | 
					                IClickableMenuPatch.Cleanup(Game1.activeClickableMenu);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception e)
 | 
					            catch (Exception e)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@@ -628,121 +616,6 @@ namespace stardew_access.Patches
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static void IClickableMenuOnExitPatch(IClickableMenu __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            try
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                Cleanup(__instance);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            catch (Exception e)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static void Cleanup(IClickableMenu menu)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (menu is LetterViewerMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                DialoguePatches.currentLetterText = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is LevelUpMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                currentLevelUpTitle = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is Billboard)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                QuestPatches.currentDailyQuestText = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is GameMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                GameMenuPatches.gameMenuQueryKey = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.craftingPageQueryKey = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.inventoryPageQueryKey = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.exitPageQueryKey = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.optionsPageQueryKey = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.socialPageQuery = "";
 | 
					 | 
				
			||||||
                GameMenuPatches.currentSelectedCraftingRecipe = -1;
 | 
					 | 
				
			||||||
                GameMenuPatches.isSelectingRecipe = false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is JunimoNoteMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                BundleMenuPatches.currentIngredientListItem = -1;
 | 
					 | 
				
			||||||
                BundleMenuPatches.currentIngredientInputSlot = -1;
 | 
					 | 
				
			||||||
                BundleMenuPatches.currentInventorySlot = -1;
 | 
					 | 
				
			||||||
                BundleMenuPatches.junimoNoteMenuQuery = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is ShopMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                GameMenuPatches.shopMenuQueryKey = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is ItemGrabMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                GameMenuPatches.itemGrabMenuQueryKey = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is GeodeMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                GameMenuPatches.geodeMenuQueryKey = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is CarpenterMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.carpenterMenuQuery = "";
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.isUpgrading = false;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.isDemolishing = false;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.isPainting = false;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.isMoving = false;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.isConstructing = false;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.carpenterMenu = null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is PurchaseAnimalsMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.purchaseAnimalMenuQuery = "";
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.firstTimeInNamingMenu = true;
 | 
					 | 
				
			||||||
                BuildingNAnimalMenuPatches.purchaseAnimalsMenu = null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is DialogueBox)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                DialoguePatches.isDialogueAppearingFirstTime = true;
 | 
					 | 
				
			||||||
                DialoguePatches.currentDialogue = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is JojaCDMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                BundleMenuPatches.jojaCDMenuQuery = "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is QuestLog)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                QuestPatches.questLogQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is TailoringMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                tailoringMenuQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is ForgeMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                forgeMenuQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is ItemListMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                itemListMenuQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is FieldOfficeMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                DonationMenuPatches.fieldOfficeMenuQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is MuseumMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                DonationMenuPatches.museumQueryKey = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else if (menu is PondQueryMenu)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                pondQueryMenuQuery = " ";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            InventoryUtils.hoveredItemQueryKey = "";
 | 
					 | 
				
			||||||
            InventoryUtils.prevSlotIndex = -999;
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        internal static void ExitEventPatch()
 | 
					        internal static void ExitEventPatch()
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (MainClass.ScreenReader != null)
 | 
					            if (MainClass.ScreenReader != null)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								stardew-access/Patches/TextBoxPatch.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								stardew-access/Patches/TextBoxPatch.cs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
				
			|||||||
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    internal class TextBoxPatch
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        internal static string textBoxQuery = " ";
 | 
				
			||||||
 | 
					        internal static string activeTextBoxes = "";
 | 
				
			||||||
 | 
					        internal static bool isAnyTextBoxActive => activeTextBoxes != "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        internal static void DrawPatch(StardewValley.Menus.TextBox __instance)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                string uniqueIdentifier = $"{__instance.X}:{__instance.Y}:{__instance.Height}:{__instance.Width}";
 | 
				
			||||||
 | 
					                if (!__instance.Selected)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    if (activeTextBoxes.Contains(uniqueIdentifier))  activeTextBoxes = activeTextBoxes.Replace(uniqueIdentifier, "");
 | 
				
			||||||
 | 
					                    return;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (!activeTextBoxes.Contains(uniqueIdentifier)) activeTextBoxes += uniqueIdentifier;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                bool isEscPressed = StardewValley.Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape);
 | 
				
			||||||
 | 
					                string toSpeak = __instance.Text;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (isEscPressed)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    __instance.Selected = false;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if (textBoxQuery != toSpeak)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    textBoxQuery = toSpeak;
 | 
				
			||||||
 | 
					                    MainClass.ScreenReader.Say(toSpeak, true);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception e)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                MainClass.ErrorLog($"An error occured in DrawPatch() in TextBoxPatch:\n{e.Message}\n{e.StackTrace}");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,37 +1,12 @@
 | 
				
			|||||||
using StardewValley;
 | 
					using StardewValley;
 | 
				
			||||||
using StardewValley.Menus;
 | 
					using StardewValley.Menus;
 | 
				
			||||||
using static StardewValley.Menus.CharacterCustomization;
 | 
					 | 
				
			||||||
using static StardewValley.Menus.LoadGameMenu;
 | 
					using static StardewValley.Menus.LoadGameMenu;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
namespace stardew_access.Patches
 | 
					namespace stardew_access.Patches
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    internal class TitleMenuPatches
 | 
					    internal class TitleMenuPatches
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
        private static int saveGameIndex = -1;
 | 
					 | 
				
			||||||
        private static bool isRunning = false;
 | 
					 | 
				
			||||||
        public static string characterCreationMenuQueryKey = " ";
 | 
					 | 
				
			||||||
        public static string advancedGameOptionsQueryKey = " ";
 | 
					        public static string advancedGameOptionsQueryKey = " ";
 | 
				
			||||||
        public static string prevPants = " ";
 | 
					 | 
				
			||||||
        public static string prevShirt = " ";
 | 
					 | 
				
			||||||
        public static string prevHair = " ";
 | 
					 | 
				
			||||||
        public static string prevAccessory = " ";
 | 
					 | 
				
			||||||
        public static string prevSkin = " ";
 | 
					 | 
				
			||||||
        public static string prevEyeColor = " ";
 | 
					 | 
				
			||||||
        public static string prevEyeColorHue = " ";
 | 
					 | 
				
			||||||
        public static string prevEyeColorSaturation = " ";
 | 
					 | 
				
			||||||
        public static string prevEyeColorValue = " ";
 | 
					 | 
				
			||||||
        public static string prevHairColor = " ";
 | 
					 | 
				
			||||||
        public static string prevHairColorHue = " ";
 | 
					 | 
				
			||||||
        public static string prevHairColorSaturation = " ";
 | 
					 | 
				
			||||||
        public static string prevHairColorValue = " ";
 | 
					 | 
				
			||||||
        public static string prevPantsColor = " ";
 | 
					 | 
				
			||||||
        public static string prevPantsColorHue = " ";
 | 
					 | 
				
			||||||
        public static string prevPantsColorSaturation = " ";
 | 
					 | 
				
			||||||
        public static string prevPantsColorValue = " ";
 | 
					 | 
				
			||||||
        public static string prevPetName = " ";
 | 
					 | 
				
			||||||
        public static bool characterDesignToggle = false;
 | 
					 | 
				
			||||||
        public static bool characterDesignToggleShouldSpeak = true;
 | 
					 | 
				
			||||||
        public static ClickableComponent? currentComponent = null;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        internal static void AdvancedGameOptionsPatch(AdvancedGameOptions __instance)
 | 
					        internal static void AdvancedGameOptionsPatch(AdvancedGameOptions __instance)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@@ -259,803 +234,5 @@ namespace stardew_access.Patches
 | 
				
			|||||||
                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
					                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					 | 
				
			||||||
        internal static void CharacterCustomizationMenuPatch(CharacterCustomization __instance, bool ___skipIntro,
 | 
					 | 
				
			||||||
        ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
					 | 
				
			||||||
        TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            try
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                bool isEscPressed = Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.Escape); // For escaping/unselecting from the animal name text box
 | 
					 | 
				
			||||||
                string toSpeak = "";
 | 
					 | 
				
			||||||
                if (characterDesignToggleShouldSpeak)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = "Press left control + space to toggle character appearance controls";
 | 
					 | 
				
			||||||
                    characterDesignToggleShouldSpeak = false;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                string itemsToSpeak = "";
 | 
					 | 
				
			||||||
                string changesToSpeak = "";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (___nameBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___nameBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___nameBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (___farmnameBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___farmnameBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___farmnameBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (___favThingBox.Selected)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    toSpeak = ___favThingBox.Text;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                    if (isEscPressed)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        ___favThingBox.Selected = false;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (MainClass.Config.CharacterCreationMenuNextKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    itemsToSpeak =CycleThroughItems(true, __instance, ___skipIntro, ___startingCabinsLabel, ___difficultyModifierLabel, ___nameBox, ___farmnameBox, ___favThingBox);
 | 
					 | 
				
			||||||
                    if (itemsToSpeak != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{itemsToSpeak} \n {toSpeak}";
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else if (MainClass.Config.CharacterCreationMenuPreviousKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    toSpeak = CycleThroughItems(false, __instance, ___skipIntro, ___startingCabinsLabel, ___difficultyModifierLabel, ___nameBox, ___farmnameBox, ___favThingBox);
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else if (characterDesignToggle && MainClass.Config.CharacterCreationMenuSliderIncreaseKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    AdjustCurrentSlider(true, __instance);
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else if (characterDesignToggle && MainClass.Config.CharacterCreationMenuSliderLargeIncreaseKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    AdjustCurrentSlider(true, __instance, 10);
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else if (characterDesignToggle && MainClass.Config.CharacterCreationMenuSliderDecreaseKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    AdjustCurrentSlider(false, __instance);
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else if (characterDesignToggle && MainClass.Config.CharacterCreationMenuSliderLargeDecreaseKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    isRunning = true;
 | 
					 | 
				
			||||||
                    AdjustCurrentSlider(false, __instance, 10);
 | 
					 | 
				
			||||||
                    Task.Delay(200).ContinueWith(_ => { isRunning = false; });
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                else if (Game1.input.GetKeyboardState().IsKeyDown(Microsoft.Xna.Framework.Input.Keys.LeftControl) && MainClass.Config.CharacterCreationMenuDesignToggleKey.JustPressed() && !isRunning)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    string displayState = "";
 | 
					 | 
				
			||||||
                    characterDesignToggle = !characterDesignToggle;
 | 
					 | 
				
			||||||
                    saveGameIndex = Math.Min(saveGameIndex, 5); // move to random skin button if focus was beyond that point
 | 
					 | 
				
			||||||
                    if (characterDesignToggle)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        displayState = "shown";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        displayState = "hidden";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    toSpeak = $"Character design controls {displayState}. \n {toSpeak}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                changesToSpeak = getChangesToSpeak(__instance);
 | 
					 | 
				
			||||||
                if (changesToSpeak != "")
 | 
					 | 
				
			||||||
                    toSpeak = $"{toSpeak} \n {changesToSpeak}";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (characterCreationMenuQueryKey != toSpeak && toSpeak.Trim() != "")
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    characterCreationMenuQueryKey = toSpeak;
 | 
					 | 
				
			||||||
                    MainClass.ScreenReader.Say(toSpeak, true);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            catch (Exception e)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getChangesToSpeak(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            string toSpeak = "";
 | 
					 | 
				
			||||||
            string currentPetName = getCurrentPetName();
 | 
					 | 
				
			||||||
            string currentSkin = getCurrentSkin();
 | 
					 | 
				
			||||||
            string currentHair = getCurrentHair();
 | 
					 | 
				
			||||||
            string currentShirt = getCurrentShirt();
 | 
					 | 
				
			||||||
            string currentPants = getCurrentPants();
 | 
					 | 
				
			||||||
            string currentAccessory = getCurrentAccessory();
 | 
					 | 
				
			||||||
            string currentEyeColor = getCurrentEyeColor();
 | 
					 | 
				
			||||||
            string currentEyeColorHue = getCurrentEyeColorHue(__instance);
 | 
					 | 
				
			||||||
            string currentEyeColorSaturation = getCurrentEyeColorSaturation(__instance);
 | 
					 | 
				
			||||||
            string currentEyeColorValue = getCurrentEyeColorValue(__instance);
 | 
					 | 
				
			||||||
            string currentHairColor = getCurrentHairColor();
 | 
					 | 
				
			||||||
            string currentHairColorHue = getCurrentHairColorHue(__instance);
 | 
					 | 
				
			||||||
            string currentHairColorSaturation = getCurrentHairColorSaturation(__instance);
 | 
					 | 
				
			||||||
            string currentHairColorValue = getCurrentHairColorValue(__instance);
 | 
					 | 
				
			||||||
            string currentPantsColor = getCurrentPantsColor();
 | 
					 | 
				
			||||||
            string currentPantsColorHue = getCurrentPantsColorHue(__instance);
 | 
					 | 
				
			||||||
            string currentPantsColorSaturation = getCurrentPantsColorSaturation(__instance);
 | 
					 | 
				
			||||||
            string currentPantsColorValue = getCurrentPantsColorValue(__instance);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (characterDesignToggle)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (prevSkin != currentSkin)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    prevSkin = currentSkin;
 | 
					 | 
				
			||||||
                    if (currentSkin != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{toSpeak} \n {currentSkin}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevHair != currentHair)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    prevHair = currentHair;
 | 
					 | 
				
			||||||
                    if (currentHair != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{toSpeak} \n {currentHair}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevShirt != currentShirt)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    prevShirt = currentShirt;
 | 
					 | 
				
			||||||
                    if (currentShirt != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{toSpeak} \n {currentShirt}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevPants != currentPants)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    prevPants = currentPants;
 | 
					 | 
				
			||||||
                    if (currentPants != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{toSpeak} \n {currentPants}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevAccessory != currentAccessory)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    prevAccessory = currentAccessory;
 | 
					 | 
				
			||||||
                    if (currentAccessory != "")
 | 
					 | 
				
			||||||
                        toSpeak = $"{toSpeak} \n {currentAccessory}";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevEyeColorHue != currentEyeColorHue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 522)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevEyeColorHue = currentEyeColorHue;
 | 
					 | 
				
			||||||
                        if (currentEyeColorHue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentEyeColorHue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevEyeColorHue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevEyeColorSaturation != currentEyeColorSaturation)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 523)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevEyeColorSaturation = currentEyeColorSaturation;
 | 
					 | 
				
			||||||
                        if (currentEyeColorSaturation != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentEyeColorSaturation}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevEyeColorSaturation = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevEyeColorValue != currentEyeColorValue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 524)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevEyeColorValue = currentEyeColorValue;
 | 
					 | 
				
			||||||
                        if (currentEyeColorValue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentEyeColorValue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevEyeColorValue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevEyeColor != currentEyeColor)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 522 || currentComponent.myID <= 524)))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevEyeColor = currentEyeColor;
 | 
					 | 
				
			||||||
                        if (currentEyeColor != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n {currentEyeColor}";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevHairColorHue != currentHairColorHue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 525)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevHairColorHue = currentHairColorHue;
 | 
					 | 
				
			||||||
                        if (currentHairColorHue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentHairColorHue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevHairColorHue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevHairColorSaturation != currentHairColorSaturation)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 526)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevHairColorSaturation = currentHairColorSaturation;
 | 
					 | 
				
			||||||
                        if (currentHairColorSaturation != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentHairColorSaturation}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevHairColorSaturation = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevHairColorValue != currentHairColorValue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 527)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevHairColorValue = currentHairColorValue;
 | 
					 | 
				
			||||||
                        if (currentHairColorValue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentHairColorValue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevHairColorValue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevHairColor != currentHairColor)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 525 || currentComponent.myID <= 527)))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevHairColor = currentHairColor;
 | 
					 | 
				
			||||||
                        if (currentHairColor != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n {currentHairColor}";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevPantsColorHue != currentPantsColorHue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 528)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevPantsColorHue = currentPantsColorHue;
 | 
					 | 
				
			||||||
                        if (currentPantsColorHue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Hue: {currentPantsColorHue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevPantsColorHue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevPantsColorSaturation != currentPantsColorSaturation)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 529)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevPantsColorSaturation = currentPantsColorSaturation;
 | 
					 | 
				
			||||||
                        if (currentPantsColorSaturation != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Saturation: {currentPantsColorSaturation}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevPantsColorSaturation = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevPantsColorValue != currentPantsColorValue)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && currentComponent.myID == 530)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevPantsColorValue = currentPantsColorValue;
 | 
					 | 
				
			||||||
                        if (currentPantsColorValue != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n Value: {currentPantsColorValue}";
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        prevPantsColorValue = "";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (prevPantsColor != currentPantsColor)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 528 || currentComponent.myID <= 530)))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        prevPantsColor = currentPantsColor;
 | 
					 | 
				
			||||||
                        if (currentPantsColor != "")
 | 
					 | 
				
			||||||
                            toSpeak = $"{toSpeak} \n {currentPantsColor}";
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (prevPetName != currentPetName)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                prevPetName = currentPetName;
 | 
					 | 
				
			||||||
                if (currentPetName  != "")
 | 
					 | 
				
			||||||
                    toSpeak = $"{toSpeak} \n Current Pet: {currentPetName}";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            return toSpeak.Trim();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string CycleThroughItems(bool increase, CharacterCustomization __instance, bool ___skipIntro,
 | 
					 | 
				
			||||||
         ClickableComponent ___startingCabinsLabel, ClickableComponent ___difficultyModifierLabel, TextBox ___nameBox,
 | 
					 | 
				
			||||||
         TextBox ___farmnameBox, TextBox ___favThingBox)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            string toSpeak = " ";
 | 
					 | 
				
			||||||
            int DesignControlsIndex = 0;
 | 
					 | 
				
			||||||
            Dictionary<ClickableComponent, string> buttons = new();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #region Add buttons with their names IF they are available
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #region Character related
 | 
					 | 
				
			||||||
            string postText = "";
 | 
					 | 
				
			||||||
            if (__instance.nameBoxCC != null && __instance.nameBoxCC.visible)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (___nameBox.Text != "")
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    postText = $": {___nameBox.Text}";
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    postText = " Text Box";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                buttons.Add(__instance.nameBoxCC, $"Farmer's Name{postText}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.farmnameBoxCC != null && __instance.farmnameBoxCC.visible)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (___farmnameBox.Text != "")
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    postText = $": {___farmnameBox.Text}";
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    postText = " Text Box";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                buttons.Add(__instance.farmnameBoxCC, $"Farm's Name{postText}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.favThingBoxCC != null && __instance.favThingBoxCC.visible)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (___favThingBox.Text != "")
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    postText = $": {___favThingBox.Text}";
 | 
					 | 
				
			||||||
                } else {
 | 
					 | 
				
			||||||
                    postText = " Text Box";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                buttons.Add(__instance.favThingBoxCC, $"Favourite Thing{postText}");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.petPortraitBox.HasValue) // Cannot get petButtons like with others
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ClickableComponent petPrev = __instance.getComponentWithID(511);
 | 
					 | 
				
			||||||
                buttons.Add(petPrev, "Previous pet button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent petNext = __instance.getComponentWithID(510);
 | 
					 | 
				
			||||||
                buttons.Add(petNext, "Next pet button");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.randomButton != null && __instance.randomButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.randomButton, "Random Skin Button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            // Controls to rotate the farmer (Potentially useful for low vision players) are first if they're available.
 | 
					 | 
				
			||||||
            // They also appear above the gender buttons, so we handle them separately here.
 | 
					 | 
				
			||||||
            if (characterDesignToggle && new[] {__instance.leftSelectionButtons.Count, __instance.rightSelectionButtons.Count }.All(c => c >= 0)) // both have Count > 0
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (new[] {__instance.leftSelectionButtons[DesignControlsIndex].visible, __instance.rightSelectionButtons[DesignControlsIndex].visible }.All(v => v == true) // both visible
 | 
					 | 
				
			||||||
                    && new[] {__instance.leftSelectionButtons[DesignControlsIndex].name, __instance.rightSelectionButtons[DesignControlsIndex].name }.All(n => n == "Direction")) // both named "Direction"
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    buttons.Add(__instance.leftSelectionButtons[DesignControlsIndex], "Rotate Left Button");
 | 
					 | 
				
			||||||
                    buttons.Add(__instance.rightSelectionButtons[DesignControlsIndex], "Rotate Right Button");
 | 
					 | 
				
			||||||
                    ++DesignControlsIndex;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.genderButtons.Count > 0)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                buttons.Add(__instance.genderButtons[0], ((Game1.player.IsMale) ? "Selected " : "") + "Gender: Male Button");
 | 
					 | 
				
			||||||
                buttons.Add(__instance.genderButtons[1], ((!Game1.player.IsMale) ? "Selected " : "") + "Gender: Female Button");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (characterDesignToggle&& new[] {__instance.leftSelectionButtons.Count, __instance.rightSelectionButtons.Count }.All(c => c >= DesignControlsIndex) && new[] {__instance.leftSelectionButtons[DesignControlsIndex].visible, __instance.rightSelectionButtons[DesignControlsIndex].visible }.All(v => v == true))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                while(DesignControlsIndex < __instance.leftSelectionButtons.Count)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    ClickableComponent left = __instance.leftSelectionButtons[DesignControlsIndex];
 | 
					 | 
				
			||||||
                    ClickableComponent right = __instance.rightSelectionButtons[DesignControlsIndex];
 | 
					 | 
				
			||||||
                    string name = left.name;
 | 
					 | 
				
			||||||
                    // minor cleanup on names to be slightly more descriptive
 | 
					 | 
				
			||||||
                    switch (name)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        case "Skin":
 | 
					 | 
				
			||||||
                            name += " Tone";
 | 
					 | 
				
			||||||
                            break;
 | 
					 | 
				
			||||||
                        case "Hair":
 | 
					 | 
				
			||||||
                            name += " Style";
 | 
					 | 
				
			||||||
                            break;
 | 
					 | 
				
			||||||
                        case "Acc":
 | 
					 | 
				
			||||||
                            name = "Accessory";
 | 
					 | 
				
			||||||
                            break;
 | 
					 | 
				
			||||||
                        default:
 | 
					 | 
				
			||||||
                            break;
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    if (!buttons.ContainsKey(left) || !buttons.ContainsKey(right))
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        buttons.Add(left, $"Previous {name} button");
 | 
					 | 
				
			||||||
                        buttons.Add(right, $"Next {name} button");
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    //MainClass.ScreenReader.Say($"Left {DesignControlsIndex}: {__instance.leftSelectionButtons[DesignControlsIndex]} {__instance.leftSelectionButtons[DesignControlsIndex].name}\n", true);
 | 
					 | 
				
			||||||
                    //MainClass.ScreenReader.Say($"Right {DesignControlsIndex}: {__instance.rightSelectionButtons[DesignControlsIndex]} {__instance.rightSelectionButtons[DesignControlsIndex].name}\n", true);
 | 
					 | 
				
			||||||
                    ++DesignControlsIndex;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent eyeColorHue = __instance.getComponentWithID(522);
 | 
					 | 
				
			||||||
                if (eyeColorHue != null && eyeColorHue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(eyeColorHue, "eye color hue slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent eyeColorSaturation = __instance.getComponentWithID(523);
 | 
					 | 
				
			||||||
                if (eyeColorSaturation != null && eyeColorSaturation.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(eyeColorSaturation, "eye color saturation slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent eyeColorValue = __instance.getComponentWithID(524);
 | 
					 | 
				
			||||||
                if (eyeColorValue != null && eyeColorValue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(eyeColorValue, "eye color Value slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent hairColorHue = __instance.getComponentWithID(525);
 | 
					 | 
				
			||||||
                if (hairColorHue != null && hairColorHue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(hairColorHue, "hair color hue slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent hairColorSaturation = __instance.getComponentWithID(526);
 | 
					 | 
				
			||||||
                if (hairColorSaturation != null && hairColorSaturation.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(hairColorSaturation, "hair color saturation slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent hairColorValue = __instance.getComponentWithID(527);
 | 
					 | 
				
			||||||
                if (hairColorValue != null && hairColorValue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(hairColorValue, "hair color Value slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent pantsColorHue = __instance.getComponentWithID(528);
 | 
					 | 
				
			||||||
                if (pantsColorHue != null && pantsColorHue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(pantsColorHue, "pants color hue slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent pantsColorSaturation = __instance.getComponentWithID(529);
 | 
					 | 
				
			||||||
                if (pantsColorSaturation != null && pantsColorSaturation.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(pantsColorSaturation, "pants color saturation slider");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent pantsColorValue = __instance.getComponentWithID(530);
 | 
					 | 
				
			||||||
                if (pantsColorValue != null && pantsColorValue.visible)
 | 
					 | 
				
			||||||
                    buttons.Add(pantsColorValue, "pants color Value slider");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #region Farm layout related
 | 
					 | 
				
			||||||
            if (__instance.farmTypeButtons.Count > 0)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                for (int i = 0; i < __instance.farmTypeButtons.Count; i++)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    buttons.Add(__instance.farmTypeButtons[i], ((i == Game1.whichFarm) ? "Selected " : "") + getFarmHoverText(__instance.farmTypeButtons[i]));
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.farmTypeNextPageButton != null && __instance.farmTypeNextPageButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.farmTypeNextPageButton, "Next Farm Type Page Button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.farmTypePreviousPageButton != null && __instance.farmTypePreviousPageButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.farmTypePreviousPageButton, "Previous Farm Type Page Button");
 | 
					 | 
				
			||||||
            #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            #region Co-op related
 | 
					 | 
				
			||||||
            if (__instance.source == Source.HostNewFarm)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                ClickableComponent cabinLeft = __instance.getComponentWithID(621);
 | 
					 | 
				
			||||||
                if (Game1.startingCabins > 0)
 | 
					 | 
				
			||||||
                    buttons.Add(cabinLeft, "Decrease starting cabins button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                buttons.Add(___startingCabinsLabel, $"Starting cabins: {Game1.startingCabins}");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent cabinRight = __instance.getComponentWithID(622);
 | 
					 | 
				
			||||||
                if (Game1.startingCabins < 3)
 | 
					 | 
				
			||||||
                    buttons.Add(cabinRight, "Increase starting cabins button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                if (Game1.startingCabins > 0)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    buttons.Add(__instance.cabinLayoutButtons[0], "Cabin layout to nearby Button");
 | 
					 | 
				
			||||||
                    buttons.Add(__instance.cabinLayoutButtons[1], "Cabin layout to separate Button");
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent difficultyLeft = __instance.getComponentWithID(627);
 | 
					 | 
				
			||||||
                buttons.Add(difficultyLeft, "Increase profit margin button");
 | 
					 | 
				
			||||||
                buttons.Add(___difficultyModifierLabel, "Profit Margin: " + (((Game1.player.difficultyModifier * 100) == 100f) ? "normal" : Game1.player.difficultyModifier.ToString()));
 | 
					 | 
				
			||||||
                ClickableComponent difficultyRight = __instance.getComponentWithID(628);
 | 
					 | 
				
			||||||
                buttons.Add(difficultyRight, "Decrease profit margin button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
                ClickableComponent walletLeft = __instance.getComponentWithID(631);
 | 
					 | 
				
			||||||
                buttons.Add(walletLeft, "Money style to " + ((!Game1.player.team.useSeparateWallets.Value) ? "separate wallets" : "shared wallets") + " button");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.skipIntroButton != null && __instance.skipIntroButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.skipIntroButton, (___skipIntro ? "Enabled" : "Disabled") + " Skip Intro Button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.advancedOptionsButton != null && __instance.advancedOptionsButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.advancedOptionsButton, "Advanced Options Button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.okButton != null && __instance.okButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.okButton, "OK Button");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (__instance.backButton != null && __instance.backButton.visible)
 | 
					 | 
				
			||||||
                buttons.Add(__instance.backButton, "Back Button");
 | 
					 | 
				
			||||||
            #endregion
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            int size = buttons.Count - 1;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            if (increase)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                saveGameIndex++;
 | 
					 | 
				
			||||||
                if (saveGameIndex > size)
 | 
					 | 
				
			||||||
                    saveGameIndex = 0;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                saveGameIndex--;
 | 
					 | 
				
			||||||
                if (saveGameIndex < 0)
 | 
					 | 
				
			||||||
                    saveGameIndex = size;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            currentComponent = buttons.ElementAt(saveGameIndex).Key;
 | 
					 | 
				
			||||||
            currentComponent!.snapMouseCursor(); 
 | 
					 | 
				
			||||||
            __instance.setCurrentlySnappedComponentTo(currentComponent!.myID);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            toSpeak = buttons.ElementAt(saveGameIndex).Value;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return toSpeak.Trim();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static SliderBar? getCurrentSliderBar(int id, CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (id >= 522 && id <= 530)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                // Three ColorPickers with 3 SliderBars each.
 | 
					 | 
				
			||||||
                // First group ids by ColorPicker.
 | 
					 | 
				
			||||||
                // Maps 522-524 -> 0, 525-527 -> 1, 528-530 -> 2
 | 
					 | 
				
			||||||
                int whichColorPicker = (int)Math.Floor(((float)id - 522f) / 3f);
 | 
					 | 
				
			||||||
                // Next group ids by slider type.
 | 
					 | 
				
			||||||
                // Maps [522,525,528] -> 0, [523,526,529] -> 1, [524,527,530] -> 2
 | 
					 | 
				
			||||||
                int whichSliderBar = (int)Math.Floor((float)id % 3f);
 | 
					 | 
				
			||||||
                ColorPicker cp;
 | 
					 | 
				
			||||||
                switch (whichColorPicker)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    default:
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        // 522-524 == eye color
 | 
					 | 
				
			||||||
                        cp = __instance.eyeColorPicker;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        // 525-527 == hair color
 | 
					 | 
				
			||||||
                        cp = __instance.hairColorPicker;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case 2:
 | 
					 | 
				
			||||||
                        // 528-530 == pants color
 | 
					 | 
				
			||||||
                        cp = __instance.pantsColorPicker;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                SliderBar sb;
 | 
					 | 
				
			||||||
                switch (whichSliderBar)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    default:
 | 
					 | 
				
			||||||
                    case 0:
 | 
					 | 
				
			||||||
                        // 522, 525, 528 == hue slider
 | 
					 | 
				
			||||||
                        sb = cp.hueBar;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case 1:
 | 
					 | 
				
			||||||
                        // 523, 526, 529 == saturation slider
 | 
					 | 
				
			||||||
                        sb = cp.saturationBar;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                    case 2:
 | 
					 | 
				
			||||||
                        // 524, 527, 530 == value slider
 | 
					 | 
				
			||||||
                        sb = cp.valueBar;
 | 
					 | 
				
			||||||
                        break;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return sb;
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return null;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static  void AdjustCurrentSlider(bool increase, CharacterCustomization __instance, int amount=1) 
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && currentComponent.myID >= 522 && currentComponent.myID <= 530)
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                SliderBar sb = getCurrentSliderBar(currentComponent.myID, __instance) !;
 | 
					 | 
				
			||||||
                if (sb != null)
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    double step = ((double)sb.bounds.Width / 100d); // size of 1% change in slider value
 | 
					 | 
				
			||||||
                    double value = (double)sb.value;
 | 
					 | 
				
			||||||
                    double x = 0d;
 | 
					 | 
				
			||||||
                    int y = currentComponent.bounds.Center.Y;
 | 
					 | 
				
			||||||
                    if (increase)
 | 
					 | 
				
			||||||
                    {
 | 
					 | 
				
			||||||
                        value = Math.Min(value + amount, 99d);
 | 
					 | 
				
			||||||
                        x = Math.Min(Math.Ceiling((value * step)), (double)sb.bounds.Width);
 | 
					 | 
				
			||||||
                    } else {
 | 
					 | 
				
			||||||
                        value = Math.Max(value - amount, 0d);
 | 
					 | 
				
			||||||
                        x = Math.Max(Math.Ceiling((value * step)), 0d);
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                    x += (double)currentComponent.bounds.Left;
 | 
					 | 
				
			||||||
                    Game1.setMousePosition((int)x, y);
 | 
					 | 
				
			||||||
                    Game1.activeClickableMenu.receiveLeftClick((int)x, y);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        // Most values (exception noted below) are 0 indexed internally but visually start from 1. Thus we increment before returning.
 | 
					 | 
				
			||||||
        private static string getCurrentSkin()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || currentComponent.name == "Skin"))
 | 
					 | 
				
			||||||
                return $"Skin tone: {Game1.player.skin.Value + 1}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentHair()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || currentComponent.name == "Hair"))
 | 
					 | 
				
			||||||
                return $"hair style: {Game1.player.hair.Value + 1}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentShirt()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || currentComponent.name == "Shirt"))
 | 
					 | 
				
			||||||
                return $"Shirt: {Game1.player.shirt.Value + 1}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPants()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || currentComponent.name == "Pants Style"))
 | 
					 | 
				
			||||||
                return $"Pants: {Game1.player.pants.Value + 1}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentAccessory()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            // Internally accessory starts from -1 while displaying +1 on screen.
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || currentComponent.name == "Acc"))
 | 
					 | 
				
			||||||
                return $"accessory: {Game1.player.accessory.Value + 2}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentEyeColor()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 522 && currentComponent.myID <= 524)))
 | 
					 | 
				
			||||||
                return $"Eye color: {Game1.player.newEyeColor.R}, {Game1.player.newEyeColor.G}, {Game1.player.newEyeColor.B}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentEyeColorHue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(522, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 522 && currentComponent.myID <= 524)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentEyeColorSaturation(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(523, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 522 && currentComponent.myID <= 524)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentEyeColorValue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(524, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 522 && currentComponent.myID <= 524)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentHairColor()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 525 && currentComponent.myID <= 527)))
 | 
					 | 
				
			||||||
                return $"Hair color: {Game1.player.hairstyleColor.R}, {Game1.player.hairstyleColor.G}, {Game1.player.hairstyleColor.B}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentHairColorHue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(525, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 525 && currentComponent.myID <= 527)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentHairColorSaturation(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(526, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 525 && currentComponent.myID <= 527)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentHairColorValue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(527, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 525 && currentComponent.myID <= 527)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPantsColor()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 528 && currentComponent.myID <= 530)))
 | 
					 | 
				
			||||||
                return $"Pants color: {Game1.player.pantsColor.R}, {Game1.player.pantsColor.G}, {Game1.player.pantsColor.B}";
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPantsColorHue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(528, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 528 && currentComponent.myID <= 530)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPantsColorSaturation(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(529, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 528 && currentComponent.myID <= 530)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPantsColorValue(CharacterCustomization __instance)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            SliderBar sb = getCurrentSliderBar(530, __instance)!;
 | 
					 | 
				
			||||||
            if (currentComponent != null && (currentComponent.myID == 507 || (currentComponent.myID >= 528 && currentComponent.myID <= 530)))
 | 
					 | 
				
			||||||
                return sb.value!.ToString();
 | 
					 | 
				
			||||||
            return "";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getCurrentPetName()
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            if (currentComponent != null && currentComponent.name == "Pet")
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                return ((Game1.player.catPerson) ? "Cat" : "Dog") + " Breed: " + Game1.player.whichPetBreed;
 | 
					 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return "";
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        private static string getFarmHoverText(ClickableTextureComponent farm)
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
            string hoverTitle = " ", hoverText = " ";
 | 
					 | 
				
			||||||
            if (!farm.name.Contains("Gray"))
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (farm.hoverText.Contains('_'))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    hoverTitle = farm.hoverText.Split('_')[0];
 | 
					 | 
				
			||||||
                    hoverText = farm.hoverText.Split('_')[1];
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                else
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    hoverTitle = " ";
 | 
					 | 
				
			||||||
                    hoverText = farm.hoverText;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            else
 | 
					 | 
				
			||||||
            {
 | 
					 | 
				
			||||||
                if (farm.name.Contains("Gray"))
 | 
					 | 
				
			||||||
                {
 | 
					 | 
				
			||||||
                    hoverText = "Reach level 10 " + Game1.content.LoadString("Strings\\UI:Character_" + farm.name.Split('_')[1]) + " to unlock.";
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            return $"{hoverTitle}: {hoverText}";
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user