38f1ddb...178a853: v0.8.9.1, removed content folder

This commit is contained in:
Joonas Rikkonen
2019-03-18 19:46:58 +02:00
parent 38f1ddb6fe
commit 6c0679c297
1054 changed files with 151673 additions and 144931 deletions
@@ -14,17 +14,14 @@ namespace Barotrauma.Items.Components
{
partial class DockingPort : ItemComponent, IDrawableComponent, IServerSerializable
{
public static List<DockingPort> list = new List<DockingPort>();
private static List<DockingPort> list = new List<DockingPort>();
public static IEnumerable<DockingPort> List
{
get { return list; }
}
private Sprite overlaySprite;
private Vector2 distanceTolerance;
private DockingPort dockingTarget;
private float dockingState;
private int dockingDir;
private Joint joint;
private readonly Hull[] hulls = new Hull[2];
@@ -37,18 +34,15 @@ namespace Barotrauma.Items.Components
private bool docked;
public int DockingDir
{
get { return dockingDir; }
set { dockingDir = value; }
}
private float forceLockTimer;
//if the submarine isn't in the correct position to lock within this time after docking has been activated,
//force the sub to the correct position
const float ForceLockDelay = 1.0f;
public int DockingDir { get; private set; }
[Serialize("32.0,32.0", false)]
public Vector2 DistanceTolerance
{
get { return distanceTolerance; }
set { distanceTolerance = value; }
}
public Vector2 DistanceTolerance { get; set; }
[Serialize(32.0f, false)]
public float DockedDistance
@@ -64,11 +58,7 @@ namespace Barotrauma.Items.Components
set;
}
public DockingPort DockingTarget
{
get { return dockingTarget; }
set { dockingTarget = value; }
}
public DockingPort DockingTarget { get; private set; }
public bool Docked
{
@@ -80,8 +70,8 @@ namespace Barotrauma.Items.Components
{
if (!docked && value)
{
if (dockingTarget == null) AttemptDock();
if (dockingTarget == null) return;
if (DockingTarget == null) AttemptDock();
if (DockingTarget == null) return;
docked = true;
}
@@ -89,11 +79,9 @@ namespace Barotrauma.Items.Components
{
Undock();
}
//base.IsActive = value;
}
}
public DockingPort(Item item, XElement element)
: base(item, element)
{
@@ -114,37 +102,40 @@ namespace Barotrauma.Items.Components
list.Add(this);
}
public override void FlipX()
public override void FlipX(bool relativeToSub)
{
base.FlipX();
if (dockingTarget != null)
if (DockingTarget != null)
{
if (joint != null)
{
CreateJoint(joint is WeldJoint);
LinkHullsToGaps();
}
else if (dockingTarget.joint != null)
else if (DockingTarget.joint != null)
{
if (!GameMain.World.BodyList.Contains(dockingTarget.joint.BodyA) ||
!GameMain.World.BodyList.Contains(dockingTarget.joint.BodyB))
if (!GameMain.World.BodyList.Contains(DockingTarget.joint.BodyA) ||
!GameMain.World.BodyList.Contains(DockingTarget.joint.BodyB))
{
dockingTarget.CreateJoint(dockingTarget.joint is WeldJoint);
DockingTarget.CreateJoint(DockingTarget.joint is WeldJoint);
}
dockingTarget.LinkHullsToGaps();
DockingTarget.LinkHullsToGaps();
}
}
}
public override void FlipY(bool relativeToSub)
{
FlipX(relativeToSub);
}
private DockingPort FindAdjacentPort()
{
foreach (DockingPort port in list)
{
if (port == this || port.item.Submarine == item.Submarine) continue;
if (Math.Abs(port.item.WorldPosition.X - item.WorldPosition.X) > distanceTolerance.X) continue;
if (Math.Abs(port.item.WorldPosition.Y - item.WorldPosition.Y) > distanceTolerance.Y) continue;
if (Math.Abs(port.item.WorldPosition.X - item.WorldPosition.X) > DistanceTolerance.X) continue;
if (Math.Abs(port.item.WorldPosition.Y - item.WorldPosition.Y) > DistanceTolerance.Y) continue;
return port;
}
@@ -162,8 +153,10 @@ namespace Barotrauma.Items.Components
public void Dock(DockingPort target)
{
if (item.Submarine.DockedTo.Contains(target.item.Submarine)) return;
if (dockingTarget != null)
forceLockTimer = 0.0f;
if (DockingTarget != null)
{
Undock();
}
@@ -171,7 +164,7 @@ namespace Barotrauma.Items.Components
if (target.item.Submarine == item.Submarine)
{
DebugConsole.ThrowError("Error - tried to dock a submarine to itself");
dockingTarget = null;
DockingTarget = null;
return;
}
@@ -185,27 +178,27 @@ namespace Barotrauma.Items.Components
if (!target.item.Submarine.DockedTo.Contains(item.Submarine)) target.item.Submarine.DockedTo.Add(item.Submarine);
if (!item.Submarine.DockedTo.Contains(target.item.Submarine)) item.Submarine.DockedTo.Add(target.item.Submarine);
dockingTarget = target;
dockingTarget.dockingTarget = this;
DockingTarget = target;
DockingTarget.DockingTarget = this;
docked = true;
dockingTarget.Docked = true;
DockingTarget.Docked = true;
if (Character.Controlled != null &&
(Character.Controlled.Submarine == dockingTarget.item.Submarine || Character.Controlled.Submarine == item.Submarine))
(Character.Controlled.Submarine == DockingTarget.item.Submarine || Character.Controlled.Submarine == item.Submarine))
{
GameMain.GameScreen.Cam.Shake = Vector2.Distance(dockingTarget.item.Submarine.Velocity, item.Submarine.Velocity);
GameMain.GameScreen.Cam.Shake = Vector2.Distance(DockingTarget.item.Submarine.Velocity, item.Submarine.Velocity);
}
dockingDir = IsHorizontal ?
Math.Sign(dockingTarget.item.WorldPosition.X - item.WorldPosition.X) :
Math.Sign(dockingTarget.item.WorldPosition.Y - item.WorldPosition.Y);
dockingTarget.dockingDir = -dockingDir;
DockingDir = IsHorizontal ?
Math.Sign(DockingTarget.item.WorldPosition.X - item.WorldPosition.X) :
Math.Sign(DockingTarget.item.WorldPosition.Y - item.WorldPosition.Y);
DockingTarget.DockingDir = -DockingDir;
if (door != null && dockingTarget.door != null)
if (door != null && DockingTarget.door != null)
{
WayPoint myWayPoint = WayPoint.WayPointList.Find(wp => door.LinkedGap == wp.ConnectedGap);
WayPoint targetWayPoint = WayPoint.WayPointList.Find(wp => dockingTarget.door.LinkedGap == wp.ConnectedGap);
WayPoint targetWayPoint = WayPoint.WayPointList.Find(wp => DockingTarget.door.LinkedGap == wp.ConnectedGap);
if (myWayPoint != null && targetWayPoint != null)
{
@@ -222,11 +215,11 @@ namespace Barotrauma.Items.Components
}
}
public void Lock(bool isNetworkMessage)
public void Lock(bool isNetworkMessage, bool forcePosition = false)
{
if (GameMain.Client != null && !isNetworkMessage) return;
if (dockingTarget == null)
if (DockingTarget == null)
{
DebugConsole.ThrowError("Error - attempted to lock a docking port that's not connected to anything");
return;
@@ -234,15 +227,24 @@ namespace Barotrauma.Items.Components
if (!(joint is WeldJoint))
{
dockingDir = IsHorizontal ?
Math.Sign(dockingTarget.item.WorldPosition.X - item.WorldPosition.X) :
Math.Sign(dockingTarget.item.WorldPosition.Y - item.WorldPosition.Y);
dockingTarget.dockingDir = -dockingDir;
DockingDir = IsHorizontal ?
Math.Sign(DockingTarget.item.WorldPosition.X - item.WorldPosition.X) :
Math.Sign(DockingTarget.item.WorldPosition.Y - item.WorldPosition.Y);
DockingTarget.DockingDir = -DockingDir;
#if CLIENT
PlaySound(ActionType.OnSecondaryUse, item.WorldPosition);
#endif
Vector2 jointDiff = joint.WorldAnchorB - joint.WorldAnchorA;
if (item.Submarine.PhysicsBody.Mass < DockingTarget.item.Submarine.PhysicsBody.Mass ||
DockingTarget.item.Submarine.IsOutpost)
{
item.Submarine.SubBody.SetPosition(item.Submarine.SubBody.Position + ConvertUnits.ToDisplayUnits(jointDiff));
}
else if (DockingTarget.item.Submarine.PhysicsBody.Mass < item.Submarine.PhysicsBody.Mass ||
item.Submarine.IsOutpost)
{
DockingTarget.item.Submarine.SubBody.SetPosition(item.Submarine.SubBody.Position - ConvertUnits.ToDisplayUnits(jointDiff));
}
ConnectWireBetweenPorts();
CreateJoint(true);
@@ -257,7 +259,7 @@ namespace Barotrauma.Items.Components
List<MapEntity> removedEntities = item.linkedTo.Where(e => e.Removed).ToList();
foreach (MapEntity removed in removedEntities) item.linkedTo.Remove(removed);
if (!item.linkedTo.Any(e => e is Hull) && !dockingTarget.item.linkedTo.Any(e => e is Hull))
if (!item.linkedTo.Any(e => e is Hull) && !DockingTarget.item.linkedTo.Any(e => e is Hull))
{
CreateHulls();
}
@@ -273,18 +275,18 @@ namespace Barotrauma.Items.Components
}
Vector2 offset = (IsHorizontal ?
Vector2.UnitX * dockingDir :
Vector2.UnitY * dockingDir);
Vector2.UnitX * DockingDir :
Vector2.UnitY * DockingDir);
offset *= DockedDistance * 0.5f;
Vector2 pos1 = item.WorldPosition + offset;
Vector2 pos2 = dockingTarget.item.WorldPosition - offset;
Vector2 pos2 = DockingTarget.item.WorldPosition - offset;
if (useWeldJoint)
{
joint = JointFactory.CreateWeldJoint(GameMain.World,
item.Submarine.PhysicsBody.FarseerBody, dockingTarget.item.Submarine.PhysicsBody.FarseerBody,
item.Submarine.PhysicsBody.FarseerBody, DockingTarget.item.Submarine.PhysicsBody.FarseerBody,
ConvertUnits.ToSimUnits(pos1), FarseerPhysics.ConvertUnits.ToSimUnits(pos2), true);
((WeldJoint)joint).FrequencyHz = 1.0f;
@@ -292,7 +294,7 @@ namespace Barotrauma.Items.Components
else
{
var distanceJoint = JointFactory.CreateDistanceJoint(GameMain.World,
item.Submarine.PhysicsBody.FarseerBody, dockingTarget.item.Submarine.PhysicsBody.FarseerBody,
item.Submarine.PhysicsBody.FarseerBody, DockingTarget.item.Submarine.PhysicsBody.FarseerBody,
ConvertUnits.ToSimUnits(pos1), FarseerPhysics.ConvertUnits.ToSimUnits(pos2), true);
distanceJoint.Length = 0.01f;
@@ -302,7 +304,6 @@ namespace Barotrauma.Items.Components
joint = distanceJoint;
}
joint.CollideConnected = true;
}
@@ -319,12 +320,12 @@ namespace Barotrauma.Items.Components
var powerConnection = Item.Connections.Find(c => c.IsPower);
if (powerConnection == null) return;
if (dockingTarget == null || dockingTarget.item.Connections == null) return;
var recipient = dockingTarget.item.Connections.Find(c => c.IsPower);
if (DockingTarget == null || DockingTarget.item.Connections == null) return;
var recipient = DockingTarget.item.Connections.Find(c => c.IsPower);
if (recipient == null) return;
wire.RemoveConnection(item);
wire.RemoveConnection(dockingTarget.item);
wire.RemoveConnection(DockingTarget.item);
powerConnection.TryAddLink(wire);
@@ -341,7 +342,7 @@ namespace Barotrauma.Items.Components
doorBody = null;
}
Vector2 position = ConvertUnits.ToSimUnits(item.Position + (dockingTarget.door.Item.WorldPosition - item.WorldPosition));
Vector2 position = ConvertUnits.ToSimUnits(item.Position + (DockingTarget.door.Item.WorldPosition - item.WorldPosition));
if (!MathUtils.IsValid(position))
{
string errorMsg =
@@ -360,11 +361,11 @@ namespace Barotrauma.Items.Components
System.Diagnostics.Debug.Assert(doorBody == null);
doorBody = BodyFactory.CreateRectangle(GameMain.World,
dockingTarget.door.Body.width,
dockingTarget.door.Body.height,
DockingTarget.door.Body.width,
DockingTarget.door.Body.height,
1.0f,
position,
dockingTarget.door);
DockingTarget.door);
doorBody.CollisionCategories = Physics.CollisionWall;
doorBody.BodyType = BodyType.Static;
@@ -372,33 +373,32 @@ namespace Barotrauma.Items.Components
private void CreateHulls()
{
var hullRects = new Rectangle[] { item.WorldRect, dockingTarget.item.WorldRect };
var subs = new Submarine[] { item.Submarine, dockingTarget.item.Submarine };
var hullRects = new Rectangle[] { item.WorldRect, DockingTarget.item.WorldRect };
var subs = new Submarine[] { item.Submarine, DockingTarget.item.Submarine };
bodies = new Body[4];
if (dockingTarget.door != null)
if (DockingTarget.door != null)
{
CreateDoorBody();
}
if (door != null)
{
dockingTarget.CreateDoorBody();
DockingTarget.CreateDoorBody();
}
if (IsHorizontal)
{
if (hullRects[0].Center.X > hullRects[1].Center.X)
{
hullRects = new Rectangle[] { dockingTarget.item.WorldRect, item.WorldRect };
subs = new Submarine[] { dockingTarget.item.Submarine,item.Submarine };
hullRects = new Rectangle[] { DockingTarget.item.WorldRect, item.WorldRect };
subs = new Submarine[] { DockingTarget.item.Submarine,item.Submarine };
}
hullRects[0] = new Rectangle(hullRects[0].Center.X, hullRects[0].Y, ((int)DockedDistance / 2), hullRects[0].Height);
hullRects[1] = new Rectangle(hullRects[1].Center.X - ((int)DockedDistance / 2), hullRects[1].Y, ((int)DockedDistance / 2), hullRects[1].Height);
//expand hulls if needed, so there's no empty space between the sub's hulls and docking port hulls
int leftSubRightSide = int.MinValue, rightSubLeftSide = int.MaxValue;
foreach (Hull hull in Hull.hullList)
@@ -420,11 +420,10 @@ namespace Barotrauma.Items.Components
}
}
//expand left hull to the rightmost hull of the sub at the left side
//(unless the difference is more than 100 units - if the distance is very large
//there's something wrong with the positioning of the docking ports or submarine hulls)
int leftHullDiff = hullRects[0].X - leftSubRightSide;
int leftHullDiff = (hullRects[0].X - leftSubRightSide) + 5;
if (leftHullDiff > 0)
{
if (leftHullDiff > 100)
@@ -438,7 +437,7 @@ namespace Barotrauma.Items.Components
}
}
int rightHullDiff = rightSubLeftSide - hullRects[1].Right;
int rightHullDiff = (rightSubLeftSide - hullRects[1].Right) + 5;
if (rightHullDiff > 0)
{
if (rightHullDiff > 100)
@@ -455,7 +454,7 @@ namespace Barotrauma.Items.Components
for (int i = 0; i < 2; i++)
{
hullRects[i].Location -= MathUtils.ToPoint((subs[i].WorldPosition - subs[i].HiddenSubPosition));
hulls[i] = new Hull(MapEntityPrefab.Find("Hull"), hullRects[i], subs[i]);
hulls[i] = new Hull(MapEntityPrefab.Find(null, "Hull"), hullRects[i], subs[i]);
hulls[i].AddToGrid(subs[i]);
hulls[i].FreeID();
@@ -473,8 +472,8 @@ namespace Barotrauma.Items.Components
{
if (hullRects[0].Center.Y > hullRects[1].Center.Y)
{
hullRects = new Rectangle[] { dockingTarget.item.WorldRect, item.WorldRect };
subs = new Submarine[] { dockingTarget.item.Submarine, item.Submarine };
hullRects = new Rectangle[] { DockingTarget.item.WorldRect, item.WorldRect };
subs = new Submarine[] { DockingTarget.item.Submarine, item.Submarine };
}
hullRects[0] = new Rectangle(hullRects[0].X, hullRects[0].Y + (int)(-hullRects[0].Height + DockedDistance) / 2, hullRects[0].Width, ((int)DockedDistance / 2));
@@ -504,7 +503,7 @@ namespace Barotrauma.Items.Components
//expand lower hull to the topmost hull of the lower sub
//(unless the difference is more than 100 units - if the distance is very large
//there's something wrong with the positioning of the docking ports or submarine hulls)
int lowerHullDiff = (hullRects[0].Y - hullRects[0].Height) - lowerSubTop;
int lowerHullDiff = ((hullRects[0].Y - hullRects[0].Height) - lowerSubTop) + 5;
if (lowerHullDiff > 0)
{
if (lowerHullDiff > 100)
@@ -517,7 +516,7 @@ namespace Barotrauma.Items.Components
}
}
int upperHullDiff = upperSubBottom - hullRects[1].Y;
int upperHullDiff = (upperSubBottom - hullRects[1].Y) + 5;
if (upperHullDiff > 0)
{
if (upperHullDiff > 100)
@@ -531,10 +530,24 @@ namespace Barotrauma.Items.Components
}
}
//difference between the edges of the hulls (to avoid a gap between the hulls)
//0 is lower
int midHullDiff = ((hullRects[1].Y - hullRects[1].Height) - hullRects[0].Y) + 2;
if (midHullDiff > 100)
{
DebugConsole.ThrowError("Creating hulls between docking ports failed. The upper hull seems to be very far from the lower hull.");
}
else if (midHullDiff > 0)
{
hullRects[0].Height += midHullDiff / 2 + 1;
hullRects[1].Y -= midHullDiff / 2 + 1;
hullRects[1].Height += midHullDiff / 2 + 1;
}
for (int i = 0; i < 2; i++)
{
hullRects[i].Location -= MathUtils.ToPoint((subs[i].WorldPosition - subs[i].HiddenSubPosition));
hulls[i] = new Hull(MapEntityPrefab.Find("Hull"), hullRects[i], subs[i]);
hulls[i] = new Hull(MapEntityPrefab.Find(null, "hull"), hullRects[i], subs[i]);
hulls[i].AddToGrid(subs[i]);
hulls[i].FreeID();
}
@@ -605,14 +618,14 @@ namespace Barotrauma.Items.Components
for (int i = 0; i < 2; i++)
{
Gap doorGap = i == 0 ? door?.LinkedGap : dockingTarget?.door?.LinkedGap;
Gap doorGap = i == 0 ? door?.LinkedGap : DockingTarget?.door?.LinkedGap;
if (doorGap == null) continue;
doorGap.DisableHullRechecks = true;
if (doorGap.linkedTo.Count >= 2) continue;
if (IsHorizontal)
{
if (item.WorldPosition.X < dockingTarget.item.WorldPosition.X)
if (item.WorldPosition.X < DockingTarget.item.WorldPosition.X)
{
if (!doorGap.linkedTo.Contains(hulls[0])) doorGap.linkedTo.Add(hulls[0]);
}
@@ -620,10 +633,17 @@ namespace Barotrauma.Items.Components
{
if (!doorGap.linkedTo.Contains(hulls[1])) doorGap.linkedTo.Add(hulls[1]);
}
//make sure the left hull is linked to the gap first (gap logic assumes that the first hull is the one to the left)
if (doorGap.linkedTo[0].Rect.X > doorGap.linkedTo[1].Rect.X)
{
var temp = doorGap.linkedTo[0];
doorGap.linkedTo[0] = doorGap.linkedTo[1];
doorGap.linkedTo[1] = temp;
}
}
else
{
if (item.WorldPosition.Y < dockingTarget.item.WorldPosition.Y)
if (item.WorldPosition.Y < DockingTarget.item.WorldPosition.Y)
{
if (!doorGap.linkedTo.Contains(hulls[0])) doorGap.linkedTo.Add(hulls[0]);
}
@@ -631,25 +651,34 @@ namespace Barotrauma.Items.Components
{
if (!doorGap.linkedTo.Contains(hulls[1])) doorGap.linkedTo.Add(hulls[1]);
}
//make sure the upper hull is linked to the gap first (gap logic assumes that the first hull is above the second one)
if (doorGap.linkedTo[0].Rect.Y < doorGap.linkedTo[1].Rect.Y)
{
var temp = doorGap.linkedTo[0];
doorGap.linkedTo[0] = doorGap.linkedTo[1];
doorGap.linkedTo[1] = temp;
}
}
}
}
public void Undock()
{
if (dockingTarget == null || !docked) return;
if (DockingTarget == null || !docked) return;
forceLockTimer = 0.0f;
#if CLIENT
PlaySound(ActionType.OnUse, item.WorldPosition);
#endif
dockingTarget.item.Submarine.DockedTo.Remove(item.Submarine);
item.Submarine.DockedTo.Remove(dockingTarget.item.Submarine);
DockingTarget.item.Submarine.DockedTo.Remove(item.Submarine);
item.Submarine.DockedTo.Remove(DockingTarget.item.Submarine);
if (door != null && dockingTarget.door != null)
if (door != null && DockingTarget.door != null)
{
WayPoint myWayPoint = WayPoint.WayPointList.Find(wp => door.LinkedGap == wp.ConnectedGap);
WayPoint targetWayPoint = WayPoint.WayPointList.Find(wp => dockingTarget.door.LinkedGap == wp.ConnectedGap);
WayPoint targetWayPoint = WayPoint.WayPointList.Find(wp => DockingTarget.door.LinkedGap == wp.ConnectedGap);
if (myWayPoint != null && targetWayPoint != null)
{
@@ -662,8 +691,8 @@ namespace Barotrauma.Items.Components
docked = false;
dockingTarget.Undock();
dockingTarget = null;
DockingTarget.Undock();
DockingTarget = null;
if (doorBody != null)
{
@@ -710,7 +739,7 @@ namespace Barotrauma.Items.Components
public override void Update(float deltaTime, Camera cam)
{
if (dockingTarget == null)
if (DockingTarget == null)
{
dockingState = MathHelper.Lerp(dockingState, 0.0f, deltaTime * 10.0f);
if (dockingState < 0.01f) docked = false;
@@ -723,8 +752,8 @@ namespace Barotrauma.Items.Components
{
if (!docked)
{
Dock(dockingTarget);
if (dockingTarget == null) return;
Dock(DockingTarget);
if (DockingTarget == null) { return; }
}
if (joint is DistanceJoint)
@@ -732,16 +761,48 @@ namespace Barotrauma.Items.Components
item.SendSignal(0, "0", "state_out", null);
dockingState = MathHelper.Lerp(dockingState, 0.5f, deltaTime * 10.0f);
if (Vector2.Distance(joint.WorldAnchorA, joint.WorldAnchorB) < 0.05f)
forceLockTimer += deltaTime;
Vector2 jointDiff = joint.WorldAnchorB - joint.WorldAnchorA;
if (jointDiff.LengthSquared() > 0.04f * 0.04f && forceLockTimer < ForceLockDelay)
{
Lock(false);
float totalMass = item.Submarine.PhysicsBody.Mass + DockingTarget.item.Submarine.PhysicsBody.Mass;
float massRatio1 = 1.0f;
float massRatio2 = 1.0f;
if (item.Submarine.PhysicsBody.BodyType != BodyType.Dynamic)
{
massRatio1 = 0.0f;
massRatio2 = 1.0f;
}
else if (DockingTarget.item.Submarine.PhysicsBody.BodyType != BodyType.Dynamic)
{
massRatio1 = 1.0f;
massRatio2 = 0.0f;
}
else
{
massRatio1 = DockingTarget.item.Submarine.PhysicsBody.Mass / totalMass;
massRatio2 = item.Submarine.PhysicsBody.Mass / totalMass;
}
Vector2 relativeVelocity = DockingTarget.item.Submarine.Velocity - item.Submarine.Velocity;
Vector2 desiredRelativeVelocity = Vector2.Normalize(jointDiff);
item.Submarine.Velocity += (relativeVelocity + desiredRelativeVelocity) * massRatio1;
DockingTarget.item.Submarine.Velocity += (-relativeVelocity - desiredRelativeVelocity) * massRatio2;
}
else
{
Lock(isNetworkMessage: false, forcePosition: true);
}
}
else
{
if (dockingTarget.door != null && doorBody != null)
if (DockingTarget.door != null && doorBody != null)
{
doorBody.Enabled = dockingTarget.door.Body.Enabled;
doorBody.Enabled = DockingTarget.door.Body.Enabled;
}
item.SendSignal(0, "1", "state_out", null);
@@ -780,16 +841,14 @@ namespace Barotrauma.Items.Components
List<MapEntity> linked = new List<MapEntity>(item.linkedTo);
foreach (MapEntity entity in linked)
{
var hull = entity as Hull;
if (hull != null)
if (entity is Hull hull)
{
hull.Remove();
item.linkedTo.Remove(hull);
continue;
}
var gap = entity as Gap;
if (gap != null)
if (entity is Gap gap)
{
gap.Remove();
continue;
@@ -806,12 +865,12 @@ namespace Barotrauma.Items.Components
}
}
public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f)
public override void ReceiveSignal(int stepsTaken, string signal, Connection connection, Item source, Character sender, float power = 0.0f, float signalStrength = 1.0f)
{
if (GameMain.Client != null) return;
bool wasDocked = docked;
DockingPort prevDockingTarget = dockingTarget;
DockingPort prevDockingTarget = DockingTarget;
switch (connection.Name)
{
@@ -828,8 +887,8 @@ namespace Barotrauma.Items.Components
{
if (docked)
{
if (item.Submarine != null && dockingTarget?.item?.Submarine != null)
GameServer.Log(sender.LogName + " docked " + item.Submarine.Name + " to " + dockingTarget.item.Submarine.Name, ServerLog.MessageType.ItemInteraction);
if (item.Submarine != null && DockingTarget?.item?.Submarine != null)
GameServer.Log(sender.LogName + " docked " + item.Submarine.Name + " to " + DockingTarget.item.Submarine.Name, ServerLog.MessageType.ItemInteraction);
}
else
{
@@ -845,7 +904,7 @@ namespace Barotrauma.Items.Components
if (docked)
{
msg.Write(dockingTarget.item.ID);
msg.Write(DockingTarget.item.ID);
msg.Write(hulls != null && hulls[0] != null && hulls[1] != null && gap != null);
}
}
@@ -882,18 +941,18 @@ namespace Barotrauma.Items.Components
return;
}
dockingTarget = (targetEntity as Item).GetComponent<DockingPort>();
if (dockingTarget == null)
DockingTarget = (targetEntity as Item).GetComponent<DockingPort>();
if (DockingTarget == null)
{
DebugConsole.ThrowError("Invalid docking port network event (" + targetEntity + " doesn't have a docking port component)");
return;
}
Dock(dockingTarget);
Dock(DockingTarget);
if (isLocked)
{
Lock(true);
Lock(isNetworkMessage: true, forcePosition: true);
}
}
else