SolutionEmpty.cs 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using Content.Shared.Chemistry.EntitySystems;
  2. using Content.Shared.Construction;
  3. using Content.Shared.Examine;
  4. namespace Content.Server.Construction.Conditions;
  5. /// <summary>
  6. /// Requires that a certain solution be empty to proceed.
  7. /// </summary>
  8. [DataDefinition]
  9. public sealed partial class SolutionEmpty : IGraphCondition
  10. {
  11. /// <summary>
  12. /// The solution that needs to be empty.
  13. /// </summary>
  14. [DataField]
  15. public string Solution;
  16. public bool Condition(EntityUid uid, IEntityManager entMan)
  17. {
  18. var containerSys = entMan.System<SharedSolutionContainerSystem>();
  19. if (!containerSys.TryGetSolution(uid, Solution, out _, out var solution))
  20. return false;
  21. return solution.Volume == 0;
  22. }
  23. public bool DoExamine(ExaminedEvent args)
  24. {
  25. var entMan = IoCManager.Resolve<IEntityManager>();
  26. var uid = args.Examined;
  27. var containerSys = entMan.System<SharedSolutionContainerSystem>();
  28. if (!containerSys.TryGetSolution(uid, Solution, out _, out var solution))
  29. return false;
  30. // already empty so dont show examine
  31. if (solution.Volume == 0)
  32. return false;
  33. args.PushMarkup(Loc.GetString("construction-examine-condition-solution-empty"));
  34. return true;
  35. }
  36. public IEnumerable<ConstructionGuideEntry> GenerateGuideEntry()
  37. {
  38. yield return new ConstructionGuideEntry()
  39. {
  40. Localization = "construction-guide-condition-solution-empty"
  41. };
  42. }
  43. }