From 48e14347a3b508882282d09f0e4abd9bc7d4dba9 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Fri, 24 Aug 2018 14:18:51 +0300 Subject: [PATCH] Fixed projectiles colliding with railguns due to 1e02d74 --- .../Source/Items/Components/Projectile.cs | 4 ++++ .../BarotraumaShared/Source/Items/Item.cs | 4 ++-- .../Source/Map/SubmarineBody.cs | 24 +++++++++---------- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Items/Components/Projectile.cs b/Barotrauma/BarotraumaShared/Source/Items/Components/Projectile.cs index 5ee79b5d7..859969cb4 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Components/Projectile.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Components/Projectile.cs @@ -188,6 +188,8 @@ namespace Barotrauma.Items.Components { if (fixture == null || fixture.IsSensor) return -1; + if (fixture.UserData is Item) return -1; + if (!fixture.CollisionCategories.HasFlag(Physics.CollisionCharacter) && !fixture.CollisionCategories.HasFlag(Physics.CollisionWall) && !fixture.CollisionCategories.HasFlag(Physics.CollisionLevel)) return -1; @@ -291,6 +293,8 @@ namespace Barotrauma.Items.Components if (IgnoredBodies.Contains(target.Body)) return false; + if (target.UserData is Item) return false; + if (target.CollisionCategories == Physics.CollisionCharacter && !(target.Body.UserData is Limb)) { return false; diff --git a/Barotrauma/BarotraumaShared/Source/Items/Item.cs b/Barotrauma/BarotraumaShared/Source/Items/Item.cs index bdf40b09d..c46104937 100644 --- a/Barotrauma/BarotraumaShared/Source/Items/Item.cs +++ b/Barotrauma/BarotraumaShared/Source/Items/Item.cs @@ -46,7 +46,7 @@ namespace Barotrauma public PhysicsBody body; - public readonly XElement staticBodyConfig; + public readonly XElement StaticBodyConfig; private Vector2 lastSentPos; private bool prevBodyAwake; @@ -402,7 +402,7 @@ namespace Barotrauma case "brokensprite": break; case "staticbody": - staticBodyConfig = subElement; + StaticBodyConfig = subElement; break; case "aitarget": aiTarget = new AITarget(this); diff --git a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs index 48d4d8628..29fe901d8 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/SubmarineBody.cs @@ -131,31 +131,31 @@ namespace Barotrauma foreach (Item item in Item.ItemList) { - if (item.staticBodyConfig == null) continue; + 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)); + 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); + FixtureFactory.AttachRectangle(width, height, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this).UserData = item; } 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); + FixtureFactory.AttachRectangle(width, radius * 2, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this).UserData = item; + FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) - Vector2.UnitX * width / 2, this).UserData = item; + FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) + Vector2.UnitX * width / 2, this).UserData = item; } 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); + FixtureFactory.AttachRectangle(radius * 2, height, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, this).UserData = item; + FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) - Vector2.UnitY * height / 2, this).UserData = item; + FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) + Vector2.UnitX * height / 2, this).UserData = item; } else if (radius != 0.0f) { - FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position), this); + FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position), this).UserData = item; } } }