99 lines
2.9 KiB
C#
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");
|
|
}
|
|
}
|