Cherry-picked 0ff9a3d (more ragdoll optimization)

This commit is contained in:
Joonas Rikkonen
2018-06-20 15:55:23 +03:00
parent 15331c58bb
commit e7e7d32123
2 changed files with 21 additions and 29 deletions
@@ -1101,22 +1101,19 @@ namespace Barotrauma
float tfloorY = rayStart.Y + (rayEnd.Y - rayStart.Y) * closestFraction; float tfloorY = rayStart.Y + (rayEnd.Y - rayStart.Y) * closestFraction;
float targetY = tfloorY + Collider.height * 0.5f + Collider.radius + colliderHeightFromFloor; float targetY = tfloorY + Collider.height * 0.5f + Collider.radius + colliderHeightFromFloor;
if (Math.Abs(Collider.SimPosition.Y - targetY) > 0.01f && Collider.SimPosition.Y<targetY && !forceImmediate) if (Math.Abs(Collider.SimPosition.Y - targetY) > 0.01f)
{ {
Vector2 newSpeed = Collider.LinearVelocity; if (forceImmediate)
newSpeed.Y = (targetY - Collider.SimPosition.Y)*5.0f; {
Collider.LinearVelocity = newSpeed; Collider.LinearVelocity = new Vector2(Collider.LinearVelocity.X, 0);
} Collider.SetTransform(new Vector2(Collider.SimPosition.X, targetY), Collider.Rotation);
else }
{ else
Vector2 newSpeed = Collider.LinearVelocity; {
newSpeed.Y = 0.0f; Collider.LinearVelocity = new Vector2(Collider.LinearVelocity.X, (targetY - Collider.SimPosition.Y) * 5.0f);
Collider.LinearVelocity = newSpeed; }
Vector2 newPos = Collider.SimPosition; }
newPos.Y = targetY;
Collider.SetTransform(newPos, Collider.Rotation);
}
} }
} }
} }
@@ -1465,22 +1462,17 @@ namespace Barotrauma
private Vector2 GetFlowForce() private Vector2 GetFlowForce()
{ {
Vector2 limbPos = ConvertUnits.ToDisplayUnits(Limbs[0].SimPosition); Vector2 limbPos = Limbs[0].Position;
Vector2 force = Vector2.Zero; Vector2 force = Vector2.Zero;
foreach (MapEntity e in MapEntity.mapEntityList) foreach (Gap gap in Gap.GapList)
{ {
Gap gap = e as Gap; if (gap.Open <= 0.0f || gap.FlowTargetHull != currentHull || gap.LerpedFlowForce == Vector2.Zero) continue;
if (gap == null || gap.FlowTargetHull != currentHull || gap.LerpedFlowForce == Vector2.Zero) continue;
Vector2 gapPos = gap.SimPosition; Vector2 gapPos = gap.SimPosition;
float dist = Vector2.Distance(limbPos, gapPos); float dist = Vector2.Distance(limbPos, gapPos);
force += Vector2.Normalize(gap.LerpedFlowForce) * (Math.Max(gap.LerpedFlowForce.Length() - dist, 0.0f) / 500.0f); force += Vector2.Normalize(gap.LerpedFlowForce) * (Math.Max(gap.LerpedFlowForce.Length() - dist, 0.0f) / 500.0f);
} }
if (force.Length() > 20.0f) return force;
return force; return force;
} }
@@ -783,12 +783,6 @@ namespace Barotrauma
public override void Update(float deltaTime, Camera cam) public override void Update(float deltaTime, Camera cam)
{ {
if (Level.Loaded != null && WorldPosition.Y < Level.MaxEntityDepth)
{
Spawner.AddToRemoveQueue(this);
return;
}
ApplyStatusEffects(ActionType.Always, deltaTime, null); ApplyStatusEffects(ActionType.Always, deltaTime, null);
foreach (ItemComponent ic in components) foreach (ItemComponent ic in components)
@@ -851,6 +845,12 @@ namespace Barotrauma
MathHelper.Clamp(body.LinearVelocity.X, -MaxVel, MaxVel), MathHelper.Clamp(body.LinearVelocity.X, -MaxVel, MaxVel),
MathHelper.Clamp(body.LinearVelocity.Y, -MaxVel, MaxVel)); MathHelper.Clamp(body.LinearVelocity.Y, -MaxVel, MaxVel));
} }
if (CurrentHull == null && body.SimPosition.Y < ConvertUnits.ToSimUnits(Level.MaxEntityDepth))
{
Spawner.AddToRemoveQueue(this);
return;
}
} }
UpdateNetPosition(); UpdateNetPosition();