diff --git a/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs b/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs index e6d8ec790d..18a0b9b078 100644 --- a/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs +++ b/Content.Server/Atmos/Piping/Other/Components/GasMinerComponent.cs @@ -25,6 +25,9 @@ namespace Content.Server.Atmos.Piping.Other.Components [DataField("spawnTemperature")] public float SpawnTemperature { get; set; } = Atmospherics.T20C; + /// + /// Number of moles created per second when the miner is working. + /// [ViewVariables(VVAccess.ReadWrite)] [DataField("spawnAmount")] public float SpawnAmount { get; set; } = Atmospherics.MolesCellStandard * 20f; diff --git a/Content.Server/Atmos/Piping/Other/EntitySystems/GasMinerSystem.cs b/Content.Server/Atmos/Piping/Other/EntitySystems/GasMinerSystem.cs index aa206dbc68..2505c8189f 100644 --- a/Content.Server/Atmos/Piping/Other/EntitySystems/GasMinerSystem.cs +++ b/Content.Server/Atmos/Piping/Other/EntitySystems/GasMinerSystem.cs @@ -24,18 +24,22 @@ namespace Content.Server.Atmos.Piping.Other.EntitySystems private void OnMinerUpdated(Entity ent, ref AtmosDeviceUpdateEvent args) { var miner = ent.Comp; - if (!CheckMinerOperation(ent, out var environment) || !miner.Enabled || !miner.SpawnGas.HasValue || miner.SpawnAmount <= 0f) + + // SpawnAmount is declared in mol/s so to get the amount of gas we hope to mine, we have to multiply this by + // how long we have been waiting to spawn it. + var toSpawn = miner.SpawnAmount * args.dt; + if (!CheckMinerOperation(ent, toSpawn, out var environment) || !miner.Enabled || !miner.SpawnGas.HasValue || toSpawn <= 0f) return; // Time to mine some gas. var merger = new GasMixture(1) { Temperature = miner.SpawnTemperature }; - merger.SetMoles(miner.SpawnGas.Value, miner.SpawnAmount); + merger.SetMoles(miner.SpawnGas.Value, toSpawn); _atmosphereSystem.Merge(environment, merger); } - private bool CheckMinerOperation(Entity ent, [NotNullWhen(true)] out GasMixture? environment) + private bool CheckMinerOperation(Entity ent, float toSpawn, [NotNullWhen(true)] out GasMixture? environment) { var (uid, miner) = ent; var transform = Transform(uid); @@ -59,7 +63,7 @@ namespace Content.Server.Atmos.Piping.Other.EntitySystems // External pressure above threshold. if (!float.IsInfinity(miner.MaxExternalPressure) && - environment.Pressure > miner.MaxExternalPressure - miner.SpawnAmount * miner.SpawnTemperature * Atmospherics.R / environment.Volume) + environment.Pressure > miner.MaxExternalPressure - toSpawn * miner.SpawnTemperature * Atmospherics.R / environment.Volume) { miner.Broken = true; return false; diff --git a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml index 2231fc4ddc..6d10b1521e 100644 --- a/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml +++ b/Resources/Prototypes/Entities/Structures/Piping/Atmospherics/miners.yml @@ -30,7 +30,7 @@ - type: AtmosDevice - type: GasMiner maxExternalPressure: 300 - spawnAmount: 200 + spawnAmount: 400 - type: entity name: O2 gas miner