using Content.Shared.RCD; using Content.Shared.RCD.Components; using JetBrains.Annotations; using Robust.Client.Graphics; using Robust.Client.Input; using Robust.Shared.Prototypes; namespace Content.Client.RCD; [UsedImplicitly] public sealed class RCDMenuBoundUserInterface : BoundUserInterface { [Dependency] private readonly IClyde _displayManager = default!; [Dependency] private readonly IInputManager _inputManager = default!; private RCDMenu? _menu; public RCDMenuBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { IoCManager.InjectDependencies(this); } protected override void Open() { base.Open(); _menu = new(Owner, this); _menu.OnClose += Close; // Open the menu, centered on the mouse var vpSize = _displayManager.ScreenSize; _menu.OpenCenteredAt(_inputManager.MouseScreenPosition.Position / vpSize); } public void SendRCDSystemMessage(ProtoId protoId) { // A predicted message cannot be used here as the RCD UI is closed immediately // after this message is sent, which will stop the server from receiving it SendMessage(new RCDSystemMessage(protoId)); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) return; _menu?.Dispose(); } }