Build 0.18.0.0
This commit is contained in:
@@ -344,14 +344,14 @@ namespace Barotrauma
|
||||
}
|
||||
}
|
||||
|
||||
public PhysicsBody(XElement element, float scale = 1.0f) : this(element, Vector2.Zero, scale) { }
|
||||
public PhysicsBody(ColliderParams cParams) : this(cParams, Vector2.Zero) { }
|
||||
public PhysicsBody(LimbParams lParams) : this(lParams, Vector2.Zero) { }
|
||||
public PhysicsBody(XElement element, float scale = 1.0f, bool findNewContacts = true) : this(element, Vector2.Zero, scale, findNewContacts: findNewContacts) { }
|
||||
public PhysicsBody(ColliderParams cParams, bool findNewContacts = true) : this(cParams, Vector2.Zero, findNewContacts) { }
|
||||
public PhysicsBody(LimbParams lParams, bool findNewContacts = true) : this(lParams, Vector2.Zero, findNewContacts) { }
|
||||
|
||||
public PhysicsBody(float width, float height, float radius, float density)
|
||||
public PhysicsBody(float width, float height, float radius, float density, BodyType bodyType, Category collisionCategory, Category collidesWith, bool findNewContacts = true)
|
||||
{
|
||||
density = Math.Max(density, MinDensity);
|
||||
CreateBody(width, height, radius, density);
|
||||
CreateBody(width, height, radius, density, bodyType, collisionCategory, collidesWith, findNewContacts);
|
||||
LastSentPosition = FarseerBody.Position;
|
||||
list.Add(this);
|
||||
}
|
||||
@@ -359,21 +359,21 @@ namespace Barotrauma
|
||||
public PhysicsBody(Body farseerBody)
|
||||
{
|
||||
FarseerBody = farseerBody;
|
||||
if (FarseerBody.UserData == null) FarseerBody.UserData = this;
|
||||
if (FarseerBody.UserData == null) { FarseerBody.UserData = this; }
|
||||
LastSentPosition = FarseerBody.Position;
|
||||
list.Add(this);
|
||||
}
|
||||
|
||||
public PhysicsBody(ColliderParams colliderParams, Vector2 position)
|
||||
public PhysicsBody(ColliderParams colliderParams, Vector2 position, bool findNewContacts = true)
|
||||
{
|
||||
float radius = ConvertUnits.ToSimUnits(colliderParams.Radius) * colliderParams.Ragdoll.LimbScale;
|
||||
float height = ConvertUnits.ToSimUnits(colliderParams.Height) * colliderParams.Ragdoll.LimbScale;
|
||||
float width = ConvertUnits.ToSimUnits(colliderParams.Width) * colliderParams.Ragdoll.LimbScale;
|
||||
density = 10;
|
||||
CreateBody(width, height, radius, density);
|
||||
FarseerBody.BodyType = BodyType.Dynamic;
|
||||
FarseerBody.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel;
|
||||
FarseerBody.CollisionCategories = Physics.CollisionCharacter;
|
||||
CreateBody(width, height, radius, density, BodyType.Dynamic,
|
||||
Physics.CollisionCharacter,
|
||||
Physics.CollisionWall | Physics.CollisionLevel,
|
||||
findNewContacts);
|
||||
FarseerBody.AngularDamping = DefaultAngularDamping;
|
||||
FarseerBody.FixedRotation = true;
|
||||
FarseerBody.Friction = 0.05f;
|
||||
@@ -383,16 +383,24 @@ namespace Barotrauma
|
||||
list.Add(this);
|
||||
}
|
||||
|
||||
public PhysicsBody(LimbParams limbParams, Vector2 position)
|
||||
public PhysicsBody(LimbParams limbParams, Vector2 position, bool findNewContacts = true)
|
||||
{
|
||||
float radius = ConvertUnits.ToSimUnits(limbParams.Radius) * limbParams.Scale * limbParams.Ragdoll.LimbScale;
|
||||
float height = ConvertUnits.ToSimUnits(limbParams.Height) * limbParams.Scale * limbParams.Ragdoll.LimbScale;
|
||||
float width = ConvertUnits.ToSimUnits(limbParams.Width) * limbParams.Scale * limbParams.Ragdoll.LimbScale;
|
||||
density = Math.Max(limbParams.Density, MinDensity);
|
||||
CreateBody(width, height, radius, density);
|
||||
FarseerBody.BodyType = BodyType.Dynamic;
|
||||
FarseerBody.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel;
|
||||
FarseerBody.CollisionCategories = Physics.CollisionItem;
|
||||
|
||||
Category collisionCategory = Physics.CollisionCharacter;
|
||||
Category collidesWith = Physics.CollisionAll & ~Physics.CollisionCharacter & ~Physics.CollisionItem & ~Physics.CollisionItemBlocking;
|
||||
if (limbParams.IgnoreCollisions)
|
||||
{
|
||||
collisionCategory = Category.None;
|
||||
collidesWith = Category.None;
|
||||
}
|
||||
CreateBody(width, height, radius, density, BodyType.Dynamic,
|
||||
collisionCategory: collisionCategory,
|
||||
collidesWith: collidesWith,
|
||||
findNewContacts: findNewContacts);
|
||||
FarseerBody.Friction = limbParams.Friction;
|
||||
FarseerBody.Restitution = limbParams.Restitution;
|
||||
FarseerBody.AngularDamping = limbParams.AngularDamping;
|
||||
@@ -402,17 +410,14 @@ namespace Barotrauma
|
||||
list.Add(this);
|
||||
}
|
||||
|
||||
public PhysicsBody(XElement element, Vector2 position, float scale = 1.0f, float? forceDensity = null)
|
||||
public PhysicsBody(XElement element, Vector2 position, float scale = 1.0f, float? forceDensity = null, Category collisionCategory = Physics.CollisionItem, Category collidesWith = Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionPlatform, bool findNewContacts = true)
|
||||
{
|
||||
float radius = ConvertUnits.ToSimUnits(element.GetAttributeFloat("radius", 0.0f)) * scale;
|
||||
float height = ConvertUnits.ToSimUnits(element.GetAttributeFloat("height", 0.0f)) * scale;
|
||||
float width = ConvertUnits.ToSimUnits(element.GetAttributeFloat("width", 0.0f)) * scale;
|
||||
density = Math.Max(forceDensity ?? element.GetAttributeFloat("density", 10.0f), MinDensity);
|
||||
CreateBody(width, height, radius, density);
|
||||
Enum.TryParse(element.GetAttributeString("bodytype", "Dynamic"), out BodyType bodyType);
|
||||
FarseerBody.BodyType = bodyType;
|
||||
FarseerBody.CollisionCategories = Physics.CollisionItem;
|
||||
FarseerBody.CollidesWith = Physics.CollisionWall | Physics.CollisionLevel | Physics.CollisionPlatform;
|
||||
CreateBody(width, height, radius, density, bodyType, collisionCategory, collidesWith, findNewContacts);
|
||||
FarseerBody.Friction = element.GetAttributeFloat("friction", 0.5f);
|
||||
FarseerBody.Restitution = element.GetAttributeFloat("restitution", 0.05f);
|
||||
FarseerBody.UserData = this;
|
||||
@@ -421,7 +426,7 @@ namespace Barotrauma
|
||||
list.Add(this);
|
||||
}
|
||||
|
||||
private void CreateBody(float width, float height, float radius, float density)
|
||||
private void CreateBody(float width, float height, float radius, float density, BodyType bodyType, Category collisionCategory, Category collidesWith, bool findNewContacts = true)
|
||||
{
|
||||
if (IsValidShape(radius, height, width))
|
||||
{
|
||||
@@ -429,16 +434,16 @@ namespace Barotrauma
|
||||
switch (bodyShape)
|
||||
{
|
||||
case Shape.Capsule:
|
||||
FarseerBody = GameMain.World.CreateCapsule(height, radius, density);
|
||||
FarseerBody = GameMain.World.CreateCapsule(height, radius, density, bodyType: bodyType, collisionCategory: collisionCategory, collidesWith: collidesWith, findNewContacts: findNewContacts); ;
|
||||
break;
|
||||
case Shape.HorizontalCapsule:
|
||||
FarseerBody = GameMain.World.CreateCapsuleHorizontal(width, radius, density);
|
||||
FarseerBody = GameMain.World.CreateCapsuleHorizontal(width, radius, density, bodyType: bodyType, collisionCategory: collisionCategory, collidesWith: collidesWith, findNewContacts: findNewContacts);
|
||||
break;
|
||||
case Shape.Circle:
|
||||
FarseerBody = GameMain.World.CreateCircle(radius, density);
|
||||
FarseerBody = GameMain.World.CreateCircle(radius, density, bodyType: bodyType, collisionCategory: collisionCategory, collidesWith: collidesWith, findNewContacts: findNewContacts);
|
||||
break;
|
||||
case Shape.Rectangle:
|
||||
FarseerBody = GameMain.World.CreateRectangle(width, height, density);
|
||||
FarseerBody = GameMain.World.CreateRectangle(width, height, density, bodyType: bodyType, collisionCategory: collisionCategory, collidesWith: collidesWith, findNewContacts: findNewContacts);
|
||||
break;
|
||||
default:
|
||||
throw new NotImplementedException(bodyShape.ToString());
|
||||
|
||||
Reference in New Issue
Block a user