using Content.Shared._CP14.Cargo; using Robust.Client.AutoGenerated; using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.XAML; using Robust.Shared.Timing; namespace Content.Client._CP14.TravelingStoreShip; [GenerateTypedNameReferences] public sealed partial class CP14StoreWindow : DefaultWindow { [Dependency] private readonly IGameTiming _timing = default!; private TimeSpan? _nextTravelTime; private bool _onStation; public CP14StoreWindow() { RobustXamlLoader.Load(this); IoCManager.InjectDependencies(this); Tabs.SetTabTitle(0, Loc.GetString("cp14-store-ui-tab-buy")); Tabs.SetTabTitle(1, Loc.GetString("cp14-store-ui-tab-sell")); } public void UpdateUI(CP14StoreUiState state) { UpdateProducts(state); _nextTravelTime = state.NextTravelTime; _onStation = state.OnStation; } protected override void FrameUpdate(FrameEventArgs args) { base.FrameUpdate(args); //Updating time if (_nextTravelTime is not null) { var time = _nextTravelTime.Value - _timing.CurTime; TravelTimeLabel.Text = $"{Loc.GetString(_onStation ? "cp14-store-ui-next-travel-out" : "cp14-store-ui-next-travel-in")} {Math.Max(time.Minutes, 0):00}:{Math.Max(time.Seconds, 0):00}"; } } private void UpdateProducts(CP14StoreUiState state) { BuyProductsContainer.RemoveAllChildren(); SellProductsContainer.RemoveAllChildren(); foreach (var product in state.ProductsBuy) { var control = new CP14StoreProductControl(product); control.ProductButton.OnPressed += _ => { SelectProduct(product); }; BuyProductsContainer.AddChild(control); } foreach (var product in state.ProductsSell) { var control = new CP14StoreProductControl(product); control.ProductButton.OnPressed += _ => { SelectProduct(product); }; SellProductsContainer.AddChild(control); } } private void SelectProduct(CP14StoreUiProductEntry? entry) { SelectedName.Text = entry is null ? string.Empty : $"[bold]{entry.Value.Name}[/bold]"; SelectedDesc.Text = entry is null ? string.Empty : entry.Value.Desc; } }