Files
tbd-station-14/Content.Client/Verbs/UI/VerbMenuElement.cs
2023-09-11 13:53:35 +10:00

76 lines
2.6 KiB
C#

using System.Numerics;
using Content.Client.ContextMenu.UI;
using Content.Shared.Verbs;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface.Controls;
using Robust.Client.Utility;
using Robust.Shared.GameObjects;
using Robust.Shared.IoC;
using Robust.Shared.Maths;
namespace Content.Client.Verbs.UI
{
/// <summary>
/// Slight extension of <see cref="ContextMenuElement"/> that uses a SpriteSpecifier for it's icon and provides
/// constructors that take verbs or verb categories.
/// </summary>
public sealed partial class VerbMenuElement : ContextMenuElement
{
public const string StyleClassVerbMenuConfirmationTexture = "verbMenuConfirmationTexture";
// Setters to provide access to children generated by XAML.
public bool IconVisible { set => Icon.Visible = value; }
public bool TextVisible { set => Label.Visible = value; }
// Top quality variable naming
public readonly Verb? Verb;
public VerbMenuElement(Verb verb) : base(verb.Text)
{
ToolTip = verb.Message;
Disabled = verb.Disabled;
Verb = verb;
Label.SetOnlyStyleClass(verb.TextStyleClass);
if (verb.ConfirmationPopup)
{
ExpansionIndicator.SetOnlyStyleClass(StyleClassVerbMenuConfirmationTexture);
ExpansionIndicator.Visible = true;
}
var entManager = IoCManager.Resolve<IEntityManager>();
if (verb.Icon == null && verb.IconEntity != null)
{
var spriteView = new SpriteView()
{
OverrideDirection = Direction.South,
SetSize = new Vector2(ElementHeight, ElementHeight),
};
spriteView.SetEntity(entManager.GetEntity(verb.IconEntity.Value));
Icon.AddChild(spriteView);
return;
}
Icon.AddChild(new TextureRect()
{
Texture = verb.Icon != null ? entManager.System<SpriteSystem>().Frame0(verb.Icon) : null,
Stretch = TextureRect.StretchMode.KeepAspectCentered
});
}
public VerbMenuElement(VerbCategory category, string styleClass) : base(category.Text)
{
Label.SetOnlyStyleClass(styleClass);
Icon.AddChild(new TextureRect()
{
Texture = category.Icon != null ? IoCManager.Resolve<IEntitySystemManager>().GetEntitySystem<SpriteSystem>().Frame0(category.Icon) : null,
Stretch = TextureRect.StretchMode.KeepAspectCentered
});
}
}
}