qstbak/Questionable/Questionable.Windows.JournalComponents/AlliedSocietyJournalComponent.cs
2025-10-10 10:13:06 +10:00

99 lines
2.9 KiB
C#

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<EAlliedSociety>()
where x != EAlliedSociety.None
select x)
{
List<QuestInfo> 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<QuestInfo> 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");
}
}