Files
AetherBags/KamiToolKit/Nodes/Component/ListButtonNode.cs
T
KnackAtNite 8db4ce6094
Debug Build and Test / Build against Latest Dalamud (push) Has been cancelled
Debug Build and Test / Build against Staging Dalamud (push) Has been cancelled
Initial commit: AetherBags + KamiToolKit for FC Gitea
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-08 14:46:31 -05:00

193 lines
7.1 KiB
C#

using System.Numerics;
using FFXIVClientStructs.FFXIV.Component.GUI;
using KamiToolKit.Classes;
using KamiToolKit.Timelines;
using Lumina.Text.ReadOnly;
namespace KamiToolKit.Nodes;
public unsafe class ListButtonNode : ButtonBase {
public readonly NineGridNode HoverBackgroundNode;
public readonly TextNode LabelNode;
public readonly NineGridNode SelectedBackgroundNode;
public ListButtonNode() {
HoverBackgroundNode = new SimpleNineGridNode {
TexturePath = "ui/uld/ListItemA.tex",
TextureCoordinates = new Vector2(0.0f, 22.0f),
TextureSize = new Vector2(64.0f, 22.0f),
LeftOffset = 16,
RightOffset = 1,
};
HoverBackgroundNode.AttachNode(this);
SelectedBackgroundNode = new SimpleNineGridNode {
TexturePath = "ui/uld/ListItemA.tex",
TextureCoordinates = new Vector2(0.0f, 0.0f),
TextureSize = new Vector2(64.0f, 22.0f),
LeftOffset = 16,
RightOffset = 1,
};
SelectedBackgroundNode.AttachNode(this);
LabelNode = new TextNode {
Position = new Vector2(10.0f, 1.0f),
TextColor = ColorHelper.GetColor(8),
TextOutlineColor = ColorHelper.GetColor(7),
FontType = FontType.Axis,
FontSize = 14,
AlignmentType = AlignmentType.Left,
String = "Label Not Set",
};
LabelNode.AttachNode(this);
LoadTimelines();
InitializeComponentEvents();
}
public bool Selected {
get => Component->IsChecked;
set => Component->SetChecked(value);
}
public ReadOnlySeString String {
get => LabelNode.String;
set => LabelNode.String = value;
}
protected override void OnSizeChanged() {
base.OnSizeChanged();
HoverBackgroundNode.Size = Size;
SelectedBackgroundNode.Size = Size;
LabelNode.Size = new Vector2(Width - 10.0f, Height - 1.0f);
}
private void LoadTimelines() {
AddTimeline(new TimelineBuilder()
.BeginFrameSet(1, 120)
.AddLabel(1, 1, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(9, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(10, 2, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(19, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(20, 3, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(29, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(30, 7, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(39, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(40, 6, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(49, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(50, 4, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(59, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(60, 8, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(69, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(70, 9, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(79, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(80, 10, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(89, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(90, 14, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(99, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(100, 13, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(109, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.AddLabel(110, 11, AtkTimelineJumpBehavior.Start, 0)
.AddLabel(120, 0, AtkTimelineJumpBehavior.PlayOnce, 0)
.EndFrameSet()
.Build()
);
HoverBackgroundNode.AddTimeline(new TimelineBuilder()
.BeginFrameSet(1, 9)
.AddFrame(1, alpha: 0)
.EndFrameSet()
.BeginFrameSet(10, 19)
.AddFrame(10, alpha: 0)
.AddFrame(13, alpha: 255)
.EndFrameSet()
.BeginFrameSet(20, 29)
.AddFrame(20, alpha: 255)
.EndFrameSet()
.BeginFrameSet(40, 49)
.AddFrame(40, alpha: 255)
.EndFrameSet()
.BeginFrameSet(50, 59)
.AddFrame(50, alpha: 255)
.AddFrame(52, alpha: 0)
.EndFrameSet()
.Build()
);
SelectedBackgroundNode.AddTimeline(new TimelineBuilder()
.BeginFrameSet(60, 69)
.AddFrame(60, alpha: 214)
.AddFrame(60, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.EndFrameSet()
.BeginFrameSet(70, 79)
.AddFrame(70, alpha: 214)
.AddFrame(72, alpha: 255)
.AddFrame(70, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.AddFrame(72, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.EndFrameSet()
.BeginFrameSet(80, 89)
.AddFrame(80, alpha: 255)
.AddFrame(80, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.EndFrameSet()
.BeginFrameSet(90, 99)
.AddFrame(90, alpha: 178)
.AddFrame(90, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(50, 50, 50))
.EndFrameSet()
.BeginFrameSet(100, 109)
.AddFrame(100, alpha: 255)
.AddFrame(100, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.EndFrameSet()
.BeginFrameSet(110, 120)
.AddFrame(110, alpha: 255)
.AddFrame(112, alpha: 214)
.AddFrame(110, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.AddFrame(112, addColor: new Vector3(0, 0, 0), multiplyColor: new Vector3(100, 100, 100))
.EndFrameSet()
.Build()
);
LabelNode.AddTimeline(new TimelineBuilder()
.BeginFrameSet(1, 9)
.AddFrame(1, alpha: 255)
.EndFrameSet()
.BeginFrameSet(10, 19)
.AddFrame(10, alpha: 255)
.EndFrameSet()
.BeginFrameSet(20, 29)
.AddFrame(20, alpha: 255)
.EndFrameSet()
.BeginFrameSet(30, 39)
.AddFrame(30, alpha: 127)
.EndFrameSet()
.BeginFrameSet(40, 49)
.AddFrame(40, alpha: 255)
.EndFrameSet()
.BeginFrameSet(50, 59)
.AddFrame(50, alpha: 255)
.EndFrameSet()
.BeginFrameSet(60, 69)
.AddFrame(60, alpha: 255)
.EndFrameSet()
.BeginFrameSet(70, 79)
.AddFrame(70, alpha: 255)
.EndFrameSet()
.BeginFrameSet(80, 89)
.AddFrame(80, alpha: 255)
.EndFrameSet()
.BeginFrameSet(90, 99)
.AddFrame(90, alpha: 127)
.EndFrameSet()
.BeginFrameSet(100, 109)
.AddFrame(100, alpha: 255)
.EndFrameSet()
.BeginFrameSet(110, 120)
.AddFrame(110, alpha: 255)
.EndFrameSet()
.Build()
);
}
}