public void SelectQuest(Quest quest, bool selectOnLeftPage = true) { // open book if not open. if (!(SpiritMod.Instance.BookUserInterface.CurrentState is QuestBookUI)) { QuestManager.SetBookState(true); } // this is here for external quest book openings. if (selectOnLeftPage) { _questSectionIndex = quest.IsCompleted ? 2 : (quest.IsActive ? 1 : 0); _questFilterIndex = 0; for (int i = 0; i < _allQuestButtons.Length; i++) { if (_allQuestButtons[i].MyQuest == quest) { _selectedQuestIndex = i; break; } } UpdateList(); _questList.Goto((UIElement el) => (el is UISelectableQuest q) && q.MyQuest == quest); ButtonArraySelect(_questSectionIndex, _questSectionButtons); ButtonArraySelect(_questFilterIndex, _questFilterButtons); ButtonArraySelect(_selectedQuestIndex, _allQuestButtons); } _interactionWarningText.Text = ""; _showingWarning = false; // show the undiscovered page. if (!quest.IsUnlocked) { _questTitleText.Scale = 0.47f; _questTitleText.Text = "This quest hasn't been discovered."; _questTitleText.Top.Set(-28f, 0.5f); _questImage.Texture = null; _questClientText.Text = ""; _questCategoryText.Text = ""; _questObjectivesText.Text = ""; _questClientTitle.Text = ""; _questObjectivesTitle.Text = ""; _questRewardsTitle.Text = ""; _questRewardList.Clear(); _questObjectivesPageText.Top.Set(-1000000f, 0f); UpdateArrows(0, -20); _obnoxiousTutorialGlow.Texture = null; // just move this off screen _questInteractButton.Left.Set(-1000000f, 0f); foreach (UISolid solid in _rightPageLines) { solid.Color = Color.Transparent; } return; } foreach (UISolid solid in _rightPageLines) { solid.Color = new Color(102, 86, 67); } if (quest.RewardsGiven) { // just move this off screen _questInteractButton.Left.Set(-1000000f, 0f); } else { // bring the interact button back to the screen if it's gone _questInteractButton.Left.Set(-110f, 1f); } quest.UpdateBookOverlay(_bookOverlay); _obnoxiousTutorialGlow.Texture = (quest.TutorialActivateButton && !quest.IsActive && !quest.RewardsGiven) ? Main.blackTileTexture : null; _questTitleText.Top.Set(-8f, 0f); // TODO: Automate the scaling here: _questTitleText.Text = quest.QuestName; float titleWidth = _questTitleText.Font.MeasureString(_questTitleText.Text).X; float scale = 0.8f; if (titleWidth >= 416.25f) { scale = 0.8f * (416.25f / titleWidth); } _questTitleText.Scale = scale; _questObjectivesTitle.Text = "Objectives"; _questRewardsTitle.Text = "Rewards"; _questImage.Texture = quest.QuestImage; _questInteractText.Text = quest.IsCompleted ? "Claim rewards!" : (quest.IsActive ? "Deactivate" : "Activate"); _questClientTitle.Text = "Client - " + quest.QuestClient; _questClientText.Text = quest.QuestDescription; _questClientText.UpdateText(); var category = QuestManager.GetCategoryInfo(quest.QuestCategory); _questCategoryText.Text = category.Name; _questCategoryText.Colour = category.Color; _questObjectivesText.Page = 0; _questObjectivesText.Text = quest.GetObjectivesBook(); _questObjectivesPageText.Top.Set(188f, 0f); UpdateArrows(_questObjectivesText.Page, _questObjectivesText.MaxPage); _questRewardList.Clear(); if (quest.QuestRewards != null) { foreach (var reward in quest.QuestRewards) { _questRewardList.Add(new UIRewardItem(reward.Item1, reward.Item2)); } } // pick a "random" mask int maskIndex = (quest.QuestName.Length * quest.QuestDescription.Length) % _imageMasks.Length; _questImage.Effect.Parameters["AlphaMaskTexture"].SetValue(_imageMasks[maskIndex]); SelectedQuest = quest; }