175 lines
5.3 KiB
C#
175 lines
5.3 KiB
C#
using Content.Client.Cargo.Components;
|
|
using Content.Client.Cargo.UI;
|
|
using Content.Shared.Cargo;
|
|
using Content.Shared.Cargo.Components;
|
|
using Robust.Client.GameObjects;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.ViewVariables;
|
|
using static Content.Shared.Cargo.Components.SharedCargoConsoleComponent;
|
|
using static Robust.Client.UserInterface.Controls.BaseButton;
|
|
|
|
namespace Content.Client.Cargo
|
|
{
|
|
public class CargoConsoleBoundUserInterface : BoundUserInterface
|
|
{
|
|
[ViewVariables]
|
|
private CargoConsoleMenu? _menu;
|
|
|
|
[ViewVariables]
|
|
private CargoConsoleOrderMenu? _orderMenu;
|
|
|
|
[ViewVariables]
|
|
public GalacticMarketComponent? Market { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public CargoOrderDatabaseComponent? Orders { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public bool RequestOnly { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public int BankId { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public string? BankName { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public int BankBalance { get; private set; }
|
|
|
|
[ViewVariables]
|
|
public (int CurrentCapacity, int MaxCapacity) ShuttleCapacity { get; private set; }
|
|
|
|
private CargoProductPrototype? _product;
|
|
|
|
public CargoConsoleBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey)
|
|
{
|
|
}
|
|
|
|
protected override void Open()
|
|
{
|
|
base.Open();
|
|
|
|
if (!Owner.Owner.TryGetComponent(out GalacticMarketComponent? market) ||
|
|
!Owner.Owner.TryGetComponent(out CargoOrderDatabaseComponent? orders)) return;
|
|
|
|
Market = market;
|
|
Orders = orders;
|
|
|
|
_menu = new CargoConsoleMenu(this);
|
|
_orderMenu = new CargoConsoleOrderMenu();
|
|
|
|
_menu.OnClose += Close;
|
|
|
|
_menu.Populate();
|
|
|
|
Market.OnDatabaseUpdated += _menu.PopulateProducts;
|
|
Market.OnDatabaseUpdated += _menu.PopulateCategories;
|
|
Orders.OnDatabaseUpdated += _menu.PopulateOrders;
|
|
|
|
_menu.CallShuttleButton.OnPressed += (_) =>
|
|
{
|
|
SendMessage(new CargoConsoleShuttleMessage());
|
|
};
|
|
_menu.OnItemSelected += (args) =>
|
|
{
|
|
if (args.Button.Parent is not CargoProductRow row)
|
|
return;
|
|
_product = row.Product;
|
|
_orderMenu.Requester.Text = "";
|
|
_orderMenu.Reason.Text = "";
|
|
_orderMenu.Amount.Value = 1;
|
|
_orderMenu.OpenCentered();
|
|
};
|
|
_menu.OnOrderApproved += ApproveOrder;
|
|
_menu.OnOrderCanceled += RemoveOrder;
|
|
_orderMenu.SubmitButton.OnPressed += (_) =>
|
|
{
|
|
if (AddOrder())
|
|
{
|
|
_orderMenu.Close();
|
|
}
|
|
};
|
|
|
|
_menu.OpenCentered();
|
|
|
|
}
|
|
|
|
protected override void UpdateState(BoundUserInterfaceState state)
|
|
{
|
|
base.UpdateState(state);
|
|
|
|
if (state is not CargoConsoleInterfaceState cState)
|
|
return;
|
|
if (RequestOnly != cState.RequestOnly)
|
|
{
|
|
RequestOnly = cState.RequestOnly;
|
|
_menu?.UpdateRequestOnly();
|
|
}
|
|
BankId = cState.BankId;
|
|
BankName = cState.BankName;
|
|
BankBalance = cState.BankBalance;
|
|
ShuttleCapacity = cState.ShuttleCapacity;
|
|
_menu?.UpdateCargoCapacity();
|
|
_menu?.UpdateBankData();
|
|
}
|
|
|
|
protected override void Dispose(bool disposing)
|
|
{
|
|
base.Dispose(disposing);
|
|
|
|
if (!disposing) return;
|
|
|
|
if (Market != null && _menu != null)
|
|
{
|
|
Market.OnDatabaseUpdated -= _menu.PopulateProducts;
|
|
Market.OnDatabaseUpdated -= _menu.PopulateCategories;
|
|
}
|
|
|
|
if (Orders != null && _menu != null)
|
|
{
|
|
Orders.OnDatabaseUpdated -= _menu.PopulateOrders;
|
|
}
|
|
|
|
_menu?.Dispose();
|
|
_orderMenu?.Dispose();
|
|
}
|
|
|
|
private bool AddOrder()
|
|
{
|
|
int orderAmt = _orderMenu?.Amount.Value ?? 0;
|
|
if (orderAmt < 1 || orderAmt > ShuttleCapacity.MaxCapacity)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
SendMessage(new CargoConsoleAddOrderMessage(
|
|
_orderMenu?.Requester.Text ?? "",
|
|
_orderMenu?.Reason.Text ?? "",
|
|
_product?.ID ?? "",
|
|
orderAmt));
|
|
|
|
return true;
|
|
}
|
|
|
|
private void RemoveOrder(ButtonEventArgs args)
|
|
{
|
|
if (args.Button.Parent?.Parent is not CargoOrderRow row || row.Order == null)
|
|
return;
|
|
|
|
SendMessage(new CargoConsoleRemoveOrderMessage(row.Order.OrderNumber));
|
|
}
|
|
|
|
private void ApproveOrder(ButtonEventArgs args)
|
|
{
|
|
if (args.Button.Parent?.Parent is not CargoOrderRow row || row.Order == null)
|
|
return;
|
|
|
|
if (ShuttleCapacity.CurrentCapacity == ShuttleCapacity.MaxCapacity)
|
|
return;
|
|
|
|
SendMessage(new CargoConsoleApproveOrderMessage(row.Order.OrderNumber));
|
|
_menu?.UpdateCargoCapacity();
|
|
}
|
|
}
|
|
}
|