Initial release: HSUI v1.0.0.0 - HUD replacement with configurable hotbars
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,227 @@
|
||||
using Dalamud.Interface;
|
||||
using HSUI.Config;
|
||||
using HSUI.Config.Attributes;
|
||||
using HSUI.Enums;
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Numerics;
|
||||
|
||||
namespace HSUI.Interface.GeneralElements
|
||||
{
|
||||
[Exportable(false)]
|
||||
public class EditableLabelConfig : LabelConfig
|
||||
{
|
||||
[InputText("Text")]
|
||||
[Order(10)]
|
||||
public string Text;
|
||||
|
||||
public EditableLabelConfig(Vector2 position, string text, DrawAnchor frameAnchor, DrawAnchor textAnchor)
|
||||
: base(position, text, frameAnchor, textAnchor)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public override string GetText() => Text;
|
||||
|
||||
public override void SetText(string text)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
}
|
||||
|
||||
[Exportable(false)]
|
||||
public class EditableNonFormattableLabelConfig : LabelConfig
|
||||
{
|
||||
[InputText("Text", formattable = false)]
|
||||
[Order(10)]
|
||||
public string Text;
|
||||
|
||||
public EditableNonFormattableLabelConfig(Vector2 position, string text, DrawAnchor frameAnchor, DrawAnchor textAnchor)
|
||||
: base(position, text, frameAnchor, textAnchor)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
|
||||
public override string GetText() => Text;
|
||||
|
||||
public override void SetText(string text)
|
||||
{
|
||||
Text = text;
|
||||
}
|
||||
}
|
||||
|
||||
[Exportable(false)]
|
||||
public class NumericLabelConfig : LabelConfig
|
||||
{
|
||||
[Combo("Number Format", "No Decimals (i.e. \"12\")", "One Decimal (i.e. \"12.3\")", "Two Decimals (i.e. \"12.34\")")]
|
||||
[Order(10)]
|
||||
public int NumberFormat;
|
||||
|
||||
[Combo("Rounding Mode", "Truncate", "Floor", "Ceil", "Round")]
|
||||
[Order(15)]
|
||||
public int NumberFunction;
|
||||
|
||||
[Checkbox("Hide Text When Zero")]
|
||||
[Order(65)]
|
||||
public bool HideIfZero = false;
|
||||
|
||||
public NumericLabelConfig(Vector2 position, string text, DrawAnchor frameAnchor, DrawAnchor textAnchor)
|
||||
: base(position, text, frameAnchor, textAnchor)
|
||||
{
|
||||
}
|
||||
|
||||
public void SetValue(float value)
|
||||
{
|
||||
if (value == 0)
|
||||
{
|
||||
_text = HideIfZero ? string.Empty : "0";
|
||||
return;
|
||||
}
|
||||
|
||||
int aux = (int)Math.Pow(10, NumberFormat);
|
||||
double textValue = value * aux;
|
||||
|
||||
textValue = NumberFunction switch
|
||||
{
|
||||
0 => Math.Truncate(textValue),
|
||||
1 => Math.Floor(textValue),
|
||||
2 => Math.Ceiling(textValue),
|
||||
3 => Math.Round(textValue),
|
||||
var _ => Math.Truncate(textValue)
|
||||
};
|
||||
|
||||
double v = textValue / aux;
|
||||
_text = v.ToString($"F{NumberFormat}", ConfigurationManager.Instance.ActiveCultreInfo);
|
||||
}
|
||||
|
||||
public override NumericLabelConfig Clone(int index) =>
|
||||
new NumericLabelConfig(Position, _text, FrameAnchor, TextAnchor)
|
||||
{
|
||||
Color = Color,
|
||||
OutlineColor = OutlineColor,
|
||||
ShadowConfig = ShadowConfig,
|
||||
ShowOutline = ShowOutline,
|
||||
FontID = FontID,
|
||||
UseJobColor = UseJobColor,
|
||||
Enabled = Enabled,
|
||||
HideIfZero = HideIfZero,
|
||||
ID = ID + "_{index}"
|
||||
};
|
||||
}
|
||||
|
||||
[DisableParentSettings("FontID")]
|
||||
[Exportable(false)]
|
||||
public class IconLabelConfig : LabelConfig
|
||||
{
|
||||
[DragFloat("Scale", min = 1, max = 5, velocity = 0.05f)]
|
||||
[Order(11)]
|
||||
public float FontScale = 1;
|
||||
|
||||
public FontAwesomeIcon IconId;
|
||||
|
||||
public IconLabelConfig(Vector2 position, FontAwesomeIcon iconId, DrawAnchor frameAnchor, DrawAnchor textAnchor) : base(position, "", frameAnchor, textAnchor)
|
||||
{
|
||||
IconId = iconId;
|
||||
}
|
||||
|
||||
public override string GetText() => IconId.ToIconString();
|
||||
public override float GetFontScale() => FontScale;
|
||||
}
|
||||
|
||||
[DisableParentSettings("FontID")]
|
||||
[Exportable(false)]
|
||||
public class DefaultFontLabelConfig : LabelConfig
|
||||
{
|
||||
[DragFloat("Scale", min = 1, max = 5, velocity = 0.05f)]
|
||||
[Order(11)]
|
||||
public float FontScale = 1;
|
||||
|
||||
public DefaultFontLabelConfig(Vector2 position, string text, DrawAnchor frameAnchor, DrawAnchor textAnchor)
|
||||
: base(position, text, frameAnchor, textAnchor)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool UseSystemFont() => true;
|
||||
public override float GetFontScale() => FontScale;
|
||||
}
|
||||
|
||||
[Exportable(false)]
|
||||
public class LabelConfig : MovablePluginConfigObject
|
||||
{
|
||||
[JsonIgnore] protected string _text;
|
||||
|
||||
[Font]
|
||||
[Order(15)]
|
||||
public string? FontID = null;
|
||||
|
||||
[Anchor("Frame Anchor")]
|
||||
[Order(20)]
|
||||
public DrawAnchor FrameAnchor = DrawAnchor.Center;
|
||||
|
||||
[Anchor("Text Anchor")]
|
||||
[Order(25)]
|
||||
public DrawAnchor TextAnchor = DrawAnchor.TopLeft;
|
||||
|
||||
[ColorEdit4("Color ##Text")]
|
||||
[Order(30)]
|
||||
public PluginConfigColor Color = new PluginConfigColor(Vector4.One);
|
||||
|
||||
[Checkbox("Outline")]
|
||||
[Order(35)]
|
||||
public bool ShowOutline = true;
|
||||
|
||||
[ColorEdit4("Color ##Outline")]
|
||||
[Order(40, collapseWith = nameof(ShowOutline))]
|
||||
public PluginConfigColor OutlineColor = new PluginConfigColor(Vector4.UnitW);
|
||||
|
||||
[NestedConfig("Shadow", 45)]
|
||||
public ShadowConfig ShadowConfig = new ShadowConfig() { Enabled = false };
|
||||
|
||||
[Checkbox("Use Job Color", spacing = true)]
|
||||
[Order(60)]
|
||||
public bool UseJobColor = false;
|
||||
|
||||
[Checkbox("Use Role Color")]
|
||||
[Order(65)]
|
||||
public bool UseRoleColor = false;
|
||||
|
||||
public LabelConfig(Vector2 position, string text, DrawAnchor frameAnchor, DrawAnchor textAnchor)
|
||||
{
|
||||
Position = position;
|
||||
_text = text;
|
||||
FrameAnchor = frameAnchor;
|
||||
TextAnchor = textAnchor;
|
||||
Position = position;
|
||||
|
||||
Strata = StrataLevel.HIGHEST;
|
||||
}
|
||||
|
||||
public virtual string GetText() => _text;
|
||||
|
||||
public virtual void SetText(string text)
|
||||
{
|
||||
_text = text;
|
||||
}
|
||||
|
||||
public virtual PluginConfigColor GetColor() => Color;
|
||||
|
||||
public virtual PluginConfigColor GetOutlineColor() => OutlineColor;
|
||||
|
||||
public virtual bool UseSystemFont() => false;
|
||||
public virtual float GetFontScale() => 1;
|
||||
|
||||
public virtual LabelConfig Clone(int index) =>
|
||||
new LabelConfig(Position, _text, FrameAnchor, TextAnchor)
|
||||
{
|
||||
Color = Color,
|
||||
OutlineColor = OutlineColor,
|
||||
ShadowConfig = ShadowConfig,
|
||||
ShowOutline = ShowOutline,
|
||||
FontID = FontID,
|
||||
UseJobColor = UseJobColor,
|
||||
Enabled = Enabled,
|
||||
ID = ID + "_{index}"
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user