From 5afca48a82f2e28d4691d1fa9e3714da91b66b8a Mon Sep 17 00:00:00 2001 From: Regalis Date: Thu, 26 Jan 2017 19:57:21 +0200 Subject: [PATCH] Relinking dockingport hulls to gaps after flipping the sub --- .../Source/Items/Components/DockingPort.cs | 67 +++++++++++++------ 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/Subsurface/Source/Items/Components/DockingPort.cs b/Subsurface/Source/Items/Components/DockingPort.cs index 2d130e0f0..1ace6301f 100644 --- a/Subsurface/Source/Items/Components/DockingPort.cs +++ b/Subsurface/Source/Items/Components/DockingPort.cs @@ -132,6 +132,7 @@ namespace Barotrauma.Items.Components if (joint != null) { CreateJoint(joint is WeldJoint); + LinkHullsToGap(); } else if (dockingTarget.joint != null) { @@ -140,6 +141,7 @@ namespace Barotrauma.Items.Components { dockingTarget.CreateJoint(dockingTarget.joint is WeldJoint); } + dockingTarget.LinkHullsToGap(); } } } @@ -389,18 +391,9 @@ namespace Barotrauma.Items.Components } gap = new Gap(new Rectangle(hullRects[0].Right - 2, hullRects[0].Y, 4, hullRects[0].Height), true, subs[0]); + if (gapId != null) gap.ID = (ushort)gapId; - 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]); - } + LinkHullsToGap(); } else { @@ -425,17 +418,7 @@ namespace Barotrauma.Items.Components gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y+2, hullRects[0].Width, 4), false, subs[0]); if (gapId != null) gap.ID = (ushort)gapId; - 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]); - } + LinkHullsToGap(); } item.linkedTo.Add(hulls[0]); @@ -459,6 +442,46 @@ namespace Barotrauma.Items.Components } } + private void LinkHullsToGap() + { + if (gap == null || hulls == null || hulls[0] == null || hulls[1] == null) + { +#if DEBUG + DebugConsole.ThrowError("Failed to link dockingport hulls to gap"); +#endif + return; + } + + gap.linkedTo.Clear(); + + if (IsHorizontal) + { + 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 + { + 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]); + } + } + } + public void Undock() { if (dockingTarget == null || !docked) return;