Files

228 lines
6.7 KiB
C#

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}"
};
}
}