Improved and organised code in carpenter menu patch

master
Mohammad Shoaib Khan 2023-03-07 22:45:00 +05:30
parent baede57965
commit 6141447c13
No known key found for this signature in database
GPG Key ID: D8040D966320B620
1 changed files with 87 additions and 119 deletions

View File

@ -29,138 +29,27 @@ namespace stardew_access.Patches
isMoving = false; isMoving = false;
isConstructing = false; isConstructing = false;
#region The blueprint menu BluePrint currentBlueprint = __instance.CurrentBlueprint;
BluePrint currentBluprint = __instance.CurrentBlueprint; if (currentBlueprint == null)
if (currentBluprint == null)
return; 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(); bool isPrimaryInfoKeyPressed = MainClass.Config.PrimaryInfoKey.JustPressed();
string ingredients = ""; string blueprintInfo = getCurrentBlueprintInfo(currentBlueprint, ___price, ___ingredients);
string name = currentBluprint.displayName;
string upgradeName = currentBluprint.nameOfBuildingToUpgrade;
string description = currentBluprint.description;
string price = $"{___price}g";
string blueprintInfo;
int width = currentBluprint.tilesWidth;
int height = currentBluprint.tilesHeight;
#region Get ingredients
for (int i = 0; i < ___ingredients.Count; i++)
{
string itemName = ___ingredients[i].DisplayName;
int itemStack = ___ingredients[i].Stack;
string itemQuality = "";
int qualityValue = ((StardewValley.Object)___ingredients[i]).Quality;
if (qualityValue == 1)
{
itemQuality = "Silver quality";
}
else if (qualityValue == 2 || qualityValue == 3)
{
itemQuality = "Gold quality";
}
else if (qualityValue >= 4)
{
itemQuality = "Iridium quality";
}
ingredients = $"{ingredients}, {itemStack} {itemName} {itemQuality}";
}
#endregion
blueprintInfo = $"{name}, Price: {price}, Ingredients: {ingredients}, Dimensions: {width} width and {height} height, Description: {description}";
if (isPrimaryInfoKeyPressed && !isSayingBlueprintInfo) if (isPrimaryInfoKeyPressed && !isSayingBlueprintInfo)
{ {
SayBlueprintInfo(blueprintInfo); SpeakAndWait(blueprintInfo);
} }
else if (prevBlueprintInfo != blueprintInfo) else if (prevBlueprintInfo != blueprintInfo)
{ {
prevBlueprintInfo = blueprintInfo; prevBlueprintInfo = blueprintInfo;
SayBlueprintInfo(blueprintInfo); SpeakAndWait(blueprintInfo);
} }
else else
{ {
if (__instance.backButton != null && __instance.backButton.containsPoint(x, y)) narrateHoveredButton(__instance, ___blueprints, ___currentBlueprintIndex, x, y);
{
string toSpeak = "Previous Blueprint";
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.forwardButton != null && __instance.forwardButton.containsPoint(x, y))
{
string toSpeak = "Next Blueprint";
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.demolishButton != null && __instance.demolishButton.containsPoint(x, y))
{
string toSpeak = $"Demolish Building" + (__instance.CanDemolishThis(___blueprints[___currentBlueprintIndex]) ? "" : ", cannot demolish building");
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.okButton != null && __instance.okButton.containsPoint(x, y))
{
string toSpeak = "Construct Building" + (___blueprints[___currentBlueprintIndex].doesFarmerHaveEnoughResourcesToBuild() ? "" : ", cannot cunstrut building, not enough resources to build.");
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.moveButton != null && __instance.moveButton.containsPoint(x, y))
{
string toSpeak = "Move Building";
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.paintButton != null && __instance.paintButton.containsPoint(x, y))
{
string toSpeak = "Paint Building";
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
if (__instance.cancelButton != null && __instance.cancelButton.containsPoint(x, y))
{
string toSpeak = "Cancel Button";
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
return;
}
} }
#endregion
} }
else else
{ {
@ -182,14 +71,93 @@ namespace stardew_access.Patches
} }
} }
private static async void SayBlueprintInfo(string info) private static string getCurrentBlueprintInfo(BluePrint currentBlueprint, int ___price, List<Item> ___ingredients)
{
string ingredients = "";
string name = currentBlueprint.displayName;
string upgradeName = currentBlueprint.nameOfBuildingToUpgrade;
string description = currentBlueprint.description;
string price = $"{___price}g";
int width = currentBlueprint.tilesWidth;
int height = currentBlueprint.tilesHeight;
#region Get ingredients
for (int i = 0; i < ___ingredients.Count; i++)
{
string itemName = ___ingredients[i].DisplayName;
int itemStack = ___ingredients[i].Stack;
string itemQuality = "";
int qualityValue = ((StardewValley.Object)___ingredients[i]).Quality;
if (qualityValue == 1)
{
itemQuality = "Silver quality";
}
else if (qualityValue == 2 || qualityValue == 3)
{
itemQuality = "Gold quality";
}
else if (qualityValue >= 4)
{
itemQuality = "Iridium quality";
}
ingredients = $"{ingredients}, {itemStack} {itemName} {itemQuality}";
}
#endregion
return $"{name}, Price: {price}, Ingredients: {ingredients}, Dimensions: {width} width and {height} height, Description: {description}";
}
private static async void SpeakAndWait(string toSpeak)
{ {
isSayingBlueprintInfo = true; isSayingBlueprintInfo = true;
MainClass.ScreenReader.Say(info, true); MainClass.ScreenReader.Say(toSpeak, true);
await Task.Delay(300); await Task.Delay(300);
isSayingBlueprintInfo = false; isSayingBlueprintInfo = false;
} }
private static void narrateHoveredButton(CarpenterMenu __instance, List<BluePrint> ___blueprints, int ___currentBlueprintIndex, int x, int y)
{
string toSpeak = "";
if (__instance.backButton != null && __instance.backButton.containsPoint(x, y))
{
toSpeak = "Previous Blueprint";
}
else if (__instance.forwardButton != null && __instance.forwardButton.containsPoint(x, y))
{
toSpeak = "Next Blueprint";
}
else if (__instance.demolishButton != null && __instance.demolishButton.containsPoint(x, y))
{
toSpeak = $"Demolish Building" + (__instance.CanDemolishThis(___blueprints[___currentBlueprintIndex]) ? "" : ", cannot demolish building");
}
else if (__instance.okButton != null && __instance.okButton.containsPoint(x, y))
{
toSpeak = "Construct Building" + (___blueprints[___currentBlueprintIndex].doesFarmerHaveEnoughResourcesToBuild() ? "" : ", cannot cunstrut building, not enough resources to build.");
}
else if (__instance.moveButton != null && __instance.moveButton.containsPoint(x, y))
{
toSpeak = "Move Building";
}
else if (__instance.paintButton != null && __instance.paintButton.containsPoint(x, y))
{
toSpeak = "Paint Building";
}
else if (__instance.cancelButton != null && __instance.cancelButton.containsPoint(x, y))
{
toSpeak = "Cancel Button";
}
else
{
return;
}
if (carpenterMenuQuery != toSpeak)
{
carpenterMenuQuery = toSpeak;
MainClass.ScreenReader.Say(toSpeak, true);
}
}
} }
} }