1
0
Fork 0
forked from aly/qstbak
qstbak/Questionable/Questionable.Windows/UiUtils.cs
2026-08-17 20:29:32 +10:00

111 lines
3.9 KiB
C#

using System.Numerics;
using Dalamud.Bindings.ImGui;
using Dalamud.Interface;
using Dalamud.Interface.Colors;
using Dalamud.Plugin;
using FFXIVClientStructs.FFXIV.Client.Game.UI;
using Questionable.Controller;
using Questionable.Functions;
using Questionable.Model.Questing;
namespace Questionable.Windows;
internal sealed class UiUtils
{
private readonly QuestFunctions _questFunctions;
private readonly QuestRegistry _questRegistry;
private readonly IDalamudPluginInterface _pluginInterface;
public UiUtils(QuestFunctions questFunctions, QuestRegistry questRegistry, IDalamudPluginInterface pluginInterface)
{
_questFunctions = questFunctions;
_questRegistry = questRegistry;
_pluginInterface = pluginInterface;
}
public (Vector4 Color, FontAwesomeIcon Icon, string Status) GetQuestStyle(ElementId elementId)
{
if (_questFunctions.IsQuestAccepted(elementId))
{
return (Color: UiThemeUtils.StatusActive, Icon: FontAwesomeIcon.PersonWalkingArrowRight, Status: "Active");
}
if (elementId is QuestId questId && _questFunctions.IsDailyAlliedSocietyQuestAndAvailableToday(questId))
{
if (_questFunctions.IsQuestBlacklisted(questId))
{
return (Color: UiThemeUtils.StatusBlacklisted, Icon: FontAwesomeIcon.Ban, Status: "Blacklisted");
}
if (!_questFunctions.IsReadyToAcceptQuest(questId))
{
return (Color: UiThemeUtils.StatusComplete, Icon: FontAwesomeIcon.Check, Status: "Complete");
}
if (_questFunctions.IsQuestComplete(questId))
{
return (Color: UiThemeUtils.StatusAvailableComplete, Icon: FontAwesomeIcon.Running, Status: "Available (Complete)");
}
return (Color: UiThemeUtils.StatusAvailable, Icon: FontAwesomeIcon.Running, Status: "Available");
}
if (_questFunctions.IsQuestAcceptedOrComplete(elementId))
{
return (Color: UiThemeUtils.StatusComplete, Icon: FontAwesomeIcon.Check, Status: "Complete");
}
if (_questFunctions.IsQuestUnobtainable(elementId))
{
return (Color: UiThemeUtils.StatusUnobtainable, Icon: FontAwesomeIcon.Minus, Status: "Unobtainable");
}
if (_questFunctions.IsQuestBlacklisted(elementId))
{
return (Color: UiThemeUtils.StatusBlacklisted, Icon: FontAwesomeIcon.Ban, Status: "Blacklisted");
}
if (_questFunctions.IsQuestLocked(elementId) || !_questFunctions.IsReadyToAcceptQuest(elementId) || !_questRegistry.IsKnownQuest(elementId))
{
return (Color: UiThemeUtils.StatusLocked, Icon: FontAwesomeIcon.Times, Status: "Locked");
}
return (Color: UiThemeUtils.StatusAvailable, Icon: FontAwesomeIcon.Running, Status: "Available");
}
public static (Vector4 color, FontAwesomeIcon icon) GetInstanceStyle(ushort instanceId)
{
if (UIState.IsInstanceContentCompleted(instanceId))
{
return (color: UiThemeUtils.StatusComplete, icon: FontAwesomeIcon.Check);
}
if (UIState.IsInstanceContentUnlocked(instanceId))
{
return (color: UiThemeUtils.StatusActive, icon: FontAwesomeIcon.Running);
}
return (color: UiThemeUtils.StatusLocked, icon: FontAwesomeIcon.Times);
}
public bool ChecklistItem(string text, Vector4 color, FontAwesomeIcon icon, float extraPadding = 0f, bool asBadge = false)
{
if (asBadge)
{
UiThemeUtils.StatusBadge(text, color, icon);
return ImGui.IsItemHovered();
}
if (extraPadding > 0f)
{
ImGui.SetCursorPosX(ImGui.GetCursorPosX() + extraPadding);
}
using (_pluginInterface.UiBuilder.IconFontFixedWidthHandle.Push())
{
ImGui.TextColored(in color, icon.ToIconString());
}
bool num = ImGui.IsItemHovered();
ImGui.SameLine();
if (extraPadding > 0f)
{
ImGui.SetCursorPosX(ImGui.GetCursorPosX() + extraPadding);
}
ImGui.TextUnformatted(text);
return num | ImGui.IsItemHovered();
}
public bool ChecklistItem(string text, bool complete, Vector4? colorOverride = null)
{
return ChecklistItem(text, colorOverride ?? (complete ? ImGuiColors.ParsedGreen : ImGuiColors.DalamudRed), complete ? FontAwesomeIcon.Check : FontAwesomeIcon.Times);
}
}