mirror of
https://github.com/Ottermandias/Glamourer.git
synced 2025-12-12 10:17:23 +01:00
103 lines
4.1 KiB
C#
103 lines
4.1 KiB
C#
using Dalamud.Interface.Utility;
|
|
using Glamourer.Interop.Penumbra;
|
|
using Dalamud.Bindings.ImGui;
|
|
using OtterGui;
|
|
using OtterGui.Raii;
|
|
using Penumbra.Api.Enums;
|
|
using Penumbra.GameData.Enums;
|
|
using Penumbra.GameData.Gui.Debug;
|
|
using Penumbra.GameData.Interop;
|
|
using Penumbra.GameData.Structs;
|
|
|
|
namespace Glamourer.Gui.Tabs.DebugTab;
|
|
|
|
public unsafe class PenumbraPanel(PenumbraService _penumbra, PenumbraChangedItemTooltip _penumbraTooltip) : IGameDataDrawer
|
|
{
|
|
public string Label
|
|
=> "Penumbra Interop";
|
|
|
|
public bool Disabled
|
|
=> false;
|
|
|
|
private int _gameObjectIndex;
|
|
private Model _drawObject = Model.Null;
|
|
|
|
public void Draw()
|
|
{
|
|
using var table = ImRaii.Table("##PenumbraTable", 3, ImGuiTableFlags.SizingFixedFit | ImGuiTableFlags.RowBg);
|
|
if (!table)
|
|
return;
|
|
|
|
ImGuiUtil.DrawTableColumn("Available");
|
|
ImGuiUtil.DrawTableColumn(_penumbra.Available.ToString());
|
|
ImGui.TableNextColumn();
|
|
if (ImGui.SmallButton("Unattach"))
|
|
_penumbra.Unattach();
|
|
ImGui.SameLine();
|
|
if (ImGui.SmallButton("Reattach"))
|
|
_penumbra.Reattach();
|
|
|
|
ImGuiUtil.DrawTableColumn("Version");
|
|
ImGuiUtil.DrawTableColumn($"{_penumbra.CurrentMajor}.{_penumbra.CurrentMinor}");
|
|
ImGui.TableNextColumn();
|
|
|
|
ImGuiUtil.DrawTableColumn("Attached When");
|
|
ImGuiUtil.DrawTableColumn(_penumbra.AttachTime.ToLocalTime().ToLongTimeString());
|
|
ImGui.TableNextColumn();
|
|
|
|
ImGuiUtil.DrawTableColumn("Draw Object");
|
|
ImGui.TableNextColumn();
|
|
var address = _drawObject.Address;
|
|
ImGui.SetNextItemWidth(200 * ImGuiHelpers.GlobalScale);
|
|
if (ImGui.InputScalar("##drawObjectPtr", ImGuiDataType.U64, ref address, nint.Zero, nint.Zero, "%llx",
|
|
ImGuiInputTextFlags.CharsHexadecimal))
|
|
_drawObject = address;
|
|
ImGuiUtil.DrawTableColumn(_penumbra.Available
|
|
? $"0x{_penumbra.GameObjectFromDrawObject(_drawObject).Address:X}"
|
|
: "Penumbra Unavailable");
|
|
|
|
ImGuiUtil.DrawTableColumn("Cutscene Object");
|
|
ImGui.TableNextColumn();
|
|
ImGui.SetNextItemWidth(200 * ImGuiHelpers.GlobalScale);
|
|
ImGui.InputInt("##CutsceneIndex", ref _gameObjectIndex, 0, 0);
|
|
ImGuiUtil.DrawTableColumn(_penumbra.Available
|
|
? _penumbra.CutsceneParent((ushort)_gameObjectIndex).ToString()
|
|
: "Penumbra Unavailable");
|
|
|
|
ImGuiUtil.DrawTableColumn("Redraw Object");
|
|
ImGui.TableNextColumn();
|
|
ImGui.SetNextItemWidth(200 * ImGuiHelpers.GlobalScale);
|
|
ImGui.InputInt("##redrawObject", ref _gameObjectIndex, 0, 0);
|
|
ImGui.TableNextColumn();
|
|
using (_ = ImRaii.Disabled(!_penumbra.Available))
|
|
{
|
|
if (ImGui.SmallButton("Redraw"))
|
|
_penumbra.RedrawObject((ObjectIndex)_gameObjectIndex, RedrawType.Redraw);
|
|
}
|
|
|
|
ImGuiUtil.DrawTableColumn("Last Tooltip Date");
|
|
ImGuiUtil.DrawTableColumn(_penumbraTooltip.LastTooltip > DateTime.MinValue
|
|
? $"{_penumbraTooltip.LastTooltip.ToLongTimeString()} ({_penumbraTooltip.LastType} {_penumbraTooltip.LastId})"
|
|
: "Never");
|
|
ImGui.TableNextColumn();
|
|
|
|
ImGuiUtil.DrawTableColumn("Last Click Date");
|
|
ImGuiUtil.DrawTableColumn(_penumbraTooltip.LastClick > DateTime.MinValue ? _penumbraTooltip.LastClick.ToLongTimeString() : "Never");
|
|
ImGui.TableNextColumn();
|
|
|
|
ImGui.Separator();
|
|
ImGui.Separator();
|
|
foreach (var (slot, item) in _penumbraTooltip.LastItems)
|
|
{
|
|
switch (slot)
|
|
{
|
|
case EquipSlot e: ImGuiUtil.DrawTableColumn($"{e.ToName()} Revert-Item"); break;
|
|
case BonusItemFlag f: ImGuiUtil.DrawTableColumn($"{f.ToName()} Revert-Item"); break;
|
|
default: ImGuiUtil.DrawTableColumn("Unk Revert-Item"); break;
|
|
}
|
|
|
|
ImGuiUtil.DrawTableColumn(item.Valid ? item.Name : "None");
|
|
ImGui.TableNextColumn();
|
|
}
|
|
}
|
|
}
|