From 795b2e4cad3cf47b80249ac740fe31761f3ca1b1 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Tue, 27 Feb 2018 15:00:08 +0200 Subject: [PATCH] Fixed crashing when attempting to perform CPR on a character with no head. Closes #294 --- .../Animation/HumanoidAnimController.cs | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs index c5633c260..7961a5d08 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Animation/HumanoidAnimController.cs @@ -918,11 +918,16 @@ namespace Barotrauma Vector2 diff = target.SimPosition - character.SimPosition; Limb targetHead = target.AnimController.GetLimb(LimbType.Head); Limb targetTorso = target.AnimController.GetLimb(LimbType.Torso); + if (targetTorso == null) + { + Anim = Animation.None; + return; + } + Limb head = GetLimb(LimbType.Head); Limb torso = GetLimb(LimbType.Torso); Vector2 headDiff = targetHead == null ? diff : targetHead.SimPosition - character.SimPosition; - targetMovement = new Vector2(diff.X, 0.0f); TargetDir = headDiff.X > 0.0f ? Direction.Right : Direction.Left; @@ -942,9 +947,8 @@ namespace Barotrauma } } - 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; head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.3f + yPos); @@ -964,8 +968,11 @@ namespace Barotrauma } else { - head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.8f); - head.pullJoint.Enabled = true; + if (targetHead != null) + { + 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.Enabled = true; if (cprPump >= 1)