117 lines
4.9 KiB
C#
117 lines
4.9 KiB
C#
using System.Numerics;
|
|
using Dalamud.Interface;
|
|
using FFXIVClientStructs.FFXIV.Component.GUI;
|
|
using KamiToolKit.Premade.Color;
|
|
using KamiToolKit.Timelines;
|
|
using Lumina.Text.ReadOnly;
|
|
|
|
namespace KamiToolKit.Nodes;
|
|
|
|
public unsafe class ColorOptionTextButtonNode : ButtonBase {
|
|
|
|
public readonly NineGridNode BackgroundNode;
|
|
public readonly TextNode LabelNode;
|
|
public readonly ColorPreviewNode ColorNode;
|
|
|
|
public ColorOptionTextButtonNode() {
|
|
BackgroundNode = new SimpleNineGridNode {
|
|
TexturePath = "ui/uld/ButtonA.tex",
|
|
TextureSize = new Vector2(100.0f, 28.0f),
|
|
LeftOffset = 16.0f,
|
|
RightOffset = 16.0f,
|
|
};
|
|
BackgroundNode.AttachNode(this);
|
|
|
|
ColorNode = new ColorPreviewNode {
|
|
DisableCollisionNode = true,
|
|
};
|
|
ColorNode.AttachNode(this);
|
|
|
|
LabelNode = new TextNode {
|
|
AlignmentType = AlignmentType.Center,
|
|
Position = new Vector2(16.0f, 3.0f),
|
|
};
|
|
|
|
LabelNode.AttachNode(this);
|
|
|
|
LoadTimelines();
|
|
|
|
Data->Nodes[0] = LabelNode.NodeId;
|
|
Data->Nodes[1] = BackgroundNode.NodeId;
|
|
|
|
InitializeComponentEvents();
|
|
}
|
|
|
|
public ReadOnlySeString String {
|
|
get => LabelNode.String;
|
|
set => LabelNode.String = value;
|
|
}
|
|
|
|
protected override void OnSizeChanged() {
|
|
base.OnSizeChanged();
|
|
|
|
LabelNode.Size = new Vector2(Width - 32.0f, Height - 8.0f);
|
|
BackgroundNode.Size = Size;
|
|
ColorNode.Size = new Vector2(17.0f, 17.0f);
|
|
}
|
|
|
|
public ColorHelpers.HsvaColor? DefaultHsvaColor {
|
|
get => ColorNode.ColorHsva;
|
|
set => ColorNode.ColorHsva = value ?? default;
|
|
}
|
|
|
|
public Vector4? DefaultColor {
|
|
get => ColorNode.Color;
|
|
set => ColorNode.Color = value ?? default;
|
|
}
|
|
|
|
private void LoadTimelines() {
|
|
var foregroundPositionOffset = new Vector2(24.0f, 3.0f);
|
|
var colorElementPositionOffset = new Vector2(16.0f, 2.0f);
|
|
|
|
AddTimeline(new TimelineBuilder()
|
|
.BeginFrameSet(1, 53)
|
|
.AddLabelPair(1, 10, 1)
|
|
.AddLabelPair(11, 17, 2)
|
|
.AddLabelPair(18, 26, 3)
|
|
.AddLabelPair(27, 36, 7)
|
|
.AddLabelPair(37, 46, 6)
|
|
.AddLabelPair(47, 53, 4)
|
|
.EndFrameSet()
|
|
.Build());
|
|
|
|
BackgroundNode.AddTimeline(new TimelineBuilder()
|
|
.AddFrameSetWithFrame(1, 10, 1, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f))
|
|
.BeginFrameSet(11, 17)
|
|
.AddFrame(11, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrame(13, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f), addColor: new Vector3(16.0f))
|
|
.EndFrameSet()
|
|
.AddFrameSetWithFrame(18, 26, 18, new Vector2(0.0f, 1.0f), 255, new Vector3(16.0f))
|
|
.AddFrameSetWithFrame(27, 36, 27, Vector2.Zero, 178, multiplyColor: new Vector3(50.0f))
|
|
.AddFrameSetWithFrame(37, 46, 37, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f), addColor: new Vector3(16.0f))
|
|
.BeginFrameSet(47, 53)
|
|
.AddFrame(47, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f), addColor: new Vector3(16.0f))
|
|
.AddFrame(53, Vector2.Zero, 255, multiplyColor: new Vector3(100.0f))
|
|
.EndFrameSet()
|
|
.Build());
|
|
|
|
ColorNode.AddTimeline(new TimelineBuilder()
|
|
.AddFrameSetWithFrame(1, 10, 1, colorElementPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(11, 17, 11, colorElementPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(18, 26, 18, colorElementPositionOffset + new Vector2(0.0f, 1.0f), 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(27, 36, 27, colorElementPositionOffset, 153, multiplyColor: new Vector3(80.0f))
|
|
.AddFrameSetWithFrame(37, 46, 37, colorElementPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(47, 53, 47, colorElementPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.Build());
|
|
|
|
LabelNode.AddTimeline(new TimelineBuilder()
|
|
.AddFrameSetWithFrame(1, 10, 1, foregroundPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(11, 17, 11, foregroundPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(18, 26, 18, foregroundPositionOffset + new Vector2(0.0f, 1.0f), 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(27, 36, 27, foregroundPositionOffset, 153, multiplyColor: new Vector3(80.0f))
|
|
.AddFrameSetWithFrame(37, 46, 37, foregroundPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.AddFrameSetWithFrame(47, 53, 47, foregroundPositionOffset, 255, multiplyColor: new Vector3(100.0f))
|
|
.Build());
|
|
}
|
|
}
|