f37369cdda
Co-authored-by: Cursor <cursoragent@cursor.com>
322 lines
13 KiB
C#
322 lines
13 KiB
C#
using HSUI.Config;
|
|
using HSUI.Config.Attributes;
|
|
using HSUI.Enums;
|
|
using HSUI.Helpers;
|
|
using HSUI.Interface.Bars;
|
|
using HSUI.Interface.GeneralElements;
|
|
using HSUI.Interface.StatusEffects;
|
|
using Dalamud.Bindings.ImGui;
|
|
using System.Numerics;
|
|
|
|
namespace HSUI.Interface.EnemyList
|
|
{
|
|
public enum EnemyListGrowthDirection
|
|
{
|
|
Down = 0,
|
|
Up
|
|
}
|
|
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("General", 0)]
|
|
public class EnemyListConfig : MovablePluginConfigObject
|
|
{
|
|
public new static EnemyListConfig DefaultConfig()
|
|
{
|
|
var config = new EnemyListConfig();
|
|
Vector2 screenSize = ImGui.GetMainViewport().Size;
|
|
config.Position = new Vector2(screenSize.X * 0.2f, -screenSize.Y * 0.2f);
|
|
|
|
return config;
|
|
}
|
|
|
|
[Checkbox("Preview", isMonitored = true)]
|
|
[Order(4)]
|
|
public bool Preview = false;
|
|
|
|
[Combo("Growth Direction", "Down", "Up", spacing = true)]
|
|
[Order(20)]
|
|
public EnemyListGrowthDirection GrowthDirection = EnemyListGrowthDirection.Down;
|
|
|
|
[DragInt("Vertical Padding", min = 0, max = 500)]
|
|
[Order(25)]
|
|
public int VerticalPadding = 10;
|
|
}
|
|
|
|
[Exportable(false)]
|
|
[DisableParentSettings("Position", "Anchor", "HideWhenInactive")]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Health Bar", 0)]
|
|
public class EnemyListHealthBarConfig : BarConfig
|
|
{
|
|
[NestedConfig("Name Label", 70)]
|
|
public EditableLabelConfig NameLabel = new EditableLabelConfig(new Vector2(-5, 12), "[name]", DrawAnchor.TopRight, DrawAnchor.BottomRight);
|
|
|
|
[NestedConfig("Health Label", 80)]
|
|
public EditableLabelConfig HealthLabel = new EditableLabelConfig(new Vector2(30, 0), "[health:percent]%", DrawAnchor.Left, DrawAnchor.Left);
|
|
|
|
[NestedConfig("Order Label", 90)]
|
|
public DefaultFontLabelConfig OrderLabel = new DefaultFontLabelConfig(new Vector2(5, 0), "", DrawAnchor.Left, DrawAnchor.Left);
|
|
|
|
[NestedConfig("Colors", 100)]
|
|
public EnemyListHealthBarColorsConfig Colors = new EnemyListHealthBarColorsConfig();
|
|
|
|
[NestedConfig("Change Alpha Based on Range", 110)]
|
|
public EnemyListRangeConfig RangeConfig = new EnemyListRangeConfig();
|
|
|
|
[NestedConfig("Use Smooth Transitions", 120)]
|
|
public SmoothHealthConfig SmoothHealthConfig = new SmoothHealthConfig();
|
|
|
|
[NestedConfig("Custom Mouseover Area", 130)]
|
|
public MouseoverAreaConfig MouseoverAreaConfig = new MouseoverAreaConfig();
|
|
|
|
public new static EnemyListHealthBarConfig DefaultConfig()
|
|
{
|
|
Vector2 size = new Vector2(180, 40);
|
|
|
|
var config = new EnemyListHealthBarConfig(Vector2.Zero, size, new PluginConfigColor(new(233f / 255f, 4f / 255f, 4f / 255f, 100f / 100f)));
|
|
config.Colors.ColorByHealth.Enabled = false;
|
|
|
|
config.NameLabel.FontID = FontsConfig.DefaultMediumFontKey;
|
|
config.HealthLabel.FontID = FontsConfig.DefaultMediumFontKey;
|
|
|
|
config.MouseoverAreaConfig.Enabled = false;
|
|
|
|
return config;
|
|
}
|
|
|
|
public EnemyListHealthBarConfig(Vector2 position, Vector2 size, PluginConfigColor fillColor, BarDirection fillDirection = BarDirection.Right)
|
|
: base(position, size, fillColor, fillDirection)
|
|
{
|
|
}
|
|
}
|
|
|
|
[Disableable(false)]
|
|
[Exportable(false)]
|
|
public class EnemyListHealthBarColorsConfig : PluginConfigObject
|
|
{
|
|
[NestedConfig("Color Based On Health Value", 30, collapsingHeader = false)]
|
|
public ColorByHealthValueConfig ColorByHealth = new ColorByHealthValueConfig();
|
|
|
|
[Checkbox("Highlight When Hovering With Cursor Or Soft Targeting", spacing = true)]
|
|
[Order(40)]
|
|
public bool ShowHighlight = true;
|
|
|
|
[ColorEdit4("Highlight Color")]
|
|
[Order(41, collapseWith = nameof(ShowHighlight))]
|
|
public PluginConfigColor HighlightColor = new PluginConfigColor(new Vector4(255f / 255f, 255f / 255f, 255f / 255f, 5f / 100f));
|
|
|
|
[Checkbox("Missing Health Color", spacing = true)]
|
|
[Order(45)]
|
|
public bool UseMissingHealthBar = false;
|
|
|
|
[ColorEdit4("Color" + "##MissingHealth")]
|
|
[Order(46, collapseWith = nameof(UseMissingHealthBar))]
|
|
public PluginConfigColor HealthMissingColor = new PluginConfigColor(new Vector4(255f / 255f, 0f / 255f, 0f / 255f, 100f / 100f));
|
|
|
|
[ColorEdit4("Target Border Color", spacing = true)]
|
|
[Order(50)]
|
|
public PluginConfigColor TargetBordercolor = new PluginConfigColor(new Vector4(255f / 255f, 255f / 255f, 255f / 255f, 100f / 100f));
|
|
|
|
[DragInt("Target Border Thickness", min = 1, max = 10)]
|
|
[Order(51)]
|
|
public int TargetBorderThickness = 1;
|
|
|
|
[Checkbox("Show Enmity Border Colors", spacing = true)]
|
|
[Order(60)]
|
|
public bool ShowEnmityBorderColors = true;
|
|
|
|
[ColorEdit4("Enmity Leader Color")]
|
|
[Order(61, collapseWith = nameof(ShowEnmityBorderColors))]
|
|
public PluginConfigColor EnmityLeaderBorderColor = new PluginConfigColor(new Vector4(255f / 255f, 40f / 255f, 40f / 255f, 100f / 100f));
|
|
|
|
[ColorEdit4("Enmity Close To Leader Color")]
|
|
[Order(62, collapseWith = nameof(ShowEnmityBorderColors))]
|
|
public PluginConfigColor EnmitySecondBorderColor = new PluginConfigColor(new Vector4(255f / 255f, 175f / 255f, 40f / 255f, 100f / 100f));
|
|
}
|
|
|
|
[Exportable(false)]
|
|
public class EnemyListRangeConfig : PluginConfigObject
|
|
{
|
|
[DragInt("Range (yalms)", min = 1, max = 500)]
|
|
[Order(5)]
|
|
public int Range = 30;
|
|
|
|
[DragFloat("Alpha", min = 1, max = 100)]
|
|
[Order(10)]
|
|
public float Alpha = 25;
|
|
|
|
|
|
public float AlphaForDistance(int distance, float alpha = 100f)
|
|
{
|
|
if (!Enabled)
|
|
{
|
|
return 100f;
|
|
}
|
|
|
|
return distance > Range ? Alpha : alpha;
|
|
}
|
|
}
|
|
|
|
[DisableParentSettings("FrameAnchor")]
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Enmity Icon", 0)]
|
|
public class EnemyListEnmityIconConfig : IconConfig
|
|
{
|
|
[Anchor("Health Bar Anchor")]
|
|
[Order(16)]
|
|
public DrawAnchor HealthBarAnchor = DrawAnchor.TopLeft;
|
|
|
|
public new static EnemyListEnmityIconConfig DefaultConfig() =>
|
|
new EnemyListEnmityIconConfig(new Vector2(5), new Vector2(24), DrawAnchor.Center, DrawAnchor.TopLeft);
|
|
|
|
public EnemyListEnmityIconConfig(Vector2 position, Vector2 size, DrawAnchor anchor, DrawAnchor frameAnchor)
|
|
: base(position, size, anchor, frameAnchor)
|
|
{
|
|
HealthBarAnchor = frameAnchor;
|
|
}
|
|
}
|
|
|
|
[DisableParentSettings("FrameAnchor")]
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Sign Icon", 0)]
|
|
public class EnemyListSignIconConfig : SignIconConfig
|
|
{
|
|
[Anchor("Health Bar Anchor")]
|
|
[Order(16)]
|
|
public DrawAnchor HealthBarAnchor = DrawAnchor.TopLeft;
|
|
|
|
[Checkbox("Replace Order Label", help = "When enabled and if the enemy has a sign assigned, the sign icon will be drawn instead of the order label.")]
|
|
[Order(30)]
|
|
public bool ReplaceOrderLabel = true;
|
|
|
|
public new static EnemyListSignIconConfig DefaultConfig() =>
|
|
new EnemyListSignIconConfig(new Vector2(0), new Vector2(30), DrawAnchor.Center, DrawAnchor.Left);
|
|
|
|
public EnemyListSignIconConfig(Vector2 position, Vector2 size, DrawAnchor anchor, DrawAnchor frameAnchor)
|
|
: base(position, size, anchor, frameAnchor)
|
|
{
|
|
HealthBarAnchor = frameAnchor;
|
|
}
|
|
}
|
|
|
|
[DisableParentSettings("AnchorToUnitFrame", "UnitFrameAnchor", "HideWhenInactive", "FillDirection")]
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Castbar", 0)]
|
|
public class EnemyListCastbarConfig : TargetCastbarConfig
|
|
{
|
|
public new static EnemyListCastbarConfig DefaultConfig()
|
|
{
|
|
var size = new Vector2(180, 10);
|
|
|
|
var castNameConfig = new LabelConfig(new Vector2(0, 0), "", DrawAnchor.Center, DrawAnchor.Center);
|
|
castNameConfig.FontID = FontsConfig.DefaultMediumFontKey;
|
|
var castTimeConfig = new NumericLabelConfig(new Vector2(-5, 0), "", DrawAnchor.Right, DrawAnchor.Right);
|
|
castTimeConfig.Enabled = false;
|
|
castTimeConfig.FontID = FontsConfig.DefaultMediumFontKey;
|
|
castTimeConfig.NumberFormat = 1;
|
|
|
|
var config = new EnemyListCastbarConfig(Vector2.Zero, size, castNameConfig, castTimeConfig);
|
|
config.HealthBarAnchor = DrawAnchor.Bottom;
|
|
config.Anchor = DrawAnchor.Bottom;
|
|
config.ShowIcon = false;
|
|
|
|
return config;
|
|
}
|
|
|
|
[Anchor("Health Bar Anchor")]
|
|
[Order(16)]
|
|
public DrawAnchor HealthBarAnchor = DrawAnchor.BottomLeft;
|
|
|
|
public EnemyListCastbarConfig(Vector2 position, Vector2 size, LabelConfig castNameConfig, NumericLabelConfig castTimeConfig)
|
|
: base(position, size, castNameConfig, castTimeConfig)
|
|
{
|
|
|
|
}
|
|
}
|
|
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Buffs", 0)]
|
|
public class EnemyListBuffsConfig : EnemyListStatusEffectsListConfig
|
|
{
|
|
public new static EnemyListBuffsConfig DefaultConfig()
|
|
{
|
|
var durationConfig = new LabelConfig(new Vector2(0, -4), "", DrawAnchor.Bottom, DrawAnchor.Center);
|
|
var stacksConfig = new LabelConfig(new Vector2(-3, 4), "", DrawAnchor.TopRight, DrawAnchor.Center);
|
|
stacksConfig.Color = new(Vector4.UnitW);
|
|
stacksConfig.OutlineColor = new(Vector4.One);
|
|
|
|
var iconConfig = new StatusEffectIconConfig(durationConfig, stacksConfig);
|
|
iconConfig.DispellableBorderConfig.Enabled = false;
|
|
iconConfig.Size = new Vector2(24, 24);
|
|
|
|
var pos = new Vector2(5, 8);
|
|
var size = new Vector2(iconConfig.Size.X * 4 + 6, iconConfig.Size.Y);
|
|
|
|
var config = new EnemyListBuffsConfig(DrawAnchor.TopRight, pos, size, true, false, false, GrowthDirections.Right | GrowthDirections.Down, iconConfig);
|
|
config.Limit = 4;
|
|
config.ShowPermanentEffects = true;
|
|
config.IconConfig.DispellableBorderConfig.Enabled = false;
|
|
|
|
return config;
|
|
}
|
|
|
|
public EnemyListBuffsConfig(DrawAnchor anchor, Vector2 position, Vector2 size, bool showBuffs, bool showDebuffs, bool showPermanentEffects,
|
|
GrowthDirections growthDirections, StatusEffectIconConfig iconConfig)
|
|
: base(anchor, position, size, showBuffs, showDebuffs, showPermanentEffects, growthDirections, iconConfig)
|
|
{
|
|
}
|
|
}
|
|
|
|
[Exportable(false)]
|
|
[Section("Enemy List", true)]
|
|
[SubSection("Debuffs", 0)]
|
|
public class EnemyListDebuffsConfig : EnemyListStatusEffectsListConfig
|
|
{
|
|
public new static EnemyListDebuffsConfig DefaultConfig()
|
|
{
|
|
var durationConfig = new LabelConfig(new Vector2(0, -4), "", DrawAnchor.Bottom, DrawAnchor.Center);
|
|
var stacksConfig = new LabelConfig(new Vector2(-3, 4), "", DrawAnchor.TopRight, DrawAnchor.Center);
|
|
stacksConfig.Color = new(Vector4.UnitW);
|
|
stacksConfig.OutlineColor = new(Vector4.One);
|
|
|
|
var iconConfig = new StatusEffectIconConfig(durationConfig, stacksConfig);
|
|
iconConfig.Size = new Vector2(24, 24);
|
|
|
|
var pos = new Vector2(-5, 8);
|
|
var size = new Vector2(iconConfig.Size.X * 4 + 6, iconConfig.Size.Y);
|
|
|
|
var config = new EnemyListDebuffsConfig(DrawAnchor.TopLeft, pos, size, false, true, false, GrowthDirections.Left | GrowthDirections.Down, iconConfig);
|
|
config.Limit = 4;
|
|
config.ShowPermanentEffects = true;
|
|
config.IconConfig.DispellableBorderConfig.Enabled = false;
|
|
|
|
return config;
|
|
}
|
|
|
|
public EnemyListDebuffsConfig(DrawAnchor anchor, Vector2 position, Vector2 size, bool showBuffs, bool showDebuffs, bool showPermanentEffects,
|
|
GrowthDirections growthDirections, StatusEffectIconConfig iconConfig)
|
|
: base(anchor, position, size, showBuffs, showDebuffs, showPermanentEffects, growthDirections, iconConfig)
|
|
{
|
|
}
|
|
}
|
|
|
|
public class EnemyListStatusEffectsListConfig : StatusEffectsListConfig
|
|
{
|
|
[Anchor("Health Bar Anchor")]
|
|
[Order(4)]
|
|
public DrawAnchor HealthBarAnchor = DrawAnchor.BottomLeft;
|
|
|
|
public EnemyListStatusEffectsListConfig(DrawAnchor anchor, Vector2 position, Vector2 size, bool showBuffs, bool showDebuffs, bool showPermanentEffects,
|
|
GrowthDirections growthDirections, StatusEffectIconConfig iconConfig)
|
|
: base(position, size, showBuffs, showDebuffs, showPermanentEffects, growthDirections, iconConfig)
|
|
{
|
|
HealthBarAnchor = anchor;
|
|
}
|
|
}
|
|
}
|