mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 10:17:22 +01:00
Rework FateTableWidget (#1988)
* Rework FateTableWidget * Maybe better FateTable column order * Add Icon, MapIcon and Radius column
This commit is contained in:
parent
a5fa109afa
commit
731c0b7c6d
1 changed files with 137 additions and 26 deletions
|
|
@ -1,4 +1,7 @@
|
|||
using Dalamud.Game.ClientState.Fates;
|
||||
using Dalamud.Game.ClientState.Fates;
|
||||
using Dalamud.Interface.Textures.Internal;
|
||||
using Dalamud.Interface.Utility;
|
||||
using Dalamud.Interface.Utility.Raii;
|
||||
|
||||
using ImGuiNET;
|
||||
|
||||
|
|
@ -9,8 +12,6 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
|
|||
/// </summary>
|
||||
internal class FateTableWidget : IDataWindowWidget
|
||||
{
|
||||
private bool resolveGameData;
|
||||
|
||||
/// <inheritdoc/>
|
||||
public string[]? CommandShortcuts { get; init; } = { "fate", "fatetable" };
|
||||
|
||||
|
|
@ -29,44 +30,154 @@ internal class FateTableWidget : IDataWindowWidget
|
|||
/// <inheritdoc/>
|
||||
public void Draw()
|
||||
{
|
||||
ImGui.Checkbox("Resolve GameData", ref this.resolveGameData);
|
||||
|
||||
var fateTable = Service<FateTable>.Get();
|
||||
var textureManager = Service<TextureManager>.Get();
|
||||
|
||||
var stateString = string.Empty;
|
||||
if (fateTable.Length == 0)
|
||||
{
|
||||
ImGui.TextUnformatted("No fates or data not ready.");
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
using var table = ImRaii.Table("FateTable", 13, ImGuiTableFlags.ScrollY | ImGuiTableFlags.RowBg | ImGuiTableFlags.Borders | ImGuiTableFlags.NoSavedSettings);
|
||||
if (!table) return;
|
||||
|
||||
ImGui.TableSetupColumn("Index", ImGuiTableColumnFlags.WidthFixed, 40);
|
||||
ImGui.TableSetupColumn("Address", ImGuiTableColumnFlags.WidthFixed, 120);
|
||||
ImGui.TableSetupColumn("FateId", ImGuiTableColumnFlags.WidthFixed, 40);
|
||||
ImGui.TableSetupColumn("State", ImGuiTableColumnFlags.WidthFixed, 80);
|
||||
ImGui.TableSetupColumn("Level", ImGuiTableColumnFlags.WidthFixed, 50);
|
||||
ImGui.TableSetupColumn("Icon", ImGuiTableColumnFlags.WidthFixed, 30);
|
||||
ImGui.TableSetupColumn("MapIcon", ImGuiTableColumnFlags.WidthFixed, 30);
|
||||
ImGui.TableSetupColumn("Name", ImGuiTableColumnFlags.WidthStretch);
|
||||
ImGui.TableSetupColumn("Progress", ImGuiTableColumnFlags.WidthFixed, 55);
|
||||
ImGui.TableSetupColumn("Duration", ImGuiTableColumnFlags.WidthFixed, 80);
|
||||
ImGui.TableSetupColumn("Bonus", ImGuiTableColumnFlags.WidthFixed, 40);
|
||||
ImGui.TableSetupColumn("Position", ImGuiTableColumnFlags.WidthFixed, 240);
|
||||
ImGui.TableSetupColumn("Radius", ImGuiTableColumnFlags.WidthFixed, 40);
|
||||
ImGui.TableSetupScrollFreeze(7, 1);
|
||||
ImGui.TableHeadersRow();
|
||||
|
||||
for (var i = 0; i < fateTable.Length; i++)
|
||||
{
|
||||
stateString += $"FateTableLen: {fateTable.Length}\n";
|
||||
var fate = fateTable[i];
|
||||
if (fate == null)
|
||||
continue;
|
||||
|
||||
ImGui.TextUnformatted(stateString);
|
||||
ImGui.TableNextRow();
|
||||
ImGui.TableNextColumn(); // Index
|
||||
ImGui.TextUnformatted($"#{i}");
|
||||
|
||||
for (var i = 0; i < fateTable.Length; i++)
|
||||
ImGui.TableNextColumn(); // Address
|
||||
DrawCopyableText($"0x{fate.Address:X}", "Click to copy Address");
|
||||
|
||||
ImGui.TableNextColumn(); // FateId
|
||||
DrawCopyableText(fate.FateId.ToString(), "Click to copy FateId (RowId of Fate sheet)");
|
||||
|
||||
ImGui.TableNextColumn(); // State
|
||||
ImGui.TextUnformatted(fate.State.ToString());
|
||||
|
||||
ImGui.TableNextColumn(); // Level
|
||||
|
||||
if (fate.Level == fate.MaxLevel)
|
||||
{
|
||||
var fate = fateTable[i];
|
||||
if (fate == null)
|
||||
continue;
|
||||
ImGui.TextUnformatted($"{fate.Level}");
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui.TextUnformatted($"{fate.Level}-{fate.MaxLevel}");
|
||||
}
|
||||
|
||||
var fateString = $"{fate.Address.ToInt64():X}:[{i}]" +
|
||||
$" - Lv.{fate.Level} {fate.Name} ({fate.Progress}%)" +
|
||||
$" - X{fate.Position.X} Y{fate.Position.Y} Z{fate.Position.Z}" +
|
||||
$" - Territory {(this.resolveGameData ? (fate.TerritoryType.GameData?.Name ?? fate.TerritoryType.Id.ToString()) : fate.TerritoryType.Id.ToString())}\n";
|
||||
ImGui.TableNextColumn(); // Icon
|
||||
|
||||
fateString += $" StartTimeEpoch: {fate.StartTimeEpoch}" +
|
||||
$" - Duration: {fate.Duration}" +
|
||||
$" - State: {fate.State}" +
|
||||
$" - GameData name: {(this.resolveGameData ? (fate.GameData.Name ?? fate.FateId.ToString()) : fate.FateId.ToString())}";
|
||||
|
||||
ImGui.TextUnformatted(fateString);
|
||||
ImGui.SameLine();
|
||||
if (ImGui.Button($"C##{fate.Address.ToInt64():X}"))
|
||||
if (fate.IconId != 0)
|
||||
{
|
||||
if (textureManager.Shared.GetFromGameIcon(fate.IconId).TryGetWrap(out var texture, out _))
|
||||
{
|
||||
ImGui.SetClipboardText(fate.Address.ToString("X"));
|
||||
ImGui.Image(texture.ImGuiHandle, new(ImGui.GetTextLineHeight()));
|
||||
|
||||
if (ImGui.IsItemHovered())
|
||||
{
|
||||
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
||||
ImGui.BeginTooltip();
|
||||
ImGui.TextUnformatted("Click to copy IconId");
|
||||
ImGui.TextUnformatted($"ID: {fate.IconId} – Size: {texture.Width}x{texture.Height}");
|
||||
ImGui.Image(texture.ImGuiHandle, new(texture.Width, texture.Height));
|
||||
ImGui.EndTooltip();
|
||||
}
|
||||
|
||||
if (ImGui.IsItemClicked())
|
||||
{
|
||||
ImGui.SetClipboardText(fate.IconId.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.TableNextColumn(); // MapIconId
|
||||
|
||||
if (fate.MapIconId != 0)
|
||||
{
|
||||
if (textureManager.Shared.GetFromGameIcon(fate.MapIconId).TryGetWrap(out var texture, out _))
|
||||
{
|
||||
ImGui.Image(texture.ImGuiHandle, new(ImGui.GetTextLineHeight()));
|
||||
|
||||
if (ImGui.IsItemHovered())
|
||||
{
|
||||
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
||||
ImGui.BeginTooltip();
|
||||
ImGui.TextUnformatted("Click to copy MapIconId");
|
||||
ImGui.TextUnformatted($"ID: {fate.MapIconId} – Size: {texture.Width}x{texture.Height}");
|
||||
ImGui.Image(texture.ImGuiHandle, new(texture.Width, texture.Height));
|
||||
ImGui.EndTooltip();
|
||||
}
|
||||
|
||||
if (ImGui.IsItemClicked())
|
||||
{
|
||||
ImGui.SetClipboardText(fate.MapIconId.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.TableNextColumn(); // Name
|
||||
|
||||
DrawCopyableText(fate.Name.ToString(), "Click to copy Name");
|
||||
|
||||
ImGui.TableNextColumn(); // Progress
|
||||
ImGui.TextUnformatted($"{fate.Progress}%");
|
||||
|
||||
ImGui.TableNextColumn(); // TimeRemaining
|
||||
|
||||
if (fate.State == FateState.Running)
|
||||
{
|
||||
ImGui.TextUnformatted($"{TimeSpan.FromSeconds(fate.TimeRemaining):mm\\:ss} / {TimeSpan.FromSeconds(fate.Duration):mm\\:ss}");
|
||||
}
|
||||
|
||||
ImGui.TableNextColumn(); // HasExpBonus
|
||||
ImGui.TextUnformatted(fate.HasExpBonus.ToString());
|
||||
|
||||
ImGui.TableNextColumn(); // Position
|
||||
DrawCopyableText(fate.Position.ToString(), "Click to copy Position");
|
||||
|
||||
ImGui.TableNextColumn(); // Radius
|
||||
DrawCopyableText(fate.Radius.ToString(), "Click to copy Radius");
|
||||
}
|
||||
}
|
||||
|
||||
private static void DrawCopyableText(string text, string tooltipText)
|
||||
{
|
||||
ImGuiHelpers.SafeTextWrapped(text);
|
||||
|
||||
if (ImGui.IsItemHovered())
|
||||
{
|
||||
ImGui.SetMouseCursor(ImGuiMouseCursor.Hand);
|
||||
ImGui.BeginTooltip();
|
||||
ImGui.TextUnformatted(tooltipText);
|
||||
ImGui.EndTooltip();
|
||||
}
|
||||
|
||||
if (ImGui.IsItemClicked())
|
||||
{
|
||||
ImGui.SetClipboardText(text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue