Additional check in BreakJoints to diagnose "invalid impulse" errors
This commit is contained in:
@@ -1900,13 +1900,21 @@ namespace Barotrauma
|
|||||||
public void BreakJoints()
|
public void BreakJoints()
|
||||||
{
|
{
|
||||||
Vector2 centerOfMass = AnimController.GetCenterOfMass();
|
Vector2 centerOfMass = AnimController.GetCenterOfMass();
|
||||||
|
|
||||||
foreach (Limb limb in AnimController.Limbs)
|
foreach (Limb limb in AnimController.Limbs)
|
||||||
{
|
{
|
||||||
limb.AddDamage(limb.SimPosition, DamageType.Blunt, 500.0f, 0.0f, false);
|
limb.AddDamage(limb.SimPosition, DamageType.Blunt, 500.0f, 0.0f, false);
|
||||||
|
|
||||||
Vector2 diff = centerOfMass - limb.SimPosition;
|
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);
|
limb.body.ApplyLinearImpulse(diff * 50.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user