using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using Robust.Client.AutoGenerated; using Robust.Client.Graphics; using Robust.Client.Placement; using Robust.Client.UserInterface.XAML; using Robust.Shared.Graphics; using Robust.Shared.IoC; using Robust.Shared.Localization; using Robust.Shared.Maths; using Robust.Shared.Prototypes; namespace Robust.Client.UserInterface.CustomControls { [GenerateTypedNameReferences] public sealed partial class EntitySpawnWindow : DefaultWindow { private static readonly LocId NoDescriptionMessage = "entity-spawn-window-no-description"; [Dependency] private ILocalizationManager _loc = default!; [Dependency] private IPlacementManager _placement = default!; public EntitySpawnButton? SelectedButton; public EntityPrototype? SelectedPrototype; [Obsolete("Use IPlacementManager.AllModeNames")] public static string[] InitOpts =>IoCManager.Resolve().AllModeNames; public EntitySpawnWindow() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); MeasureButton.Measure(Vector2Helpers.Infinity); var modes = _placement.AllModeNames; for (var i = 0; i < modes.Length; i++) { OverrideMenu.AddItem(modes[i], i); } } // Create a spawn button and insert it into the start or end of the list. public EntitySpawnButton InsertEntityButton(EntityPrototype prototype, bool insertFirst, int index) { var button = new EntitySpawnButton { Prototype = prototype, Index = index // We track this index purely for debugging. }; var entityLabelText = string.IsNullOrEmpty(prototype.Name) ? prototype.ID : prototype.Name; if (!string.IsNullOrWhiteSpace(prototype.EditorSuffix)) { entityLabelText += $" [{prototype.EditorSuffix}]"; } button.EntityLabel.Text = entityLabelText; var desc = string.IsNullOrEmpty(prototype.Description) ? _loc.GetString(NoDescriptionMessage) : prototype.Description; button.ActualButton.ToolTip = $"{prototype.ID}\n{desc}"; if (prototype == SelectedPrototype) { SelectedButton = button; SelectedButton.ActualButton.Pressed = true; } var rect = button.EntityTextureRects; rect.SetPrototype(prototype.ID); PrototypeList.AddChild(button); if (insertFirst) { button.SetPositionInParent(0); } return button; } } }