-
Notifications
You must be signed in to change notification settings - Fork 592
Expand file tree
/
Copy pathNitriumProductionReaction.cs
More file actions
47 lines (38 loc) · 1.93 KB
/
Copy pathNitriumProductionReaction.cs
File metadata and controls
47 lines (38 loc) · 1.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
using Content.Server.Atmos;
using Content.Server.Atmos.EntitySystems;
using Content.Shared.Atmos;
using Content.Shared.Atmos.Reactions;
using JetBrains.Annotations;
namespace Content.Server._Funkystation.Atmos.Reactions;
/// <summary>
/// Funky Atmos - /tg/ gases
/// Produces Nitrium by mixing Tritium, Nitrogen and BZ at temperatures above 1500K.
/// </summary>
[UsedImplicitly]
public sealed partial class NitriumProductionReaction : IGasReactionEffect
{
public ReactionResult React(GasMixture mixture, IGasMixtureHolder? holder, AtmosphereSystem atmosphereSystem, float heatScale)
{
if (mixture.Temperature > 20f && mixture.GetMoles(Gas.HyperNoblium) >= 5f)
return ReactionResult.NoReaction;
var initTritium = mixture.GetMoles(Gas.Tritium);
var initNitrogen = mixture.GetMoles(Gas.Nitrogen);
var initBZ = mixture.GetMoles(Gas.BZ);
var efficiency = Math.Min(mixture.Temperature / 2984f, Math.Min(initBZ * 20f, Math.Min(initTritium, initNitrogen)));
var tritiumRemoved = efficiency;
var nitrogenRemoved = efficiency;
var bzRemoved = efficiency * 0.05f;
var nitriumProduced = efficiency;
if (efficiency <= 0 || initTritium - tritiumRemoved < 0 || initNitrogen - nitrogenRemoved < 0 || initBZ - bzRemoved < 0)
return ReactionResult.NoReaction;
mixture.AdjustMoles(Gas.Tritium, -tritiumRemoved);
mixture.AdjustMoles(Gas.Nitrogen, -nitrogenRemoved);
mixture.AdjustMoles(Gas.BZ, -bzRemoved);
mixture.AdjustMoles(Gas.Nitrium, nitriumProduced);
var energyReleased = efficiency * Atmospherics.NitriumProductionEnergy;
var heatCap = atmosphereSystem.GetHeatCapacity(mixture, true);
if (heatCap > Atmospherics.MinimumHeatCapacity)
mixture.Temperature = Math.Max((mixture.Temperature * heatCap + energyReleased) / heatCap, Atmospherics.TCMB);
return ReactionResult.Reacting;
}
}