1
0

SealableSystem.cs 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using Content.Shared.Examine;
  2. using Content.Shared.Nutrition.EntitySystems;
  3. using Content.Shared.Nutrition.Components;
  4. namespace Content.Shared.Nutrition.EntitySystems;
  5. public sealed partial class SealableSystem : EntitySystem
  6. {
  7. [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
  8. public override void Initialize()
  9. {
  10. base.Initialize();
  11. SubscribeLocalEvent<SealableComponent, ExaminedEvent>(OnExamined, after: new[] { typeof(OpenableSystem) });
  12. SubscribeLocalEvent<SealableComponent, OpenableOpenedEvent>(OnOpened);
  13. }
  14. private void OnExamined(EntityUid uid, SealableComponent comp, ExaminedEvent args)
  15. {
  16. if (!args.IsInDetailsRange)
  17. return;
  18. var sealedText = comp.Sealed ? Loc.GetString(comp.ExamineTextSealed) : Loc.GetString(comp.ExamineTextUnsealed);
  19. args.PushMarkup(sealedText);
  20. }
  21. private void OnOpened(EntityUid uid, SealableComponent comp, OpenableOpenedEvent args)
  22. {
  23. comp.Sealed = false;
  24. Dirty(uid, comp);
  25. UpdateAppearance(uid, comp);
  26. }
  27. /// <summary>
  28. /// Update seal visuals to the current value.
  29. /// </summary>
  30. public void UpdateAppearance(EntityUid uid, SealableComponent? comp = null, AppearanceComponent? appearance = null)
  31. {
  32. if (!Resolve(uid, ref comp))
  33. return;
  34. _appearance.SetData(uid, SealableVisuals.Sealed, comp.Sealed, appearance);
  35. }
  36. /// <summary>
  37. /// Returns true if the entity's seal is intact.
  38. /// Items without SealableComponent are considered unsealed.
  39. /// </summary>
  40. public bool IsSealed(EntityUid uid, SealableComponent? comp = null)
  41. {
  42. if (!Resolve(uid, ref comp, false))
  43. return false;
  44. return comp.Sealed;
  45. }
  46. }