Relinking dockingport hulls to gaps after flipping the sub
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user