Files
2023-09-23 00:21:07 +10:00

88 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class InterfaceIcon : VisualElement {
public enum Icon {
// Outputs
Acceleration,
Deceleration,
Strafe,
Shield,
Crosshair,
Logo,
}
public new class UxmlFactory : UxmlFactory<InterfaceIcon, UxmlTraits> {}
public new class UxmlTraits : VisualElement.UxmlTraits {
readonly UxmlEnumAttributeDescription<Icon> _iconAttribute = new() { name = "icon" };
readonly UxmlStringAttributeDescription _detailAttribute = new UxmlStringAttributeDescription() { name = "detail" };
public override void Init(VisualElement ve, IUxmlAttributes bag, CreationContext cc) {
base.Init(ve, bag, cc);
var InterfaceIcon = (InterfaceIcon)ve;
InterfaceIcon.icon = _iconAttribute.GetValueFromBag(bag, cc);
InterfaceIcon.detail = _detailAttribute.GetValueFromBag(bag, cc);
}
}
static readonly Dictionary<Icon, char> _iconGlyphMap = new() {
{ Icon.Acceleration, '\u25bc' },
{ Icon.Deceleration, '\u25b2' },
{ Icon.Strafe, '\u2b94' },
{ Icon.Shield, '\u26c9' },
{ Icon.Logo, '\u26d0' },
};
public Icon icon {
get => _icon;
set {
_icon = value;
_iconLabel.text = _iconGlyphMap[value].ToString();
}
}
public string detail {
get => _detail;
set {
_detail = value;
_detailLabel.text = value;
}
}
Icon _icon;
string _detail;
Label _iconLabel;
Label _detailLabel;
public InterfaceIcon() : this(Icon.Strafe) {}
public InterfaceIcon(Icon icon) {
_iconLabel = new Label {
style = {
unityFont = Resources.Load<Font>("SpaceRace-Icons"),
unityFontDefinition = StyleKeyword.None,
},
};
Add(_iconLabel);
_detailLabel = new Label {
style = {
position = Position.Absolute,
},
};
_detailLabel.AddToClassList("detail");
Add(_detailLabel);
this.icon = icon;
}
}