using Content.Client._NF.Shipyard.UI; using Content.Shared.Containers.ItemSlots; using Content.Shared._NF.Shipyard.BUI; using Content.Shared._NF.Shipyard.Events; using static Robust.Client.UserInterface.Controls.BaseButton; using Robust.Client.UserInterface; namespace Content.Client._NF.Shipyard.BUI; public sealed class ShipyardConsoleBoundUserInterface : BoundUserInterface { private ShipyardConsoleMenu? _menu; // private ShipyardRulesPopup? _rulesWindow; // Frontier public int Balance { get; private set; } public int? ShipSellValue { get; private set; } public ShipyardConsoleBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } protected override void Open() { base.Open(); if (_menu == null) { _menu = this.CreateWindow(); _menu.OnOrderApproved += ApproveOrder; _menu.OnSellShip += SellShip; _menu.TargetIdButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent("ShipyardConsole-targetId")); _menu.Owner = Owner; // Horizon // Disable the NFSD popup for now. // var rules = new FormattedMessage(); // _rulesWindow = new ShipyardRulesPopup(this); // if (ShipyardConsoleUiKey.Security == (ShipyardConsoleUiKey) UiKey) // { // rules.AddText(Loc.GetString($"shipyard-rules-default1")); // rules.PushNewline(); // rules.AddText(Loc.GetString($"shipyard-rules-default2")); // _rulesWindow.ShipRules.SetMessage(rules); // _rulesWindow.OpenCentered(); // } } } private void Populate(List availablePrototypes, List unavailablePrototypes, bool freeListings, bool validId) { if (_menu == null) return; _menu.PopulateProducts(availablePrototypes, unavailablePrototypes, freeListings, validId); _menu.PopulateCategories(availablePrototypes, unavailablePrototypes); _menu.PopulateClasses(availablePrototypes, unavailablePrototypes); _menu.PopulateEngines(availablePrototypes, unavailablePrototypes); } protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (state is not ShipyardConsoleInterfaceState cState) return; Balance = cState.Balance; ShipSellValue = cState.ShipSellValue; var castState = (ShipyardConsoleInterfaceState) state; Populate(castState.ShipyardPrototypes.available, castState.ShipyardPrototypes.unavailable, castState.FreeListings, castState.IsTargetIdPresent); _menu?.UpdateState(castState); } private void ApproveOrder(ButtonEventArgs args) { if (args.Button.Parent?.Parent is not VesselRow row || row.Vessel == null) { return; } var vesselId = row.Vessel.ID; SendMessage(new ShipyardConsolePurchaseMessage(vesselId)); } private void SellShip(ButtonEventArgs args) { //reserved for a sanity check, but im not sure what since we check all the important stuffs on server already SendMessage(new ShipyardConsoleSellMessage()); } }