CrewManifestListing.cs 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Shared.CrewManifest;
  2. using Content.Shared.Roles;
  3. using Robust.Client.GameObjects;
  4. using Robust.Client.UserInterface.Controls;
  5. using Robust.Shared.Prototypes;
  6. using Robust.Shared.Utility;
  7. namespace Content.Client.CrewManifest.UI;
  8. public sealed class CrewManifestListing : BoxContainer
  9. {
  10. [Dependency] private readonly IEntitySystemManager _entitySystem = default!;
  11. [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
  12. private readonly SpriteSystem _spriteSystem;
  13. public CrewManifestListing()
  14. {
  15. IoCManager.InjectDependencies(this);
  16. _spriteSystem = _entitySystem.GetEntitySystem<SpriteSystem>();
  17. }
  18. public void AddCrewManifestEntries(CrewManifestEntries entries)
  19. {
  20. var entryDict = new Dictionary<DepartmentPrototype, List<CrewManifestEntry>>();
  21. foreach (var entry in entries.Entries)
  22. {
  23. foreach (var department in _prototypeManager.EnumeratePrototypes<DepartmentPrototype>())
  24. {
  25. // this is a little expensive, and could be better
  26. if (department.Roles.Contains(entry.JobPrototype))
  27. {
  28. entryDict.GetOrNew(department).Add(entry);
  29. }
  30. }
  31. }
  32. var entryList = new List<(DepartmentPrototype section, List<CrewManifestEntry> entries)>();
  33. foreach (var (section, listing) in entryDict)
  34. {
  35. entryList.Add((section, listing));
  36. }
  37. entryList.Sort((a, b) => DepartmentUIComparer.Instance.Compare(a.section, b.section));
  38. foreach (var item in entryList)
  39. {
  40. AddChild(new CrewManifestSection(_prototypeManager, _spriteSystem, item.section, item.entries));
  41. }
  42. }
  43. }