| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- using System.Linq;
- using Content.Client.Message;
- using Content.Shared.Salvage;
- using Content.Shared.Salvage.Magnet;
- using Robust.Client.UserInterface;
- using Robust.Client.UserInterface.Controls;
- namespace Content.Client.Salvage.UI;
- public sealed class SalvageMagnetBoundUserInterface : BoundUserInterface
- {
- [Dependency] private readonly IEntityManager _entManager = default!;
- private OfferingWindow? _window;
- public SalvageMagnetBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
- {
- IoCManager.InjectDependencies(this);
- }
- protected override void Open()
- {
- base.Open();
- _window = this.CreateWindowCenteredLeft<OfferingWindow>();
- _window.Title = Loc.GetString("salvage-magnet-window-title");
- }
- protected override void UpdateState(BoundUserInterfaceState state)
- {
- base.UpdateState(state);
- if (state is not SalvageMagnetBoundUserInterfaceState current || _window == null)
- return;
- _window.ClearOptions();
- var salvageSystem = _entManager.System<SharedSalvageSystem>();
- _window.NextOffer = current.NextOffer;
- _window.Progression = current.EndTime ?? TimeSpan.Zero;
- _window.Claimed = current.EndTime != null;
- _window.Cooldown = current.Cooldown;
- _window.ProgressionCooldown = current.Duration;
- for (var i = 0; i < current.Offers.Count; i++)
- {
- var seed = current.Offers[i];
- var offer = salvageSystem.GetSalvageOffering(seed);
- var option = new OfferingWindowOption();
- option.MinWidth = 210f;
- option.Disabled = current.EndTime != null;
- option.Claimed = current.ActiveSeed == seed;
- var claimIndex = i;
- option.ClaimPressed += _ =>
- {
- SendMessage(new MagnetClaimOfferEvent
- {
- Index = claimIndex
- });
- };
- switch (offer)
- {
- case AsteroidOffering asteroid:
- option.Title = Loc.GetString($"dungeon-config-proto-{asteroid.Id}");
- var layerKeys = asteroid.MarkerLayers.Keys.ToList();
- layerKeys.Sort();
- foreach (var resource in layerKeys)
- {
- var count = asteroid.MarkerLayers[resource];
- var container = new BoxContainer
- {
- Orientation = BoxContainer.LayoutOrientation.Horizontal,
- HorizontalExpand = true,
- };
- var resourceLabel = new Label
- {
- Text = Loc.GetString("salvage-magnet-resources",
- ("resource", resource)),
- HorizontalAlignment = Control.HAlignment.Left,
- };
- var countLabel = new Label
- {
- Text = Loc.GetString("salvage-magnet-resources-count", ("count", count)),
- HorizontalAlignment = Control.HAlignment.Right,
- HorizontalExpand = true,
- };
- container.AddChild(resourceLabel);
- container.AddChild(countLabel);
- option.AddContent(container);
- }
- break;
- case DebrisOffering debris:
- option.Title = Loc.GetString($"salvage-magnet-debris-{debris.Id}");
- break;
- case SalvageOffering salvage:
- option.Title = Loc.GetString($"salvage-map-wreck");
- var salvContainer = new BoxContainer
- {
- Orientation = BoxContainer.LayoutOrientation.Horizontal,
- HorizontalExpand = true,
- };
- var sizeLabel = new Label
- {
- Text = Loc.GetString("salvage-map-wreck-desc-size"),
- HorizontalAlignment = Control.HAlignment.Left,
- };
- var sizeValueLabel = new RichTextLabel
- {
- HorizontalAlignment = Control.HAlignment.Right,
- HorizontalExpand = true,
- };
- sizeValueLabel.SetMarkup(Loc.GetString(salvage.SalvageMap.SizeString));
- salvContainer.AddChild(sizeLabel);
- salvContainer.AddChild(sizeValueLabel);
- option.AddContent(salvContainer);
- break;
- default:
- throw new ArgumentOutOfRangeException();
- }
- _window.AddOption(option);
- }
- }
- }
|