diff --git a/Barotrauma/BarotraumaShared/Content/Items/Weapons/railgun.xml b/Barotrauma/BarotraumaShared/Content/Items/Weapons/railgun.xml
index 11f441901..473711a84 100644
--- a/Barotrauma/BarotraumaShared/Content/Items/Weapons/railgun.xml
+++ b/Barotrauma/BarotraumaShared/Content/Items/Weapons/railgun.xml
@@ -8,6 +8,8 @@
+
+
drawableComponents;
public PhysicsBody body;
+
+ public readonly XElement staticBodyConfig;
private Vector2 lastSentPos;
private bool prevBodyAwake;
@@ -399,6 +401,9 @@ namespace Barotrauma
case "deconstruct":
case "brokensprite":
break;
+ case "staticbody":
+ staticBodyConfig = subElement;
+ break;
case "aitarget":
aiTarget = new AITarget(this);
aiTarget.SightRange = subElement.GetAttributeFloat("sightrange", 1000.0f);
diff --git a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs
index 89de82b74..48d4d8628 100644
--- a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs
+++ b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs
@@ -128,10 +128,38 @@ namespace Barotrauma
ConvertUnits.ToSimUnits(new Vector2(rect.X + rect.Width / 2, rect.Y - rect.Height / 2)),
farseerBody, this);
}
+
+ foreach (Item item in Item.ItemList)
+ {
+ if (item.staticBodyConfig == null) continue;
+
+ float radius = ConvertUnits.ToSimUnits(item.staticBodyConfig.GetAttributeFloat("radius", 0.0f));
+ float width = ConvertUnits.ToSimUnits(item.staticBodyConfig.GetAttributeFloat("width", 0.0f));
+ float height = ConvertUnits.ToSimUnits(item.staticBodyConfig.GetAttributeFloat("height", 0.0f));
+
+ if (width != 0.0f && height != 0.0f)
+ {
+ FixtureFactory.AttachRectangle(width, height, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this);
+ }
+ else if (radius != 0.0f && width != 0.0f)
+ {
+ FixtureFactory.AttachRectangle(width, radius * 2, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this);
+ FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) - Vector2.UnitX * width / 2, this);
+ FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) + Vector2.UnitX * width / 2, this);
+ }
+ else if (radius != 0.0f && height != 0.0f)
+ {
+ FixtureFactory.AttachRectangle(radius * 2, height, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this);
+ FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) - Vector2.UnitY * height / 2, this);
+ FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) + Vector2.UnitX * height / 2, this);
+ }
+ else if (radius != 0.0f)
+ {
+ FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position), this);
+ }
+ }
}
-
-
-
+
farseerBody.BodyType = BodyType.Dynamic;
farseerBody.CollisionCategories = Physics.CollisionWall;
farseerBody.CollidesWith =