Fix breathing once and for all (#1996)

* Fix breathing

* WIP changes because I don't trust git stash after 2 weeks

* My imports

* Add gasping, adjust breathing values and fix test

* Make the gasp message appear to others

* Add PopupMessageEveryone extension

* Change used percentage to use a single number instead

* Remove unnecessary logging

* Fix air consistency test

* Add test map to SkippedMaps array
This commit is contained in:
DrSmugleaf
2020-09-12 22:52:50 +02:00
committed by GitHub
parent 68bf099cbe
commit 65d7775665
7 changed files with 543 additions and 72 deletions

View File

@@ -1,7 +1,9 @@
using System.Linq;
using Content.Server.Atmos;
using Content.Server.GameObjects.Components.Chemistry;
using Content.Server.GameObjects.Components.Metabolism;
using Content.Server.Interfaces;
using Content.Shared.Atmos;
using Content.Shared.Chemistry;
using Robust.Shared.GameObjects;
using Robust.Shared.Serialization;
@@ -45,7 +47,7 @@ namespace Content.Server.GameObjects.Components.Body.Circulatory
{
base.ExposeData(serializer);
Air = new GasMixture(6);
Air = new GasMixture(6) {Temperature = Atmospherics.NormalBodyTemperature};
serializer.DataField(ref _initialMaxVolume, "maxVolume", ReagentUnit.New(250));
}
@@ -68,17 +70,29 @@ namespace Content.Server.GameObjects.Components.Body.Circulatory
return true;
}
public void PumpToxins(GasMixture into, float pressure)
public void PumpToxins(GasMixture to)
{
if (!Owner.TryGetComponent(out MetabolismComponent metabolism))
{
Air.PumpGasTo(into, pressure);
to.Merge(Air);
Air.Clear();
return;
}
var toxins = metabolism.Clean(this);
var toOld = to.Gases.ToArray();
to.Merge(toxins);
for (var i = 0; i < toOld.Length; i++)
{
var newAmount = to.GetMoles(i);
var oldAmount = toOld[i];
var delta = newAmount - oldAmount;
toxins.AdjustMoles(i, -delta);
}
toxins.PumpGasTo(into, pressure);
Air.Merge(toxins);
}
}