Initial release: HSUI v1.0.0.0 - HUD replacement with configurable hotbars

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-01-30 23:52:46 -05:00
commit f37369cdda
202 changed files with 40137 additions and 0 deletions
@@ -0,0 +1,159 @@
using Dalamud.Interface;
using Dalamud.Interface.ImGuiFileDialog;
using Dalamud.Memory.Exceptions;
using HSUI.Config;
using HSUI.Config.Attributes;
using HSUI.Enums;
using HSUI.Helpers;
using HSUI.Interface.Bars;
using Dalamud.Bindings.ImGui;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Numerics;
namespace HSUI.Interface.GeneralElements
{
[Disableable(false)]
[Section("Customization")]
[SubSection("Bar Textures", 0)]
public class BarTexturesConfig : PluginConfigObject
{
public new static BarTexturesConfig DefaultConfig() { return new BarTexturesConfig(); }
public string BarTexturesPath = "C:\\";
[JsonIgnore] public string ValidatedBarTexturesPath => ValidatePath(BarTexturesPath);
[JsonIgnore] private int _inputBarTexture = 0;
[JsonIgnore] private int _drawModeIndex = 0;
[JsonIgnore] private Vector4 _color = new Vector4(229 / 255f, 57 / 255f, 57 / 255f, 1);
[JsonIgnore] private PluginConfigColor _pluginConfigColor = PluginConfigColor.FromHex(0xFFE53939);
[JsonIgnore] private FileDialogManager _fileDialogManager = new FileDialogManager();
[JsonIgnore] private bool _applying = false;
private string ValidatePath(string path)
{
if (path.EndsWith("\\") || path.EndsWith("/"))
{
return path;
}
return path + "\\";
}
private void SelectFolder()
{
Action<bool, string> callback = (finished, path) =>
{
if (finished && path.Length > 0)
{
BarTexturesPath = path;
BarTexturesManager.Instance?.ReloadTextures();
}
};
_fileDialogManager.OpenFolderDialog("Select Bar Textures Folder", callback);
}
[ManualDraw]
public bool Draw(ref bool changed)
{
if (BarTexturesManager.Instance == null) { return false; }
string[] textureNames = BarTexturesManager.Instance.BarTextureNames.ToArray();
string[] drawModes = new string[] { "Stretch", "Repeat Horizontal", "Repeat Vertical", "Repeat" };
if (ImGui.BeginChild("Bar Textures", new Vector2(800, 400), false, ImGuiWindowFlags.NoSavedSettings | ImGuiWindowFlags.NoScrollbar | ImGuiWindowFlags.NoScrollWithMouse))
{
ImGuiHelper.NewLineAndTab();
ImGui.Text("Custom Bar Textures path");
ImGuiHelper.Tab();
if (ImGui.InputText("", ref BarTexturesPath, 200, ImGuiInputTextFlags.EnterReturnsTrue))
{
changed = true;
BarTexturesManager.Instance?.ReloadTextures();
}
ImGui.SameLine();
ImGui.PushFont(UiBuilder.IconFont);
if (ImGui.Button(FontAwesomeIcon.Folder.ToIconString(), new Vector2(0, 0)))
{
SelectFolder();
}
ImGui.PopFont();
ImGuiHelper.NewLineAndTab();
ImGui.Text("Preview");
ImGuiHelper.Tab();
ImGui.Combo("Bar Texture ##bar texture", ref _inputBarTexture, textureNames);
ImGuiHelper.Tab();
ImGui.Combo("Draw Mode", ref _drawModeIndex, drawModes);
ImGuiHelper.Tab();
if (ImGui.ColorEdit4("Color", ref _color))
{
_pluginConfigColor = new PluginConfigColor(_color);
}
if (textureNames.Length > _inputBarTexture)
{
// draw preview
ImGui.NewLine();
ImGuiHelper.NewLineAndTab();
Vector2 pos = ImGui.GetWindowPos() + ImGui.GetCursorPos();
Vector2 size = new Vector2(512, 64);
ImDrawListPtr drawList = ImGui.GetWindowDrawList();
DrawHelper.DrawBarTexture(
pos,
size,
_pluginConfigColor,
textureNames[_inputBarTexture],
(BarTextureDrawMode)_drawModeIndex,
drawList
);
ImGuiHelper.DrawSpacing(3);
ImGuiHelper.NewLineAndTab();
if (ImGui.Button("Apply to all bars", new Vector2(200, 30)))
{
_applying = true;
}
}
}
ImGui.EndChild();
_fileDialogManager.Draw();
if (_applying)
{
string[] lines = new string[] { "This will replace the Bar Texture", "and Draw Mode for ALL bars!", "THIS CAN'T BE UNDONE!", "Are you sure?" };
var (didConfirm, didClose) = ImGuiHelper.DrawConfirmationModal("Apply to ALL bars?", lines);
if (didConfirm)
{
List<BarConfig> barConfigs = ConfigurationManager.Instance.GetObjects<BarConfig>();
foreach (BarConfig barConfig in barConfigs)
{
barConfig.BarTextureName = textureNames[_inputBarTexture];
barConfig.BarTextureDrawMode = (BarTextureDrawMode)_drawModeIndex;
}
changed = true;
}
if (didConfirm || didClose)
{
_applying = false;
}
}
return false;
}
}
}