From 17197a442d47e0448444855d9a5bf2b8a69a5662 Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 30 Jun 2016 18:37:10 +0300 Subject: [PATCH] Water can flow through vertical docking ports --- .../Source/Items/Components/DockingPort.cs | 31 ++++++++++++++++--- Subsurface/Source/Map/Gap.cs | 12 +++---- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Subsurface/Source/Items/Components/DockingPort.cs b/Subsurface/Source/Items/Components/DockingPort.cs index 43c5bda4f..6e73fe062 100644 --- a/Subsurface/Source/Items/Components/DockingPort.cs +++ b/Subsurface/Source/Items/Components/DockingPort.cs @@ -221,7 +221,20 @@ namespace Barotrauma.Items.Components } } - gap = new Gap(new Rectangle(hullRects[0].Right-2, hullRects[0].Y, 4, hullRects[0].Height), true, subs[0]); + gap = new Gap(new Rectangle(hullRects[0].Right - 2, hullRects[0].Y, 4, hullRects[0].Height), true, subs[0]); + + gap.linkedTo.Clear(); + if (hulls[0].WorldRect.X < hulls[1].WorldRect.X) + { + gap.linkedTo.Add(hulls[0]); + gap.linkedTo.Add(hulls[1]); + } + else + { + gap.linkedTo.Add(hulls[1]); + gap.linkedTo.Add(hulls[0]); + } + } else @@ -249,13 +262,21 @@ namespace Barotrauma.Items.Components //} } - gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y+2, hullRects[0].Width, 4), true, subs[0]); + gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y+2, hullRects[0].Width, 4), false, subs[0]); + gap.linkedTo.Clear(); + if (hulls[0].WorldRect.Y > hulls[1].WorldRect.Y) + { + gap.linkedTo.Add(hulls[0]); + gap.linkedTo.Add(hulls[1]); + } + else + { + gap.linkedTo.Add(hulls[1]); + gap.linkedTo.Add(hulls[0]); + } } - gap.linkedTo.Clear(); - gap.linkedTo.Add(hulls[0]); - gap.linkedTo.Add(hulls[1]); foreach (Body body in bodies) { diff --git a/Subsurface/Source/Map/Gap.cs b/Subsurface/Source/Map/Gap.cs index a908aed27..7c266cac7 100644 --- a/Subsurface/Source/Map/Gap.cs +++ b/Subsurface/Source/Map/Gap.cs @@ -434,11 +434,11 @@ namespace Barotrauma else { //lower room is full of water - if (hull2.Pressure > hull1.Pressure) + if ((hull2.Pressure + subOffset.Y) > hull1.Pressure) { float delta = Math.Min(hull2.Volume - hull2.FullVolume + Hull.MaxCompress / 2.0f, deltaTime * 8000.0f * sizeModifier); - flowForce = new Vector2(0.0f, Math.Min(hull2.Pressure - hull1.Pressure, 500.0f)); + flowForce = new Vector2(0.0f, Math.Min((hull2.Pressure + subOffset.Y) - hull1.Pressure, 500.0f)); delta = Math.Max(delta, 0.0f); hull1.Volume += delta; @@ -448,7 +448,7 @@ namespace Barotrauma if (hull1.Volume > hull1.FullVolume) { - hull1.Pressure = Math.Max(hull1.Pressure, (hull1.Pressure + hull2.Pressure) / 2); + hull1.Pressure = Math.Max(hull1.Pressure, (hull1.Pressure + (hull2.Pressure + subOffset.Y)) / 2); } } @@ -461,16 +461,16 @@ namespace Barotrauma float delta = Math.Min(hull1.Volume, deltaTime * 25000f * sizeModifier); //make sure not to place more water to the target room than it can hold delta = Math.Min(delta, (hull2.FullVolume + Math.Max(hull1.Volume - hull1.FullVolume, 0.0f)) - hull2.Volume + Hull.MaxCompress / 4.0f); - + hull1.Volume -= delta; hull2.Volume += delta; if (hull2.Volume > hull2.FullVolume) { - hull2.Pressure = Math.Max(hull2.Pressure, (hull1.Pressure + hull2.Pressure) / 2); + hull2.Pressure = Math.Max(hull2.Pressure, ((hull1.Pressure - subOffset.Y) + hull2.Pressure) / 2); } - flowForce = new Vector2(0.0f,-delta); + flowForce = new Vector2(0.0f, -delta); flowForce.X = hull1.WaveY[hull1.GetWaveIndex(rect.X)] - hull1.WaveY[hull1.GetWaveIndex(rect.Right)] * 10.0f;