using Robust.Client.GameObjects; using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Maths; namespace Content.Client.ContextMenu.UI { public sealed partial class EntityMenuElement : ContextMenuElement { public const string StyleClassEntityMenuCountText = "contextMenuCount"; [Dependency] private IEntityManager _entityManager = default!; /// /// The entity that can be accessed by interacting with this element. /// public EntityUid? Entity; /// /// How many entities are accessible through this element's sub-menus. /// /// /// This is used for /// public int Count; public readonly Label CountLabel; public readonly SpriteView EntityIcon = new() { OverrideDirection = Direction.South}; public EntityMenuElement(EntityUid? entity = null) { IoCManager.InjectDependencies(this); CountLabel = new Label { StyleClasses = { StyleClassEntityMenuCountText } }; Icon.AddChild(new LayoutContainer() { Children = { EntityIcon, CountLabel } }); LayoutContainer.SetAnchorPreset(CountLabel, LayoutContainer.LayoutPreset.BottomRight); LayoutContainer.SetGrowHorizontal(CountLabel, LayoutContainer.GrowDirection.Begin); LayoutContainer.SetGrowVertical(CountLabel, LayoutContainer.GrowDirection.Begin); Entity = entity; if (Entity != null) { Count = 1; CountLabel.Visible = false; UpdateEntity(); } } protected override void Dispose(bool disposing) { base.Dispose(disposing); Entity = null; Count = 0; } /// /// Update the icon and text of this element based on the given entity or this element's own entity if none /// is provided. /// public void UpdateEntity(EntityUid? entity = null) { entity ??= Entity; // check whether entity is null, invalid, or has been deleted. // _entityManager.Deleted() implicitly checks all of these. if (_entityManager.Deleted(entity)) { Text = string.Empty; EntityIcon.Sprite = null; return; } EntityIcon.Sprite = _entityManager.GetComponentOrNull(entity); if (UserInterfaceManager.DebugMonitors.Visible) Text = _entityManager.ToPrettyString(entity.Value); else Text = _entityManager.GetComponent(entity.Value).EntityName; } } }