SharedGasMinerSystem.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. using Content.Shared.Atmos.Components;
  2. using Content.Shared.Examine;
  3. using Content.Shared.Temperature;
  4. namespace Content.Shared.Atmos.EntitySystems;
  5. public abstract class SharedGasMinerSystem : EntitySystem
  6. {
  7. [Dependency] private readonly SharedAtmosphereSystem _sharedAtmosphereSystem = default!;
  8. public override void Initialize()
  9. {
  10. base.Initialize();
  11. SubscribeLocalEvent<GasMinerComponent, ExaminedEvent>(OnExamine);
  12. }
  13. private void OnExamine(Entity<GasMinerComponent> ent, ref ExaminedEvent args)
  14. {
  15. var component = ent.Comp;
  16. using (args.PushGroup(nameof(GasMinerComponent)))
  17. {
  18. args.PushMarkup(Loc.GetString("gas-miner-mines-text",
  19. ("gas", Loc.GetString(_sharedAtmosphereSystem.GetGas(component.SpawnGas).Name))));
  20. args.PushText(Loc.GetString("gas-miner-amount-text",
  21. ("moles", $"{component.SpawnAmount:0.#}")));
  22. args.PushText(Loc.GetString("gas-miner-temperature-text",
  23. ("tempK", $"{component.SpawnTemperature:0.#}"),
  24. ("tempC", $"{TemperatureHelpers.KelvinToCelsius(component.SpawnTemperature):0.#}")));
  25. if (component.MaxExternalAmount < float.PositiveInfinity)
  26. {
  27. args.PushText(Loc.GetString("gas-miner-moles-cutoff-text",
  28. ("moles", $"{component.MaxExternalAmount:0.#}")));
  29. }
  30. if (component.MaxExternalPressure < float.PositiveInfinity)
  31. {
  32. args.PushText(Loc.GetString("gas-miner-pressure-cutoff-text",
  33. ("pressure", $"{component.MaxExternalPressure:0.#}")));
  34. }
  35. args.AddMarkup(component.MinerState switch
  36. {
  37. GasMinerState.Disabled => Loc.GetString("gas-miner-state-disabled-text"),
  38. GasMinerState.Idle => Loc.GetString("gas-miner-state-idle-text"),
  39. GasMinerState.Working => Loc.GetString("gas-miner-state-working-text"),
  40. // C# pattern matching is not exhaustive for enums
  41. _ => throw new IndexOutOfRangeException(nameof(component.MinerState)),
  42. });
  43. }
  44. }
  45. }