Relinking dockingport hulls to gaps after flipping the sub

This commit is contained in:
Regalis
2017-01-26 19:57:21 +02:00
parent 282c2b75d4
commit 5afca48a82
@@ -132,6 +132,7 @@ namespace Barotrauma.Items.Components
if (joint != null) if (joint != null)
{ {
CreateJoint(joint is WeldJoint); CreateJoint(joint is WeldJoint);
LinkHullsToGap();
} }
else if (dockingTarget.joint != null) else if (dockingTarget.joint != null)
{ {
@@ -140,6 +141,7 @@ namespace Barotrauma.Items.Components
{ {
dockingTarget.CreateJoint(dockingTarget.joint is WeldJoint); 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]); 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(); LinkHullsToGap();
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 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]); 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; if (gapId != null) gap.ID = (ushort)gapId;
gap.linkedTo.Clear(); LinkHullsToGap();
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]);
}
} }
item.linkedTo.Add(hulls[0]); 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() public void Undock()
{ {
if (dockingTarget == null || !docked) return; if (dockingTarget == null || !docked) return;