151 lines
5.6 KiB
C#
151 lines
5.6 KiB
C#
using System.Numerics;
|
|
using KamiToolKit.Enums;
|
|
|
|
namespace KamiToolKit.Nodes;
|
|
|
|
public class CircleButtonNode : ButtonBase {
|
|
|
|
public readonly SimpleImageNode ImageNode;
|
|
|
|
public CircleButtonNode() {
|
|
ImageNode = new SimpleImageNode {
|
|
TexturePath = "ui/uld/CircleButtons.tex",
|
|
TextureSize = new Vector2(24.0f, 24.0f),
|
|
TextureCoordinates = new Vector2(0.0f, 112.0f),
|
|
WrapMode = WrapMode.Stretch,
|
|
};
|
|
ImageNode.AttachNode(this);
|
|
|
|
LoadTimelines();
|
|
|
|
InitializeComponentEvents();
|
|
}
|
|
|
|
public ButtonIcon Icon {
|
|
get;
|
|
set {
|
|
field = value;
|
|
var uldInfo = GetTextureCoordinateForIcon(value);
|
|
ImageNode.TextureCoordinates = uldInfo.TextureCoordinates;
|
|
ImageNode.TextureSize = uldInfo.TextureSize;
|
|
}
|
|
}
|
|
|
|
protected override void OnSizeChanged() {
|
|
base.OnSizeChanged();
|
|
|
|
ImageNode.Size = Size;
|
|
}
|
|
|
|
private static UldTextureInfo GetTextureCoordinateForIcon(ButtonIcon icon) => icon switch {
|
|
ButtonIcon.GearCog => new UldTextureInfo(0.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Filter => new UldTextureInfo(28.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Sort => new UldTextureInfo(56.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.QuestionMark => new UldTextureInfo(84.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Refresh => new UldTextureInfo(112.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.ChatBubble => new UldTextureInfo(140.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.LeftArrow => new UldTextureInfo(168.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.UpArrow => new UldTextureInfo(196.0f, 0.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Chest => new UldTextureInfo(224.0f, 0.0f, 28.0f, 28.0f),
|
|
|
|
ButtonIcon.Document => new UldTextureInfo(0.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Edit => new UldTextureInfo(28.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Add => new UldTextureInfo(56.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.RightArrow => new UldTextureInfo(84.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.MusicNote => new UldTextureInfo(112.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Sprout => new UldTextureInfo(140.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Dice => new UldTextureInfo(168.0f, 28.0f, 28.0f, 28.0f),
|
|
ButtonIcon.ArrowDown => new UldTextureInfo(196.0f, 28.0f, 28.0f, 28.0f),
|
|
|
|
ButtonIcon.Eye => new UldTextureInfo(0.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Envelope => new UldTextureInfo(28.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Volume => new UldTextureInfo(56.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Mute => new UldTextureInfo(84.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.WavePulse => new UldTextureInfo(112.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.CheckedBox => new UldTextureInfo(140.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Cross => new UldTextureInfo(168.0f, 56.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Globe => new UldTextureInfo(196.0f, 56.0f, 28.0f, 28.0f),
|
|
|
|
ButtonIcon.ActiveGearCog => new UldTextureInfo(0.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.ActiveFilter => new UldTextureInfo(28.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Update => new UldTextureInfo(56.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.ActiveRing => new UldTextureInfo(84.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.Exclamation => new UldTextureInfo(112.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.InsetDocument => new UldTextureInfo(140.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.GearCogWithChatBubble => new UldTextureInfo(168.0f, 84.0f, 28.0f, 28.0f),
|
|
ButtonIcon.FlatbedCartBoxes => new UldTextureInfo(196.0f, 84.0f, 28.0f, 28.0f),
|
|
|
|
ButtonIcon.MagnifyingGlass => new UldTextureInfo(0.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.EditSmall => new UldTextureInfo(24.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.WeaponDraw => new UldTextureInfo(48.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.Headgear => new UldTextureInfo(72.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.Sword => new UldTextureInfo(96.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.Emotes => new UldTextureInfo(120.0f, 112.0f, 24.0f, 24.0f),
|
|
ButtonIcon.PersonStanding => new UldTextureInfo(144.0f, 112.0f, 24.0f, 24.0f),
|
|
|
|
ButtonIcon.PaintBucket => new UldTextureInfo(0.0f, 136.0f, 24.0f, 24.0f),
|
|
ButtonIcon.EyeSmall => new UldTextureInfo(24.0f, 136.0f, 24.0f, 24.0f),
|
|
ButtonIcon.Undo => new UldTextureInfo(48.0f, 136.0f, 24.0f, 24.0f),
|
|
ButtonIcon.PinPaper => new UldTextureInfo(72.0f, 136.0f, 24.0f, 24.0f),
|
|
ButtonIcon.CrossSmall => new UldTextureInfo(96.0f, 136.0f, 24.0f, 24.0f),
|
|
|
|
_ => new UldTextureInfo(0.0f, 0.0f, 28.0f, 28.0f),
|
|
};
|
|
|
|
private void LoadTimelines()
|
|
=> LoadTwoPartTimelines(this, ImageNode);
|
|
}
|
|
|
|
public enum ButtonIcon {
|
|
GearCog,
|
|
Filter,
|
|
Sort,
|
|
QuestionMark,
|
|
Refresh,
|
|
ChatBubble,
|
|
LeftArrow,
|
|
UpArrow,
|
|
Chest,
|
|
Document,
|
|
Edit,
|
|
Add,
|
|
RightArrow,
|
|
MusicNote,
|
|
Sprout,
|
|
Dice,
|
|
ArrowDown,
|
|
Eye,
|
|
Envelope,
|
|
Volume,
|
|
Mute,
|
|
WavePulse,
|
|
CheckedBox,
|
|
Cross,
|
|
Globe,
|
|
ActiveGearCog,
|
|
ActiveFilter,
|
|
Update,
|
|
ActiveRing,
|
|
Exclamation,
|
|
InsetDocument,
|
|
GearCogWithChatBubble,
|
|
FlatbedCartBoxes,
|
|
MagnifyingGlass,
|
|
EditSmall,
|
|
WeaponDraw,
|
|
Headgear,
|
|
Sword,
|
|
Emotes,
|
|
PersonStanding,
|
|
PaintBucket,
|
|
EyeSmall,
|
|
Undo,
|
|
PinPaper,
|
|
CrossSmall,
|
|
}
|
|
|
|
internal record UldTextureInfo(float PositionX = 0.0f, float PositionY = 0.0f, float Width = 0.0f, float Height = 0.0f) {
|
|
public Vector2 TextureCoordinates => new(PositionX, PositionY);
|
|
public Vector2 TextureSize => new(Width, Height);
|
|
}
|