From b1b443143f4049935bb9a71915cb2063a73a8dc2 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Fri, 7 Dec 2018 11:51:47 +0200 Subject: [PATCH] Additional check in BreakJoints to diagnose "invalid impulse" errors --- .../BarotraumaShared/Source/Characters/Character.cs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs index f2f536922..add56b681 100644 --- a/Barotrauma/BarotraumaShared/Source/Characters/Character.cs +++ b/Barotrauma/BarotraumaShared/Source/Characters/Character.cs @@ -1900,13 +1900,21 @@ namespace Barotrauma public void BreakJoints() { Vector2 centerOfMass = AnimController.GetCenterOfMass(); - foreach (Limb limb in AnimController.Limbs) { limb.AddDamage(limb.SimPosition, DamageType.Blunt, 500.0f, 0.0f, false); Vector2 diff = centerOfMass - limb.SimPosition; - if (diff == Vector2.Zero) continue; + + if (!MathUtils.IsValid(diff)) + { + string errorMsg = "Attempted to apply an invalid impulse to a limb in Character.BreakJoints (" + diff + "). Limb position: " + limb.SimPosition + ", center of mass: " + centerOfMass + "."; + DebugConsole.ThrowError(errorMsg); + GameAnalyticsManager.AddErrorEventOnce("Ragdoll.GetCenterOfMass", GameAnalyticsSDK.Net.EGAErrorSeverity.Error, errorMsg); + return; + } + + if (diff == Vector2.Zero) { continue; } limb.body.ApplyLinearImpulse(diff * 50.0f); }