Skip to content

Commit

Permalink
Make spring->maxForce limit force on cpDampedRotarySpring
Browse files Browse the repository at this point in the history
  • Loading branch information
viblo committed May 7, 2024
1 parent ed87f25 commit 0b198b7
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions src/cpDampedRotarySpring.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
*/

#include "chipmunk/chipmunk_private.h"

#include <stdio.h>
static cpFloat
defaultSpringTorque(cpDampedRotarySpring *spring, cpFloat relativeAngle){
return (relativeAngle - spring->restAngle)*spring->stiffness;
Expand All @@ -40,7 +40,10 @@ preStep(cpDampedRotarySpring *spring, cpFloat dt)
spring->target_wrn = 0.0f;

// apply spring torque
cpFloat j_spring = spring->springTorqueFunc((cpConstraint *)spring, a->a - b->a)*dt;
cpFloat t_spring = spring->springTorqueFunc((cpConstraint *)spring, a->a - b->a);
t_spring = cpfclamp(t_spring, -spring->constraint.maxForce, spring->constraint.maxForce);

cpFloat j_spring = t_spring*dt;
spring->jAcc = j_spring;

a->w -= j_spring*a->i_inv;
Expand All @@ -65,8 +68,12 @@ applyImpulse(cpDampedRotarySpring *spring, cpFloat dt)

//apply_impulses(a, b, spring->r1, spring->r2, cpvmult(spring->n, v_damp*spring->nMass));
cpFloat j_damp = w_damp*spring->iSum;
spring->jAcc -= j_damp;
cpFloat maxImpulse = spring->constraint.maxForce*dt;

cpFloat jAccClamped = cpfclamp(spring->jAcc-j_damp, -maxImpulse, maxImpulse);
j_damp = spring->jAcc - jAccClamped;

spring->jAcc -= j_damp;
a->w += j_damp*a->i_inv;
b->w -= j_damp*b->i_inv;
}
Expand Down

0 comments on commit 0b198b7

Please sign in to comment.