ExaminableHungerSystem.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using Content.Shared.Examine;
  2. using Content.Shared.IdentityManagement;
  3. using Content.Shared.Nutrition.Components;
  4. namespace Content.Shared.Nutrition.EntitySystems;
  5. /// <inheritdoc cref="ExaminableHungerComponent"/>
  6. public sealed class ExaminableHungerSystem : EntitySystem
  7. {
  8. [Dependency] private readonly HungerSystem _hunger = default!;
  9. private EntityQuery<HungerComponent> _hungerQuery;
  10. public override void Initialize()
  11. {
  12. base.Initialize();
  13. _hungerQuery = GetEntityQuery<HungerComponent>();
  14. SubscribeLocalEvent<ExaminableHungerComponent, ExaminedEvent>(OnExamine);
  15. }
  16. /// <summary>
  17. /// Defines the text provided on examine.
  18. /// Changes depending on the amount of hunger the target has.
  19. /// </summary>
  20. private void OnExamine(Entity<ExaminableHungerComponent> entity, ref ExaminedEvent args)
  21. {
  22. var identity = Identity.Entity(entity, EntityManager);
  23. if (!_hungerQuery.TryComp(entity, out var hungerComp)
  24. || !entity.Comp.Descriptions.TryGetValue(_hunger.GetHungerThreshold(hungerComp), out var locId))
  25. {
  26. // Use a fallback message if the entity has no HungerComponent
  27. // or is missing a description for the current threshold
  28. locId = entity.Comp.NoHungerDescription;
  29. }
  30. var msg = Loc.GetString(locId, ("entity", identity));
  31. args.PushMarkup(msg);
  32. }
  33. }