CryostorageMenu.xaml.cs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System.Linq;
  2. using Content.Client.UserInterface.Controls;
  3. using Content.Shared.Bed.Cryostorage;
  4. using Robust.Client.AutoGenerated;
  5. using Robust.Client.UserInterface;
  6. using Robust.Client.UserInterface.XAML;
  7. using Robust.Shared.Collections;
  8. using Robust.Shared.Utility;
  9. namespace Content.Client.Bed.Cryostorage;
  10. [GenerateTypedNameReferences]
  11. public sealed partial class CryostorageMenu : FancyWindow
  12. {
  13. public event Action<NetEntity, string>? SlotRemoveButtonPressed;
  14. public event Action<NetEntity, string>? HandRemoveButtonPressed;
  15. public CryostorageMenu()
  16. {
  17. RobustXamlLoader.Load(this);
  18. }
  19. public void UpdateState(CryostorageBuiState state)
  20. {
  21. var data = state.PlayerData;
  22. var nonexistentEntries = new ValueList<CryostorageContainedPlayerData>(data);
  23. var children = new ValueList<Control>(EntriesContainer.Children);
  24. foreach (var control in children)
  25. {
  26. if (control is not CryostorageEntryControl entryControl)
  27. continue;
  28. if (data.Where(p => p.PlayerEnt == entryControl.Entity).FirstOrNull() is not { } datum)
  29. {
  30. EntriesContainer.Children.Remove(entryControl);
  31. continue;
  32. }
  33. nonexistentEntries.Remove(datum);
  34. entryControl.Update(datum);
  35. }
  36. foreach (var player in nonexistentEntries)
  37. {
  38. var control = new CryostorageEntryControl(player);
  39. control.SlotRemoveButtonPressed += a => SlotRemoveButtonPressed?.Invoke(player.PlayerEnt, a);
  40. control.HandRemoveButtonPressed += a => HandRemoveButtonPressed?.Invoke(player.PlayerEnt, a);
  41. EntriesContainer.Children.Add(control);
  42. }
  43. EmptyLabel.Visible = data.Count == 0;
  44. }
  45. }