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
+120
View File
@@ -0,0 +1,120 @@
using HSUI.Config;
using System.Numerics;
using Dalamud.Game.ClientState.Objects.Types;
using System;
using System.Collections.Generic;
using HSUI.Enums;
namespace HSUI.Interface
{
public abstract class HudElement : IDisposable
{
protected MovablePluginConfigObject _config;
public MovablePluginConfigObject GetConfig() { return _config; }
public string ID => _config.ID;
private Dictionary<StrataLevel, List<Action>> _drawActions = new Dictionary<StrataLevel, List<Action>>();
public HudElement(MovablePluginConfigObject config)
{
_config = config;
}
public void PrepareForDraw(Vector2 origin)
{
_drawActions.Clear();
CreateDrawActions(origin);
}
public virtual void Draw(Vector2 origin)
{
// iterate like this so it goes in order
StrataLevel[] levels = (StrataLevel[])Enum.GetValues(typeof(StrataLevel));
foreach (StrataLevel key in levels)
{
_drawActions.TryGetValue(key, out List<Action>? drawActions);
if (drawActions == null) { continue; }
foreach (Action drawAction in _drawActions[key])
{
drawAction();
}
}
}
protected void AddDrawAction(StrataLevel strataLevel, Action drawAction)
{
_drawActions.TryGetValue(strataLevel, out List<Action>? drawActions);
if (drawActions == null)
{
drawActions = new List<Action>();
_drawActions.Add(strataLevel, drawActions);
}
drawActions.Add(drawAction);
}
protected void AddDrawActions(List<(StrataLevel, Action)> drawActions)
{
foreach ((StrataLevel strataLevel, Action drawAction) in drawActions)
{
AddDrawAction(strataLevel, drawAction);
}
}
protected abstract void CreateDrawActions(Vector2 origin);
~HudElement()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
private void Dispose(bool disposing)
{
if (!disposing)
{
return;
}
InternalDispose();
}
protected virtual void InternalDispose()
{
// override
}
}
public interface IHudElementWithActor
{
public IGameObject? Actor { get; set; }
}
public interface IHudElementWithAnchorableParent
{
public AnchorablePluginConfigObject? ParentConfig { get; set; }
}
public interface IHudElementWithMouseOver
{
public void StopMouseover();
}
public interface IHudElementWithPreview
{
public void StopPreview();
}
public interface IHudElementWithVisibilityConfig
{
public VisibilityConfig? VisibilityConfig { get; }
}
}