Fixed crashing when attempting to perform CPR on a character with no head. Closes #294

This commit is contained in:
Joonas Rikkonen
2018-02-27 15:00:08 +02:00
parent 3564abf31b
commit 795b2e4cad
@@ -918,11 +918,16 @@ namespace Barotrauma
Vector2 diff = target.SimPosition - character.SimPosition; Vector2 diff = target.SimPosition - character.SimPosition;
Limb targetHead = target.AnimController.GetLimb(LimbType.Head); Limb targetHead = target.AnimController.GetLimb(LimbType.Head);
Limb targetTorso = target.AnimController.GetLimb(LimbType.Torso); Limb targetTorso = target.AnimController.GetLimb(LimbType.Torso);
if (targetTorso == null)
{
Anim = Animation.None;
return;
}
Limb head = GetLimb(LimbType.Head); Limb head = GetLimb(LimbType.Head);
Limb torso = GetLimb(LimbType.Torso); Limb torso = GetLimb(LimbType.Torso);
Vector2 headDiff = targetHead == null ? diff : targetHead.SimPosition - character.SimPosition; Vector2 headDiff = targetHead == null ? diff : targetHead.SimPosition - character.SimPosition;
targetMovement = new Vector2(diff.X, 0.0f); targetMovement = new Vector2(diff.X, 0.0f);
TargetDir = headDiff.X > 0.0f ? Direction.Right : Direction.Left; TargetDir = headDiff.X > 0.0f ? Direction.Right : Direction.Left;
@@ -942,9 +947,8 @@ namespace Barotrauma
} }
} }
int skill = character.GetSkillLevel("Medical"); int skill = character.GetSkillLevel("Medical");
if (cprAnimState % 17 > 15.0f) if (cprAnimState % 17 > 15.0f && targetHead != null)
{ {
float yPos = (float)Math.Sin(cprAnimState) * 0.2f; float yPos = (float)Math.Sin(cprAnimState) * 0.2f;
head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.3f + yPos); head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.3f + yPos);
@@ -964,8 +968,11 @@ namespace Barotrauma
} }
else else
{ {
head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.8f); if (targetHead != null)
head.pullJoint.Enabled = true; {
head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.8f);
head.pullJoint.Enabled = true;
}
torso.pullJoint.WorldAnchorB = new Vector2(torso.SimPosition.X, colliderPos.Y + (TorsoPosition - 0.1f)); torso.pullJoint.WorldAnchorB = new Vector2(torso.SimPosition.X, colliderPos.Y + (TorsoPosition - 0.1f));
torso.pullJoint.Enabled = true; torso.pullJoint.Enabled = true;
if (cprPump >= 1) if (cprPump >= 1)