using Content.Client.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Components;
+using Content.Shared.Atmos.EntitySystems;
using Content.Shared.Atmos.Prototypes;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
private readonly IEntityManager _entManager;
private readonly IMapManager _mapManager;
+ private readonly SharedAtmosphereSystem _atmosphereSystem;
private readonly SharedMapSystem _mapSystem;
private readonly SharedTransformSystem _xformSys;
{
_entManager = entManager;
_mapManager = IoCManager.Resolve<IMapManager>();
+ _atmosphereSystem = entManager.System<SharedAtmosphereSystem>();
_mapSystem = entManager.System<SharedMapSystem>();
_xformSys = xformSys;
_shader = protoMan.Index(UnshadedShader).Instance();
for (var i = 0; i < _gasCount; i++)
{
- var gasPrototype = protoMan.Index<GasPrototype>(system.VisibleGasId[i].ToString());
+ var gasPrototype = _atmosphereSystem.GetGas(system.VisibleGasId[i]);
SpriteSpecifier overlay;
Assert.That(Atmospherics.GasAbbreviations, Has.Count.EqualTo(Atmospherics.TotalNumberOfGases),
$"GasAbbreviations size is not equal to TotalNumberOfGases.");
- // the ID for each gas has to be a number from 0 to TotalNumberOfGases-1
+ // the ID for each gas has to correspond to a value in the Gas enum (converted to a string)
foreach (var gas in gasProtos)
{
- var validInteger = int.TryParse(gas.ID, out var number);
- Assert.That(validInteger, Is.True, $"GasPrototype {gas.ID} has an invalid ID. It has to be an integer between 0 and TotalNumberOfGases - 1.");
- Assert.That(number, Is.InRange(0, Atmospherics.TotalNumberOfGases - 1), $"GasPrototype {gas.ID} has an invalid ID. It has to be an integer between 0 and TotalNumberOfGases - 1.");
+ Assert.That(Enum.TryParse<Gas>(gas.ID, out _), $"GasPrototype {gas.ID} has an invalid ID. It must correspond to a value in the {nameof(Gas)} enum.");
}
});
});
-using Content.Shared.Atmos.Components;
using Content.Shared.Atmos.Prototypes;
using Content.Shared.Body.Components;
using Content.Shared.Body.Systems;
InitializeBreathTool();
- for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
+ foreach (var gas in Enum.GetValues<Gas>())
{
- GasPrototypes[i] = _prototypeManager.Index<GasPrototype>(i.ToString());
- GasReagents[i] = GasPrototypes[i].Reagent;
+ var idx = (int)gas;
+ // Log an error if the corresponding prototype isn't found
+ if (!_prototypeManager.TryIndex<GasPrototype>(gas.ToString(), out var gasPrototype))
+ {
+ Log.Error($"Failed to find corresponding {nameof(GasPrototype)} for gas ID {(int)gas} ({gas}) with expected ID \"{gas.ToString()}\". Is your prototype named correctly?");
+ continue;
+ }
+ GasPrototypes[idx] = gasPrototype;
+ GasReagents[idx] = gasPrototype.Reagent;
}
}
protected bool PvsEnabled;
[Dependency] protected readonly IPrototypeManager ProtoMan = default!;
+ [Dependency] private readonly SharedAtmosphereSystem _atmosphere = default!;
/// <summary>
/// array of the ids of all visible gases.
for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++)
{
- var gasPrototype = ProtoMan.Index<GasPrototype>(i.ToString());
+ var gasPrototype = _atmosphere.GetGas(i);
if (!string.IsNullOrEmpty(gasPrototype.GasOverlayTexture) || !string.IsNullOrEmpty(gasPrototype.GasOverlaySprite) && !string.IsNullOrEmpty(gasPrototype.GasOverlayState))
visibleGases.Add(i);
}
- type: gas
- id: 0
+ id: Oxygen
name: gases-oxygen
specificHeat: 20
heatCapacityRatio: 1.4
pricePerMole: 0
- type: gas
- id: 1
+ id: Nitrogen
name: gases-nitrogen
specificHeat: 30
heatCapacityRatio: 1.4
pricePerMole: 0
- type: gas
- id: 2
+ id: CarbonDioxide
name: gases-co2
specificHeat: 30
heatCapacityRatio: 1.3
pricePerMole: 0
- type: gas
- id: 3
+ id: Plasma
name: gases-plasma
specificHeat: 200
heatCapacityRatio: 1.7
pricePerMole: 0
- type: gas
- id: 4
+ id: Tritium
name: gases-tritium
specificHeat: 10
heatCapacityRatio: 1.3
pricePerMole: 2.5
- type: gas
- id: 5
+ id: WaterVapor
name: gases-water-vapor
specificHeat: 40
heatCapacityRatio: 1.33
pricePerMole: 0
- type: gas
- id: 6
+ id: Ammonia
name: gases-ammonia
specificHeat: 20
heatCapacityRatio: 1.4
pricePerMole: 0.15
- type: gas
- id: 7
+ id: NitrousOxide
name: gases-n2o
specificHeat: 40
heatCapacityRatio: 1.3
pricePerMole: 0.1
- type: gas
- id: 8
+ id: Frezon
name: gases-frezon
specificHeat: 600 # Strongest by far
heatCapacityRatio: 1.33