mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +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;
|
using ImGuiNET;
|
||||||
|
|
||||||
|
|
@ -9,8 +12,6 @@ namespace Dalamud.Interface.Internal.Windows.Data.Widgets;
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal class FateTableWidget : IDataWindowWidget
|
internal class FateTableWidget : IDataWindowWidget
|
||||||
{
|
{
|
||||||
private bool resolveGameData;
|
|
||||||
|
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public string[]? CommandShortcuts { get; init; } = { "fate", "fatetable" };
|
public string[]? CommandShortcuts { get; init; } = { "fate", "fatetable" };
|
||||||
|
|
||||||
|
|
@ -29,44 +30,154 @@ internal class FateTableWidget : IDataWindowWidget
|
||||||
/// <inheritdoc/>
|
/// <inheritdoc/>
|
||||||
public void Draw()
|
public void Draw()
|
||||||
{
|
{
|
||||||
ImGui.Checkbox("Resolve GameData", ref this.resolveGameData);
|
|
||||||
|
|
||||||
var fateTable = Service<FateTable>.Get();
|
var fateTable = Service<FateTable>.Get();
|
||||||
|
var textureManager = Service<TextureManager>.Get();
|
||||||
|
|
||||||
var stateString = string.Empty;
|
|
||||||
if (fateTable.Length == 0)
|
if (fateTable.Length == 0)
|
||||||
{
|
{
|
||||||
ImGui.TextUnformatted("No fates or data not ready.");
|
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];
|
ImGui.TextUnformatted($"{fate.Level}");
|
||||||
if (fate == null)
|
}
|
||||||
continue;
|
else
|
||||||
|
{
|
||||||
|
ImGui.TextUnformatted($"{fate.Level}-{fate.MaxLevel}");
|
||||||
|
}
|
||||||
|
|
||||||
var fateString = $"{fate.Address.ToInt64():X}:[{i}]" +
|
ImGui.TableNextColumn(); // Icon
|
||||||
$" - 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";
|
|
||||||
|
|
||||||
fateString += $" StartTimeEpoch: {fate.StartTimeEpoch}" +
|
if (fate.IconId != 0)
|
||||||
$" - Duration: {fate.Duration}" +
|
{
|
||||||
$" - State: {fate.State}" +
|
if (textureManager.Shared.GetFromGameIcon(fate.IconId).TryGetWrap(out var texture, out _))
|
||||||
$" - 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}"))
|
|
||||||
{
|
{
|
||||||
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