Build 0.18.0.0

This commit is contained in:
Markus Isberg
2022-05-13 00:55:52 +09:00
parent 15d18e6ff6
commit 7547a9b78a
218 changed files with 3881 additions and 2192 deletions
@@ -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());