ContainerEmpty.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using Content.Shared.Construction;
  2. using Content.Shared.Examine;
  3. using JetBrains.Annotations;
  4. using Robust.Server.Containers;
  5. using Robust.Shared.Containers;
  6. using Robust.Shared.Utility;
  7. namespace Content.Server.Construction.Conditions
  8. {
  9. [UsedImplicitly]
  10. [DataDefinition]
  11. public sealed partial class ContainerEmpty : IGraphCondition
  12. {
  13. [DataField("container")]
  14. public string Container { get; private set; } = string.Empty;
  15. [DataField("examineText")]
  16. public string? ExamineText { get; private set; }
  17. [DataField("guideStep")]
  18. public string? GuideText { get; private set; }
  19. [DataField("guideIcon")]
  20. public SpriteSpecifier? GuideIcon { get; private set; }
  21. public bool Condition(EntityUid uid, IEntityManager entityManager)
  22. {
  23. var containerSystem = entityManager.EntitySysManager.GetEntitySystem<ContainerSystem>();
  24. if (!containerSystem.TryGetContainer(uid, Container, out var container))
  25. return false;
  26. return container.ContainedEntities.Count == 0;
  27. }
  28. public bool DoExamine(ExaminedEvent args)
  29. {
  30. if (string.IsNullOrEmpty(ExamineText))
  31. return false;
  32. var entity = args.Examined;
  33. if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(entity, out ContainerManagerComponent? containerManager) ||
  34. !containerManager.TryGetContainer(Container, out var container)) return false;
  35. if (container.ContainedEntities.Count == 0)
  36. return false;
  37. args.PushMarkup(Loc.GetString(ExamineText));
  38. return true;
  39. }
  40. public IEnumerable<ConstructionGuideEntry> GenerateGuideEntry()
  41. {
  42. if (string.IsNullOrEmpty(GuideText))
  43. yield break;
  44. yield return new ConstructionGuideEntry()
  45. {
  46. Localization = GuideText,
  47. Icon = GuideIcon,
  48. };
  49. }
  50. }
  51. }