using System; using System.Collections.Generic; using System.Linq; using Dalamud.Bindings.ImGui; using Dalamud.Interface.Colors; using Dalamud.Interface.Utility.Raii; using Questionable.Controller; using Questionable.Data; using Questionable.Functions; using Questionable.Model; using Questionable.Model.Questing; using Questionable.Windows.QuestComponents; namespace Questionable.Windows.JournalComponents; internal sealed class AlliedSocietyJournalComponent { private static readonly string[] RankNames = new string[8] { "Neutral", "Recognized", "Friendly", "Trusted", "Respected", "Honored", "Sworn", "Allied" }; private readonly AlliedSocietyQuestFunctions _alliedSocietyQuestFunctions; private readonly QuestData _questData; private readonly QuestRegistry _questRegistry; private readonly QuestJournalUtils _questJournalUtils; private readonly QuestTooltipComponent _questTooltipComponent; private readonly UiUtils _uiUtils; public AlliedSocietyJournalComponent(AlliedSocietyQuestFunctions alliedSocietyQuestFunctions, QuestData questData, QuestRegistry questRegistry, QuestJournalUtils questJournalUtils, QuestTooltipComponent questTooltipComponent, UiUtils uiUtils) { _alliedSocietyQuestFunctions = alliedSocietyQuestFunctions; _questData = questData; _questRegistry = questRegistry; _questJournalUtils = questJournalUtils; _questTooltipComponent = questTooltipComponent; _uiUtils = uiUtils; } public void DrawAlliedSocietyQuests() { using ImRaii.IEndObject endObject = ImRaii.TabItem("Allied Societies"); if (!endObject) { return; } foreach (EAlliedSociety item in from x in Enum.GetValues() where x != EAlliedSociety.None select x) { List list = (from x in _alliedSocietyQuestFunctions.GetAvailableAlliedSocietyQuests(item) select (QuestInfo)_questData.GetQuestInfo(x)).ToList(); if (list.Count == 0 || !ImGui.CollapsingHeader($"{item}###AlliedSociety{item}")) { continue; } if ((int)item <= 5) { byte i = 1; while (i <= 8) { List list2 = list.Where((QuestInfo x) => x.AlliedSocietyRank == i).ToList(); if (list2.Count != 0) { ImGui.Text(RankNames[i - 1]); foreach (QuestInfo item2 in list2) { DrawQuest(item2); } } byte b = (byte)(i + 1); i = b; } continue; } foreach (QuestInfo item3 in list) { DrawQuest(item3); } } } private void DrawQuest(QuestInfo questInfo) { var (color, icon, value) = _uiUtils.GetQuestStyle(questInfo.QuestId); if (!_questRegistry.TryGetQuest(questInfo.QuestId, out Quest quest) || quest.Root.Disabled) { color = ImGuiColors.DalamudGrey; } string text = $"{questInfo.Name} ({value}) [{questInfo.QuestId}]"; if (_uiUtils.ChecklistItem(text, color, icon)) { _questTooltipComponent.Draw(questInfo); } _questJournalUtils.ShowContextMenu(questInfo, quest, "AlliedSocietyJournalComponent"); } }