Fixed projectiles colliding with railguns due to 1e02d74

This commit is contained in:
Joonas Rikkonen
2018-08-24 14:18:51 +03:00
parent afc2e63b55
commit 48e14347a3
3 changed files with 18 additions and 14 deletions
@@ -188,6 +188,8 @@ namespace Barotrauma.Items.Components
{ {
if (fixture == null || fixture.IsSensor) return -1; if (fixture == null || fixture.IsSensor) return -1;
if (fixture.UserData is Item) return -1;
if (!fixture.CollisionCategories.HasFlag(Physics.CollisionCharacter) && if (!fixture.CollisionCategories.HasFlag(Physics.CollisionCharacter) &&
!fixture.CollisionCategories.HasFlag(Physics.CollisionWall) && !fixture.CollisionCategories.HasFlag(Physics.CollisionWall) &&
!fixture.CollisionCategories.HasFlag(Physics.CollisionLevel)) return -1; !fixture.CollisionCategories.HasFlag(Physics.CollisionLevel)) return -1;
@@ -291,6 +293,8 @@ namespace Barotrauma.Items.Components
if (IgnoredBodies.Contains(target.Body)) return false; if (IgnoredBodies.Contains(target.Body)) return false;
if (target.UserData is Item) return false;
if (target.CollisionCategories == Physics.CollisionCharacter && !(target.Body.UserData is Limb)) if (target.CollisionCategories == Physics.CollisionCharacter && !(target.Body.UserData is Limb))
{ {
return false; return false;
@@ -46,7 +46,7 @@ namespace Barotrauma
public PhysicsBody body; public PhysicsBody body;
public readonly XElement staticBodyConfig; public readonly XElement StaticBodyConfig;
private Vector2 lastSentPos; private Vector2 lastSentPos;
private bool prevBodyAwake; private bool prevBodyAwake;
@@ -402,7 +402,7 @@ namespace Barotrauma
case "brokensprite": case "brokensprite":
break; break;
case "staticbody": case "staticbody":
staticBodyConfig = subElement; StaticBodyConfig = subElement;
break; break;
case "aitarget": case "aitarget":
aiTarget = new AITarget(this); aiTarget = new AITarget(this);
@@ -131,31 +131,31 @@ namespace Barotrauma
foreach (Item item in Item.ItemList) 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 radius = ConvertUnits.ToSimUnits(item.StaticBodyConfig.GetAttributeFloat("radius", 0.0f));
float width = ConvertUnits.ToSimUnits(item.staticBodyConfig.GetAttributeFloat("width", 0.0f)); float width = ConvertUnits.ToSimUnits(item.StaticBodyConfig.GetAttributeFloat("width", 0.0f));
float height = ConvertUnits.ToSimUnits(item.staticBodyConfig.GetAttributeFloat("height", 0.0f)); float height = ConvertUnits.ToSimUnits(item.StaticBodyConfig.GetAttributeFloat("height", 0.0f));
if (width != 0.0f && 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) else if (radius != 0.0f && width != 0.0f)
{ {
FixtureFactory.AttachRectangle(width, radius * 2, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, 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); 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); 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) else if (radius != 0.0f && height != 0.0f)
{ {
FixtureFactory.AttachRectangle(radius * 2, height, 5.0f, ConvertUnits.ToSimUnits(item.Position), farseerBody, 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); 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); FixtureFactory.AttachCircle(radius, 5.0f, farseerBody, ConvertUnits.ToSimUnits(item.Position) + Vector2.UnitX * height / 2, this).UserData = item;
} }
else if (radius != 0.0f) 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;
} }
} }
} }