diff --git a/Barotrauma/BarotraumaClient/Source/Items/DockingPort.cs b/Barotrauma/BarotraumaClient/Source/Items/DockingPort.cs index fee47afdb..0800ae328 100644 --- a/Barotrauma/BarotraumaClient/Source/Items/DockingPort.cs +++ b/Barotrauma/BarotraumaClient/Source/Items/DockingPort.cs @@ -62,6 +62,8 @@ namespace Barotrauma.Items.Components } } + if (!GameMain.DebugDraw) return; + if (bodies != null) { for (int i = 0; i < bodies.Length; i++) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs index b1244bcf8..b87de4e83 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/DockingPort.cs @@ -123,7 +123,7 @@ namespace Barotrauma.Items.Components if (joint != null) { CreateJoint(joint is WeldJoint); - LinkHullsToGap(); + LinkHullsToGaps(); } else if (dockingTarget.joint != null) { @@ -132,7 +132,7 @@ namespace Barotrauma.Items.Components { dockingTarget.CreateJoint(dockingTarget.joint is WeldJoint); } - dockingTarget.LinkHullsToGap(); + dockingTarget.LinkHullsToGaps(); } } } @@ -435,7 +435,7 @@ namespace Barotrauma.Items.Components gap = new Gap(new Rectangle(hullRects[0].X, hullRects[0].Y+2, hullRects[0].Width, 4), false, subs[0]); } - LinkHullsToGap(); + LinkHullsToGaps(); hulls[0].ShouldBeSaved = false; hulls[1].ShouldBeSaved = false; @@ -457,7 +457,7 @@ namespace Barotrauma.Items.Components } } - private void LinkHullsToGap() + private void LinkHullsToGaps() { if (gap == null || hulls == null || hulls[0] == null || hulls[1] == null) { @@ -495,6 +495,35 @@ namespace Barotrauma.Items.Components gap.linkedTo.Add(hulls[0]); } } + + for (int i = 0; i < 2; i++) + { + Gap gap = i == 0 ? door?.LinkedGap : dockingTarget?.door?.LinkedGap; + if (gap == null || gap.linkedTo.Count == 2) continue; + + if (IsHorizontal) + { + if (item.WorldPosition.X < dockingTarget.item.WorldPosition.X) + { + if (!gap.linkedTo.Contains(hulls[0])) gap.linkedTo.Add(hulls[0]); + } + else + { + if (!gap.linkedTo.Contains(hulls[1])) gap.linkedTo.Add(hulls[1]); + } + } + else + { + if (item.WorldPosition.Y < dockingTarget.item.WorldPosition.Y) + { + if (!gap.linkedTo.Contains(hulls[0])) gap.linkedTo.Add(hulls[0]); + } + else + { + if (!gap.linkedTo.Contains(hulls[1])) gap.linkedTo.Add(hulls[1]); + } + } + } } public void Undock() diff --git a/Barotrauma/BarotraumaShared/Source/Map/Gap.cs b/Barotrauma/BarotraumaShared/Source/Map/Gap.cs index e0e69ae50..b2b991092 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Gap.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Gap.cs @@ -641,7 +641,7 @@ namespace Barotrauma public override void OnMapLoaded() { - FindHulls(); + if (!DisableHullRechecks) FindHulls(); } public static void Load(XElement element, Submarine submarine) diff --git a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs index 2c1516ecf..7b5a55a5a 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/MapEntity.cs @@ -391,8 +391,11 @@ namespace Barotrauma mapEntityList[i].OnMapLoaded(); } - Item.UpdateHulls(); - Gap.UpdateHulls(); + if (sub != null) + { + Item.UpdateHulls(); + Gap.UpdateHulls(); + } foreach (LinkedSubmarine linkedSub in linkedSubs) {