Organized code

master
Mohammad Shoaib Khan 2023-02-20 13:34:03 +05:30
parent 80637af471
commit 2d061e220b
No known key found for this signature in database
GPG Key ID: D8040D966320B620
4 changed files with 81 additions and 169 deletions

View File

@ -79,7 +79,8 @@ namespace stardew_access.Patches
else else
{ {
// Player Inventory // Player Inventory
int i = narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y); int i = InventoryUtils.narrateHoveredSlotAndReturnIndex(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y,
handleHighlightedItem: true, highlightedItemPrefix: "Donatable ");
if (i != -9999) if (i != -9999)
{ {
bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); // For donating hovered item bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); // For donating hovered item
@ -148,73 +149,6 @@ namespace stardew_access.Patches
} }
} }
// Returns the index of the hovered item or -9999
internal static int narrateHoveredItemInInventory(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y)
{
#region Narrate hovered item
for (int i = 0; i < inventory.Count; i++)
{
if (inventory[i].containsPoint(x, y))
{
string toSpeak = "";
if ((i + 1) <= actualInventory.Count)
{
if (actualInventory[i] != null)
{
string name = actualInventory[i].DisplayName;
int stack = actualInventory[i].Stack;
string quality = "";
#region Add quality of item
if (actualInventory[i] is StardewValley.Object && ((StardewValley.Object)actualInventory[i]).Quality > 0)
{
int qualityIndex = ((StardewValley.Object)actualInventory[i]).Quality;
if (qualityIndex == 1)
{
quality = "Silver quality";
}
else if (qualityIndex == 2 || qualityIndex == 3)
{
quality = "Gold quality";
}
else if (qualityIndex >= 4)
{
quality = "Iridium quality";
}
}
#endregion
if (inventoryMenu.highlightMethod(inventoryMenu.actualInventory[i]))
name = $"Donatable {name}";
if (stack > 1)
toSpeak = $"{stack} {name} {quality}";
else
toSpeak = $"{name} {quality}";
}
else
{
// For empty slot
toSpeak = "Empty Slot";
}
}
else
{
// For empty slot
toSpeak = "Empty Slot";
}
if (museumQueryKey != $"{toSpeak}:{i}")
{
museumQueryKey = $"{toSpeak}:{i}";
MainClass.ScreenReader.Say(toSpeak, true);
}
return i;
}
}
#endregion
return -9999;
}
#region These methods are taken from the game's source code, https://github.com/veywrn/StardewValley/blob/3ff171b6e9e6839555d7881a391b624ccd820a83/StardewValley/Multiplayer.cs#L1331-L1395 #region These methods are taken from the game's source code, https://github.com/veywrn/StardewValley/blob/3ff171b6e9e6839555d7881a391b624ccd820a83/StardewValley/Multiplayer.cs#L1331-L1395
internal static void globalChatInfoMessage(string messageKey, params string[] args) internal static void globalChatInfoMessage(string messageKey, params string[] args)
@ -303,33 +237,8 @@ namespace stardew_access.Patches
} }
else else
{ {
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y))
return; return;
// for (int i = 0; i < __instance.inventory.inventory.Count; i++)
// {
// if (!__instance.inventory.inventory[i].containsPoint(x, y))
// continue;
//
// if (__instance.inventory.actualInventory[i] == null)
// toSpeak = "Empty slot";
// else
// {
// toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}";
//
// if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i]))
// {
// toSpeak = $"{toSpeak} not usable here";
// }
// }
//
// if (fieldOfficeMenuQuery != $"{toSpeak}:{i}")
// {
// fieldOfficeMenuQuery = $"{toSpeak}:{i}";
// MainClass.ScreenReader.Say(toSpeak, true);
// }
//
// return;
// }
for (int i = 0; i < __instance.pieceHolders.Count; i++) for (int i = 0; i < __instance.pieceHolders.Count; i++)
{ {

View File

@ -240,7 +240,7 @@ namespace stardew_access.Patches
#endregion #endregion
#region Narrate hovered item #region Narrate hovered item
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, hoverPrice: __instance.hoverPrice)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, hoverPrice: __instance.hoverPrice))
{ {
shopMenuQueryKey = ""; shopMenuQueryKey = "";
return; return;
@ -395,7 +395,7 @@ namespace stardew_access.Patches
#endregion #endregion
#region Narrate hovered item #region Narrate hovered item
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y))
geodeMenuQueryKey = ""; geodeMenuQueryKey = "";
#endregion #endregion
} }
@ -572,14 +572,14 @@ namespace stardew_access.Patches
#endregion #endregion
#region Narrate hovered item #region Narrate hovered item
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true))
{ {
gameMenuQueryKey = ""; gameMenuQueryKey = "";
itemGrabMenuQueryKey = ""; itemGrabMenuQueryKey = "";
return; return;
} }
if (InventoryUtils.narrateHoveredItemInInventory(__instance.ItemsToGrabMenu, __instance.ItemsToGrabMenu.inventory, __instance.ItemsToGrabMenu.actualInventory, x, y, true)) if (InventoryUtils.narrateHoveredSlot(__instance.ItemsToGrabMenu, __instance.ItemsToGrabMenu.inventory, __instance.ItemsToGrabMenu.actualInventory, x, y, true))
{ {
gameMenuQueryKey = ""; gameMenuQueryKey = "";
itemGrabMenuQueryKey = ""; itemGrabMenuQueryKey = "";
@ -854,7 +854,7 @@ namespace stardew_access.Patches
#endregion #endregion
#region Narrate hovered item #region Narrate hovered item
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y))
{ {
gameMenuQueryKey = ""; gameMenuQueryKey = "";
craftingPageQueryKey = ""; craftingPageQueryKey = "";
@ -1065,7 +1065,7 @@ namespace stardew_access.Patches
#endregion #endregion
#region Narrate hovered item #region Narrate hovered item
if (InventoryUtils.narrateHoveredItemInInventory(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true)) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y, true))
{ {
gameMenuQueryKey = ""; gameMenuQueryKey = "";
inventoryPageQueryKey = ""; inventoryPageQueryKey = "";

View File

@ -9,7 +9,20 @@ namespace stardew_access.Patches
internal static string hoveredItemQueryKey = ""; internal static string hoveredItemQueryKey = "";
internal static int prevSlotIndex = -999; internal static int prevSlotIndex = -999;
internal static bool narrateHoveredItemInInventory(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y, bool giveExtraDetails = false, int hoverPrice = -1, int extraItemToShowIndex = -1, int extraItemToShowAmount = -1) internal static bool narrateHoveredSlot(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y,
bool giveExtraDetails = false, int hoverPrice = -1, int extraItemToShowIndex = -1, int extraItemToShowAmount = -1,
bool handleHighlightedItem = false, String highlightedItemPrefix = "", String highlightedItemSuffix = "")
{
if (narrateHoveredSlotAndReturnIndex(inventoryMenu, inventory, actualInventory, x, y,
giveExtraDetails = false, hoverPrice = -1, extraItemToShowIndex = -1, extraItemToShowAmount = -1,
handleHighlightedItem = false, highlightedItemPrefix = "", highlightedItemSuffix = "") == -999)
return false;
return true;
}
internal static int narrateHoveredSlotAndReturnIndex(InventoryMenu inventoryMenu, List<ClickableComponent> inventory, IList<Item> actualInventory, int x, int y,
bool giveExtraDetails = false, int hoverPrice = -1, int extraItemToShowIndex = -1, int extraItemToShowAmount = -1,
bool handleHighlightedItem = false, String highlightedItemPrefix = "", String highlightedItemSuffix = "")
{ {
for (int i = 0; i < inventory.Count; i++) for (int i = 0; i < inventory.Count; i++)
{ {
@ -20,11 +33,15 @@ namespace stardew_access.Patches
// For empty slot // For empty slot
checkAndSpeak("Empty Slot", i); checkAndSpeak("Empty Slot", i);
prevSlotIndex = i; prevSlotIndex = i;
return true; return i;
} }
string toSpeak = ""; string toSpeak = "";
string name = $"{actualInventory[i].DisplayName}{handleUnHighlightedItem(inventoryMenu.highlightMethod(actualInventory[i]), i)}"; bool isHighlighted = inventoryMenu.highlightMethod(actualInventory[i]);
string namePrefix = handleHighlightedItemPrefix(isHighlighted, highlightedItemPrefix);
string nameSuffix = $"{handleHighlightedItemSuffix(isHighlighted, highlightedItemSuffix)}{handleUnHighlightedItem(isHighlighted, i)}";
string name = $"{namePrefix}{actualInventory[i].DisplayName}{nameSuffix}";
int stack = actualInventory[i].Stack; int stack = actualInventory[i].Stack;
string quality = getQualityFromItem(actualInventory[i]); string quality = getQualityFromItem(actualInventory[i]);
string healthNStamine = getHealthNStaminaFromItem(actualInventory[i]); string healthNStamine = getHealthNStaminaFromItem(actualInventory[i]);
@ -51,11 +68,11 @@ namespace stardew_access.Patches
checkAndSpeak(toSpeak, i); checkAndSpeak(toSpeak, i);
prevSlotIndex = i; prevSlotIndex = i;
return true; return i;
} }
// If no slot is hovered // If no slot is hovered
return false; return -999;
} }
private static void checkAndSpeak(String toSpeak, int hoveredInventoryIndex) private static void checkAndSpeak(String toSpeak, int hoveredInventoryIndex)
@ -158,6 +175,20 @@ namespace stardew_access.Patches
return $"Sell Price: {price} g"; return $"Sell Price: {price} g";
} }
private static String handleHighlightedItemPrefix(bool isHighlighted, String prefix)
{
if (!isHighlighted) return "";
return prefix;
}
private static String handleHighlightedItemSuffix(bool isHighlighted, String suffix)
{
if (!isHighlighted) return "";
return suffix;
}
private static String handleUnHighlightedItem(bool isHighlighted, int hoveredInventoryIndex) private static String handleUnHighlightedItem(bool isHighlighted, int hoveredInventoryIndex)
{ {
if (isHighlighted) return ""; if (isHighlighted) return "";

View File

@ -129,37 +129,40 @@ namespace stardew_access.Patches
} }
else else
{ {
for (int i = 0; i < __instance.inventory.inventory.Count; i++) if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y))
{
if (!__instance.inventory.inventory[i].containsPoint(x, y))
continue;
if (__instance.inventory.actualInventory[i] == null)
toSpeak = "Empty slot";
else
{
toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}";
if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i]))
{
toSpeak = $"{toSpeak} not usable here";
}
if (prevSlotIndex != i)
{
prevSlotIndex = i;
Game1.playSound("invalid-selection");
}
}
if (forgeMenuQuery != $"{toSpeak}:{i}")
{
forgeMenuQuery = $"{toSpeak}:{i}";
MainClass.ScreenReader.Say(toSpeak, true);
}
return; return;
}
// for (int i = 0; i < __instance.inventory.inventory.Count; i++)
// {
// if (!__instance.inventory.inventory[i].containsPoint(x, y))
// continue;
//
// if (__instance.inventory.actualInventory[i] == null)
// toSpeak = "Empty slot";
// else
// {
// toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}";
//
// if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i]))
// {
// toSpeak = $"{toSpeak} not usable here";
// }
//
// if (prevSlotIndex != i)
// {
// prevSlotIndex = i;
// Game1.playSound("invalid-selection");
// }
// }
//
// if (forgeMenuQuery != $"{toSpeak}:{i}")
// {
// forgeMenuQuery = $"{toSpeak}:{i}";
// MainClass.ScreenReader.Say(toSpeak, true);
// }
//
// return;
// }
} }
@ -300,40 +303,9 @@ namespace stardew_access.Patches
if (Game1.player.pantsItem.Value != null) if (Game1.player.pantsItem.Value != null)
toSpeak = $"{toSpeak}: {Game1.player.pantsItem.Value.DisplayName}"; toSpeak = $"{toSpeak}: {Game1.player.pantsItem.Value.DisplayName}";
} }
else
{
for (int i = 0; i < __instance.inventory.inventory.Count; i++)
{
if (!__instance.inventory.inventory[i].containsPoint(x, y))
continue;
if (__instance.inventory.actualInventory[i] == null)
toSpeak = "Empty slot";
else
{
toSpeak = $"{__instance.inventory.actualInventory[i].Stack} {__instance.inventory.actualInventory[i].DisplayName}";
if (!__instance.inventory.highlightMethod(__instance.inventory.actualInventory[i]))
{
toSpeak = $"{toSpeak} not usable here";
}
if (prevSlotIndex != i)
{
prevSlotIndex = i;
Game1.playSound("invalid-selection");
}
}
if (tailoringMenuQuery != $"{toSpeak}:{i}")
{
tailoringMenuQuery = $"{toSpeak}:{i}";
MainClass.ScreenReader.Say(toSpeak, true);
}
if (InventoryUtils.narrateHoveredSlot(__instance.inventory, __instance.inventory.inventory, __instance.inventory.actualInventory, x, y))
return; return;
}
}
if (tailoringMenuQuery != toSpeak) if (tailoringMenuQuery != toSpeak)