From 450020b47c4ab9eb68f85c170e47aad61a57b191 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Wed, 28 Jun 2017 17:04:37 +0300 Subject: [PATCH] Characters don't attempt to grab grab severed limbs when dragging dead bodies --- .../Characters/Animation/AnimController.cs | 2 +- .../Animation/HumanoidAnimController.cs | 33 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/Barotrauma/Source/Characters/Animation/AnimController.cs b/Barotrauma/Source/Characters/Animation/AnimController.cs index a27aa384f..b7e03d710 100644 --- a/Barotrauma/Source/Characters/Animation/AnimController.cs +++ b/Barotrauma/Source/Characters/Animation/AnimController.cs @@ -52,7 +52,7 @@ namespace Barotrauma public virtual void HoldItem(float deltaTime, Item item, Vector2[] handlePos, Vector2 holdPos, Vector2 aimPos, bool aim, float holdAngle) { } - public virtual void DragCharacter(Character target, LimbType rightHandTarget = LimbType.RightHand, LimbType leftHandTarget = LimbType.LeftHand) { } + public virtual void DragCharacter(Character target) { } } diff --git a/Barotrauma/Source/Characters/Animation/HumanoidAnimController.cs b/Barotrauma/Source/Characters/Animation/HumanoidAnimController.cs index 2be6776b8..c126eaa2b 100644 --- a/Barotrauma/Source/Characters/Animation/HumanoidAnimController.cs +++ b/Barotrauma/Source/Characters/Animation/HumanoidAnimController.cs @@ -882,23 +882,48 @@ namespace Barotrauma head.pullJoint.WorldAnchorB = new Vector2(targetHead.SimPosition.X, targetHead.SimPosition.Y + 0.6f + yPos); head.pullJoint.Enabled = true; } - public override void DragCharacter(Character target, LimbType rightHandTarget = LimbType.RightHand, LimbType leftHandTarget = LimbType.LeftHand) + public override void DragCharacter(Character target) { if (target == null) return; Limb leftHand = GetLimb(LimbType.LeftHand); Limb rightHand = GetLimb(LimbType.RightHand); + Limb targetLeftHand = target.AnimController.GetLimb(LimbType.LeftHand); + Limb targetRightHand = target.AnimController.GetLimb(LimbType.RightHand); + //only grab with one hand when swimming leftHand.Disabled = true; if (!inWater) rightHand.Disabled = true; for (int i = 0; i < 2; i++) { - LimbType type = i == 0 ? leftHandTarget : rightHandTarget; - Limb targetLimb = target.AnimController.GetLimb(type); + Limb targetLimb = target.AnimController.GetLimb(LimbType.Torso); - Limb pullLimb = GetLimb(i == 0 ? LimbType.LeftHand : LimbType.RightHand); + if (i == 0) + { + if (!targetLeftHand.IsSevered) + { + targetLimb = targetLeftHand; + } + else if (!targetRightHand.IsSevered) + { + targetLimb = targetRightHand; + } + } + else + { + if (!targetRightHand.IsSevered) + { + targetLimb = targetRightHand; + } + else if (!targetLeftHand.IsSevered) + { + targetLimb = targetLeftHand; + } + } + + Limb pullLimb = i == 0 ? leftHand : rightHand; if (i == 1 && inWater) {