Decouple GasPrototype IDs from Gas Enum (#41266)
* Remove final enum coupling from gas YAML * Fix comment * Fix test * Apply suggestions from code review --------- Co-authored-by: slarticodefast <161409025+slarticodefast@users.noreply.github.com>
This commit is contained in:
parent
fc52f91396
commit
6cecca668a
|
|
@ -3,6 +3,7 @@ using Content.Client.Atmos.Components;
|
|||
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;
|
||||
|
|
@ -23,6 +24,7 @@ namespace Content.Client.Atmos.Overlays
|
|||
|
||||
private readonly IEntityManager _entManager;
|
||||
private readonly IMapManager _mapManager;
|
||||
private readonly SharedAtmosphereSystem _atmosphereSystem;
|
||||
private readonly SharedMapSystem _mapSystem;
|
||||
private readonly SharedTransformSystem _xformSys;
|
||||
|
||||
|
|
@ -54,6 +56,7 @@ namespace Content.Client.Atmos.Overlays
|
|||
{
|
||||
_entManager = entManager;
|
||||
_mapManager = IoCManager.Resolve<IMapManager>();
|
||||
_atmosphereSystem = entManager.System<SharedAtmosphereSystem>();
|
||||
_mapSystem = entManager.System<SharedMapSystem>();
|
||||
_xformSys = xformSys;
|
||||
_shader = protoMan.Index(UnshadedShader).Instance();
|
||||
|
|
@ -67,7 +70,7 @@ namespace Content.Client.Atmos.Overlays
|
|||
|
||||
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;
|
||||
|
||||
|
|
|
|||
|
|
@ -38,12 +38,10 @@ public sealed class ConstantsTest
|
|||
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.");
|
||||
}
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,4 +1,3 @@
|
|||
using Content.Shared.Atmos.Components;
|
||||
using Content.Shared.Atmos.Prototypes;
|
||||
using Content.Shared.Body.Components;
|
||||
using Content.Shared.Body.Systems;
|
||||
|
|
@ -25,10 +24,17 @@ namespace Content.Shared.Atmos.EntitySystems
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ namespace Content.Shared.Atmos.EntitySystems
|
|||
protected bool PvsEnabled;
|
||||
|
||||
[Dependency] protected readonly IPrototypeManager ProtoMan = default!;
|
||||
[Dependency] private readonly SharedAtmosphereSystem _atmosphere = default!;
|
||||
|
||||
/// <summary>
|
||||
/// array of the ids of all visible gases.
|
||||
|
|
@ -28,7 +29,7 @@ namespace Content.Shared.Atmos.EntitySystems
|
|||
|
||||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
- type: gas
|
||||
id: 0
|
||||
id: Oxygen
|
||||
name: gases-oxygen
|
||||
specificHeat: 20
|
||||
heatCapacityRatio: 1.4
|
||||
|
|
@ -8,7 +8,7 @@
|
|||
reagent: Oxygen
|
||||
|
||||
- type: gas
|
||||
id: 1
|
||||
id: Nitrogen
|
||||
name: gases-nitrogen
|
||||
specificHeat: 30
|
||||
heatCapacityRatio: 1.4
|
||||
|
|
@ -17,7 +17,7 @@
|
|||
reagent: Nitrogen
|
||||
|
||||
- type: gas
|
||||
id: 2
|
||||
id: CarbonDioxide
|
||||
name: gases-co2
|
||||
specificHeat: 30
|
||||
heatCapacityRatio: 1.3
|
||||
|
|
@ -26,7 +26,7 @@
|
|||
reagent: CarbonDioxide
|
||||
|
||||
- type: gas
|
||||
id: 3
|
||||
id: Plasma
|
||||
name: gases-plasma
|
||||
specificHeat: 200
|
||||
heatCapacityRatio: 1.7
|
||||
|
|
@ -37,7 +37,7 @@
|
|||
reagent: Plasma
|
||||
|
||||
- type: gas
|
||||
id: 4
|
||||
id: Tritium
|
||||
name: gases-tritium
|
||||
specificHeat: 10
|
||||
heatCapacityRatio: 1.3
|
||||
|
|
@ -49,7 +49,7 @@
|
|||
pricePerMole: 2.5
|
||||
|
||||
- type: gas
|
||||
id: 5
|
||||
id: WaterVapor
|
||||
name: gases-water-vapor
|
||||
specificHeat: 40
|
||||
heatCapacityRatio: 1.33
|
||||
|
|
@ -60,7 +60,7 @@
|
|||
reagent: Water
|
||||
|
||||
- type: gas
|
||||
id: 6
|
||||
id: Ammonia
|
||||
name: gases-miasma # DeltaV
|
||||
specificHeat: 20
|
||||
heatCapacityRatio: 1.4
|
||||
|
|
@ -74,7 +74,7 @@
|
|||
pricePerMole: 0.15
|
||||
|
||||
- type: gas
|
||||
id: 7
|
||||
id: NitrousOxide
|
||||
name: gases-n2o
|
||||
specificHeat: 40
|
||||
heatCapacityRatio: 1.3
|
||||
|
|
@ -84,7 +84,7 @@
|
|||
pricePerMole: 1 # DeltaV - Change back to 1
|
||||
|
||||
- type: gas
|
||||
id: 8
|
||||
id: Frezon
|
||||
name: gases-frezon
|
||||
specificHeat: 600 # Strongest by far
|
||||
heatCapacityRatio: 1.33
|
||||
|
|
|
|||
Loading…
Reference in New Issue