ContainerNotEmpty.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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 ContainerNotEmpty : IGraphCondition
  12. {
  13. [DataField("container")] public string Container { get; private set; } = string.Empty;
  14. [DataField("examineText")] public string? ExamineText { get; private set; }
  15. [DataField("guideText")] public string? GuideText { get; private set; }
  16. [DataField("guideIcon")] public SpriteSpecifier? GuideIcon { get; private set; }
  17. public bool Condition(EntityUid uid, IEntityManager entityManager)
  18. {
  19. var containerSystem = entityManager.EntitySysManager.GetEntitySystem<ContainerSystem>();
  20. if (!containerSystem.TryGetContainer(uid, Container, out var container))
  21. return false;
  22. return container.ContainedEntities.Count != 0;
  23. }
  24. public bool DoExamine(ExaminedEvent args)
  25. {
  26. if (ExamineText == null)
  27. return false;
  28. var entity = args.Examined;
  29. if (!IoCManager.Resolve<IEntityManager>().TryGetComponent(entity, out ContainerManagerComponent? containerManager) ||
  30. !containerManager.TryGetContainer(Container, out var container)) return false;
  31. if (container.ContainedEntities.Count != 0)
  32. return false;
  33. args.PushMarkup(Loc.GetString(ExamineText));
  34. return true;
  35. }
  36. public IEnumerable<ConstructionGuideEntry> GenerateGuideEntry()
  37. {
  38. if (GuideText == null)
  39. yield break;
  40. yield return new ConstructionGuideEntry()
  41. {
  42. Localization = GuideText,
  43. Icon = GuideIcon,
  44. };
  45. }
  46. }
  47. }