Collider height from floor can be changed in the xml files, moved human collider a bit higher to allow climbing over roughly waist-high obstacles

This commit is contained in:
Regalis
2016-11-17 18:06:43 +02:00
parent c25ea7c75f
commit adece20072
2 changed files with 12 additions and 6 deletions

View File

@@ -11,10 +11,11 @@
thightorque="-5.0"
walkspeed="1.5"
swimspeed="2.0"
impacttolerance="7.5">
impacttolerance="7.5"
colliderheightfromfloor="55">
<collider height="80" radius="15"/>
<collider height="40" radius="15"/>
<collider height="60" radius="15"/>
<collider height="30" radius="15"/>
<!-- head -->
<limb id = "0" radius="13" mass = "6" type="Head" attackpriority="2">

View File

@@ -70,6 +70,8 @@ namespace Barotrauma
protected bool inWater, headInWater;
public bool onGround;
private bool ignorePlatforms;
private float colliderHeightFromFloor;
protected Structure stairs;
@@ -101,7 +103,7 @@ namespace Barotrauma
if (collider[colliderIndex].height<collider[value].height)
{
Vector2 pos1 = collider[colliderIndex].SimPosition;
pos1.Y -= collider[colliderIndex].height * 0.45f;
pos1.Y -= collider[colliderIndex].height * colliderHeightFromFloor;
Vector2 pos2 = pos1;
pos2.Y += collider[value].height * 1.1f;
if (GameMain.World.RayCast(pos1, pos2).Any(f => f.CollisionCategories.HasFlag(Physics.CollisionWall))) return;
@@ -300,6 +302,9 @@ namespace Barotrauma
CanEnterSubmarine = ToolBox.GetAttributeBool(element, "canentersubmarine", true);
colliderHeightFromFloor = ToolBox.GetAttributeFloat(element, "colliderheightfromfloor", 45.0f);
colliderHeightFromFloor = ConvertUnits.ToSimUnits(colliderHeightFromFloor);
collider = new List<PhysicsBody>();
foreach (XElement subElement in element.Elements())
@@ -994,7 +999,7 @@ namespace Barotrauma
break;
case Physics.CollisionPlatform:
Structure platform = fixture.Body.UserData as Structure;
if (IgnorePlatforms || lowestLimb.Position.Y < platform.Rect.Y) return -1;
if (IgnorePlatforms || lowestLimb.Position.Y < platform.Rect.Y-16) return -1;
break;
case Physics.CollisionWall:
break;
@@ -1027,7 +1032,7 @@ namespace Barotrauma
}
float tfloorY = rayStart.Y + (rayEnd.Y - rayStart.Y) * closestFraction;
float targetY = tfloorY + Collider.height * 0.5f + Collider.radius + ConvertUnits.ToSimUnits(45.0f);
float targetY = tfloorY + Collider.height * 0.5f + Collider.radius + colliderHeightFromFloor;
if (Math.Abs(Collider.SimPosition.Y - targetY) > 0.01f && Collider.SimPosition.Y<targetY && !forceImmediate)
{