From 6c80a023547fe4e06d3d4508151801ca09f2b7ce Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 18 Jul 2017 19:40:25 +0300 Subject: [PATCH] Characters don't consume oxygen from hulls if their OxygenAvailable is higher than the amount of oxygen in the hull (= if they're wearing a diving mask or a suit) --- .../Source/Characters/Character.cs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index 0c4276b8e..b2efca0ec 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1425,12 +1425,23 @@ namespace Barotrauma if (!AnimController.HeadInWater && AnimController.CurrentHull != null) { + //don't decrease the amount of oxygen in the hull if the character has more oxygen available than the hull + //(i.e. if the character has some external source of oxygen) + if (OxygenAvailable * 0.98f < AnimController.CurrentHull.OxygenPercentage) + { + AnimController.CurrentHull.Oxygen -= Hull.OxygenConsumptionSpeed * deltaTime; + } hullAvailableOxygen = AnimController.CurrentHull.OxygenPercentage; - - AnimController.CurrentHull.Oxygen -= Hull.OxygenConsumptionSpeed * deltaTime; } - - OxygenAvailable += Math.Sign(hullAvailableOxygen - oxygenAvailable) * deltaTime * 50.0f; + + if (hullAvailableOxygen < OxygenAvailable) + { + OxygenAvailable -= Math.Max(deltaTime * 50.0f, oxygenAvailable - hullAvailableOxygen); + } + else + { + OxygenAvailable += Math.Min(deltaTime * 50.0f, hullAvailableOxygen - oxygenAvailable); + } } partial void UpdateOxygenProjSpecific(float prevOxygen);