public bool NeedsScroll() { if (_shownQuest != null && _shownQuest.ShouldDisplayAsComplete()) { return(false); } if (questPage != -1) { return(_contentHeight > _scissorRectHeight); } return(false); }
internal static void QuestLogPatch(QuestLog __instance, int ___questPage, List <List <IQuest> > ___pages, int ___currentPage, IQuest ____shownQuest, List <string> ____objectiveText) { try { bool isCPressed = MainClass.Config.PrimaryInfoKey.JustPressed(); int x = Game1.getMouseX(true), y = Game1.getMouseY(true); // Mouse x and y position string toSpeak = " ", extra = ""; if (___questPage == -1) { #region Quest Lists if (!firstTimeInIndividualQuest) { firstTimeInIndividualQuest = true; } for (int i = 0; i < __instance.questLogButtons.Count; i++) { if (___pages.Count() > 0 && ___pages[___currentPage].Count() > i) { if (!__instance.questLogButtons[i].containsPoint(x, y)) { continue; } string name = ___pages[___currentPage][i].GetName(); int daysLeft = ___pages[___currentPage][i].GetDaysLeft(); toSpeak = $"{name}"; if (daysLeft > 0 && ___pages[___currentPage][i].ShouldDisplayAsComplete()) { toSpeak += $"\t\n {daysLeft} days left"; } toSpeak += ___pages[___currentPage][i].ShouldDisplayAsComplete() ? " completed!" : ""; break; } } if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y)) { toSpeak = "Previous page button"; } else if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y)) { toSpeak = "Next page button"; } else if (__instance.upperRightCloseButton != null && __instance.upperRightCloseButton.visible && __instance.upperRightCloseButton.containsPoint(x, y)) { toSpeak = "Close menu button"; } if (questLogQuery != toSpeak) { questLogQuery = toSpeak; MainClass.ScreenReader.Say(toSpeak, true); } #endregion } else { #region Individual quest bool containsReward = __instance.HasReward() || __instance.HasMoneyReward(); string description = Game1.parseText(____shownQuest.GetDescription(), Game1.dialogueFont, __instance.width - 128); string title = ____shownQuest.GetName(); if (firstTimeInIndividualQuest || (isCPressed && !isNarratingQuestInfo)) { if (firstTimeInIndividualQuest) { toSpeak = "Back button"; } if (____shownQuest.ShouldDisplayAsComplete()) { #region Quest completed menu extra = $"Quest: {title} Completed!"; if (__instance.HasMoneyReward()) { extra += $"you recieved {____shownQuest.GetMoneyReward()}g"; } #endregion } else { #region Quest in-complete menu extra = $"Title: {title}. \t\n Description: {description}"; for (int j = 0; j < ____objectiveText.Count; j++) { string parsed_text = Game1.parseText(____objectiveText[j], width: __instance.width - 192, whichFont: Game1.dialogueFont); if (____shownQuest != null && ____shownQuest is SpecialOrder) { OrderObjective order_objective = ((SpecialOrder)____shownQuest).objectives[j]; if (order_objective.GetMaxCount() > 1 && order_objective.ShouldShowProgress()) { parsed_text += "\n\t" + order_objective.GetCount() + " of " + order_objective.GetMaxCount() + " completed"; } } extra += $"\t\nOrder {j + 1}: {parsed_text} \t\n"; } if (____shownQuest != null) { int daysLeft = ____shownQuest.GetDaysLeft(); if (daysLeft > 0) { extra += $"\t\n{daysLeft} days left."; } } #endregion } isNarratingQuestInfo = true; Task.Delay(200).ContinueWith(_ => { isNarratingQuestInfo = false; }); questLogQuery = " "; } if (!firstTimeInIndividualQuest) { if (__instance.backButton != null && __instance.backButton.visible && __instance.backButton.containsPoint(x, y)) { toSpeak = (___currentPage > 0) ? "Previous page button" : "Back button"; } else if (__instance.forwardButton != null && __instance.forwardButton.visible && __instance.forwardButton.containsPoint(x, y)) { toSpeak = "Next page button"; } else if (__instance.cancelQuestButton != null && __instance.cancelQuestButton.visible && __instance.cancelQuestButton.containsPoint(x, y)) { toSpeak = "Cancel quest button"; } else if (__instance.upperRightCloseButton != null && __instance.upperRightCloseButton.visible && __instance.upperRightCloseButton.containsPoint(x, y)) { toSpeak = "Close menu button"; } else if (containsReward && __instance.rewardBox.containsPoint(x, y)) { toSpeak = "Left click to collect reward"; } } if (firstTimeInIndividualQuest || (questLogQuery != toSpeak)) { questLogQuery = toSpeak; MainClass.ScreenReader.Say(extra + " \n\t" + toSpeak, true); if (firstTimeInIndividualQuest) { firstTimeInIndividualQuest = false; } } #endregion } } catch (Exception e) { MainClass.ErrorLog($"Unable to narrate Text:\n{e.Message}\n{e.StackTrace}"); } }