diff options
Diffstat (limited to '2d/rigidbody/rigidbody_2/main.cpp')
-rw-r--r-- | 2d/rigidbody/rigidbody_2/main.cpp | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/2d/rigidbody/rigidbody_2/main.cpp b/2d/rigidbody/rigidbody_2/main.cpp index bad6949..123cf7e 100644 --- a/2d/rigidbody/rigidbody_2/main.cpp +++ b/2d/rigidbody/rigidbody_2/main.cpp @@ -63,13 +63,15 @@ struct Rigidbody { float32 nextTimeAppliedSeconds = i.timeAppliedSeconds + deltaTimeSeconds; if (nextTimeAppliedSeconds >= i.timeOfApplicationSeconds) { - nextTimeAppliedSeconds = i.timeOfApplicationSeconds; // Do the remainder of the time + nextTimeAppliedSeconds = i.timeOfApplicationSeconds; i.isDead = true; } float32 impulseDtSeconds = nextTimeAppliedSeconds - i.timeAppliedSeconds; Vector2 forceToApply = i.force * (impulseDtSeconds / i.timeOfApplicationSeconds); force += forceToApply * impulseDtSeconds; + + // New! Increment the torque for each force torque += i.pointOfApplication.getPerp().dot(forceToApply); i.timeAppliedSeconds = nextTimeAppliedSeconds; @@ -79,12 +81,11 @@ struct Rigidbody { velocity += (acceleration * deltaTimeSeconds); position += (velocity * deltaTimeSeconds); - // New: Update the rotational velocity as well + // New! Update the rotational velocity as well float32 rotationalAcceleration = torque / momentOfInertia; rotationalVelocity += (rotationalAcceleration * deltaTimeSeconds); rotation += (rotationalVelocity * deltaTimeSeconds); - // Cleanup any impulses that have expired in the mean time for (int32 idx = 0; idx < numImpulses; idx++) { if (activeImpulses[idx].isDead) { for (int j = idx + 1; j < numImpulses; j++) { |