diff --git a/Subsurface/Content/Characters/Human/human.xml b/Subsurface/Content/Characters/Human/human.xml
index fb1644409..28b9914fe 100644
--- a/Subsurface/Content/Characters/Human/human.xml
+++ b/Subsurface/Content/Characters/Human/human.xml
@@ -3,7 +3,7 @@
- 0.0f ? Collider.LinearVelocity.Y * 0.5f : Collider.LinearVelocity.Y);
}
- //ClimbOverObstacles();
-
getUpSpeed = getUpSpeed * Math.Max(head.SimPosition.Y - colliderPos.Y, 0.5f);
torso.pullJoint.Enabled = true;
head.pullJoint.Enabled = true;
waist.pullJoint.Enabled = true;
- Collider.FarseerBody.Friction = 0.05f;
- Collider.FarseerBody.Restitution = 0.05f;
-
if (stairs != null)
{
torso.pullJoint.WorldAnchorB = new Vector2(
@@ -447,9 +442,19 @@ namespace Barotrauma
for (int i = -1; i < 2; i += 2)
{
- Vector2 footPos = new Vector2(
- Crouching ? waist.SimPosition.X + Math.Sign(stepSize.X * i) * Dir * 0.3f : GetCenterOfMass().X,
- colliderPos.Y - 0.1f);
+ Vector2 footPos = colliderPos;
+
+ if (Crouching)
+ {
+ footPos = new Vector2(
+ waist.SimPosition.X + Math.Sign(stepSize.X * i) * Dir * 0.3f,
+ colliderPos.Y - 0.1f);
+ }
+ else
+ {
+ footPos = new Vector2(GetCenterOfMass().X + stepSize.X * i * 0.2f, colliderPos.Y - 0.1f);
+ }
+
var foot = i == -1 ? rightFoot : leftFoot;
diff --git a/Subsurface/Source/Characters/Animation/Ragdoll.cs b/Subsurface/Source/Characters/Animation/Ragdoll.cs
index 2747c4fea..a8e814a75 100644
--- a/Subsurface/Source/Characters/Animation/Ragdoll.cs
+++ b/Subsurface/Source/Characters/Animation/Ragdoll.cs
@@ -328,6 +328,9 @@ namespace Barotrauma
break;
case "collider":
collider.Add(new PhysicsBody(subElement, scale));
+
+ collider[collider.Count - 1].FarseerBody.Friction = 0.05f;
+ collider[collider.Count - 1].FarseerBody.Restitution = 0.05f;
collider[collider.Count - 1].FarseerBody.FixedRotation = true;
collider[collider.Count - 1].CollisionCategories = Physics.CollisionCharacter;
collider[collider.Count - 1].FarseerBody.AngularDamping = 5.0f;
diff --git a/Subsurface/Source/Items/Components/Door.cs b/Subsurface/Source/Items/Components/Door.cs
index 65a6096b2..ec03b232e 100644
--- a/Subsurface/Source/Items/Components/Door.cs
+++ b/Subsurface/Source/Items/Components/Door.cs
@@ -1,5 +1,6 @@
using System;
using System.IO;
+using System.Linq;
using System.Xml.Linq;
using FarseerPhysics;
using FarseerPhysics.Dynamics;
@@ -7,6 +8,7 @@ using FarseerPhysics.Factories;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Barotrauma.Lights;
+using System.Collections.Generic;
namespace Barotrauma.Items.Components
{
@@ -409,50 +411,53 @@ namespace Barotrauma.Items.Components
{
int dir = isHorizontal ? Math.Sign(c.SimPosition.Y - item.SimPosition.Y) : Math.Sign(c.SimPosition.X - item.SimPosition.X);
- foreach (Limb l in c.AnimController.Limbs)
+ List bodies = c.AnimController.Limbs.Select(l => l.body).ToList();
+ bodies.Add(c.AnimController.Collider);
+
+ foreach (PhysicsBody body in bodies)
{
float diff = 0.0f;
if (isHorizontal)
{
- if (l.SimPosition.X < simPos.X || l.SimPosition.X > simPos.X + simSize.X) continue;
+ if (body.SimPosition.X < simPos.X || body.SimPosition.X > simPos.X + simSize.X) continue;
- diff = l.SimPosition.Y - item.SimPosition.Y;
+ diff = body.SimPosition.Y - item.SimPosition.Y;
}
else
{
- if (l.SimPosition.Y > simPos.Y || l.SimPosition.Y < simPos.Y - simSize.Y) continue;
+ if (body.SimPosition.Y > simPos.Y || body.SimPosition.Y < simPos.Y - simSize.Y) continue;
- diff = l.SimPosition.X - item.SimPosition.X;
+ diff = body.SimPosition.X - item.SimPosition.X;
}
if (Math.Sign(diff) != dir)
{
- SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 1.0f, l.body);
+ SoundPlayer.PlayDamageSound(DamageSoundType.LimbBlunt, 1.0f, body);
if (isHorizontal)
{
- l.body.SetTransform(new Vector2(l.SimPosition.X, item.SimPosition.Y + dir * simSize.Y * 2.0f), l.body.Rotation);
- l.body.ApplyLinearImpulse(new Vector2(isOpen ? 0.0f : 1.0f, dir * 2.0f));
+ body.SetTransform(new Vector2(body.SimPosition.X, item.SimPosition.Y + dir * simSize.Y * 2.0f), body.Rotation);
+ body.ApplyLinearImpulse(new Vector2(isOpen ? 0.0f : 1.0f, dir * 2.0f));
}
else
{
- l.body.SetTransform(new Vector2(item.SimPosition.X + dir * simSize.X * 1.2f, l.SimPosition.Y), l.body.Rotation);
- l.body.ApplyLinearImpulse(new Vector2(dir * 0.5f, isOpen ? 0.0f : -1.0f));
+ body.SetTransform(new Vector2(item.SimPosition.X + dir * simSize.X * 1.2f, body.SimPosition.Y), body.Rotation);
+ body.ApplyLinearImpulse(new Vector2(dir * 0.5f, isOpen ? 0.0f : -1.0f));
}
}
if (isHorizontal)
{
- if (Math.Abs(l.SimPosition.Y - item.SimPosition.Y) > simSize.Y * 0.5f) continue;
+ if (Math.Abs(body.SimPosition.Y - item.SimPosition.Y) > simSize.Y * 0.5f) continue;
- l.body.ApplyLinearImpulse(new Vector2(isOpen ? 0.0f : 1.0f, dir * 0.5f));
+ body.ApplyLinearImpulse(new Vector2(isOpen ? 0.0f : 1.0f, dir * 0.5f));
}
else
{
- if (Math.Abs(l.SimPosition.X - item.SimPosition.X) > simSize.X * 0.5f) continue;
+ if (Math.Abs(body.SimPosition.X - item.SimPosition.X) > simSize.X * 0.5f) continue;
- l.body.ApplyLinearImpulse(new Vector2(dir * 0.5f, isOpen ? 0.0f : -1.0f));
+ body.ApplyLinearImpulse(new Vector2(dir * 0.5f, isOpen ? 0.0f : -1.0f));
}
c.StartStun(0.2f);