diff options
author | Matthew Kosarek <mattkae@protonmail.com> | 2021-06-24 09:28:20 -0400 |
---|---|---|
committer | Matthew Kosarek <mattkae@protonmail.com> | 2021-06-24 09:28:20 -0400 |
commit | 322df8c2a1aa32210102b2924b44be6e20cdf8ae (patch) | |
tree | f980a6d772559499fdda410c5956ca5569aa43e9 /2d/rigidbody/rigidbody_1/snippet3.cpp | |
parent | 953c41b0ec054997cdbc77bf6953187a22d9bd12 (diff) |
Decently working demo for rigidbody 1
Diffstat (limited to '2d/rigidbody/rigidbody_1/snippet3.cpp')
-rw-r--r-- | 2d/rigidbody/rigidbody_1/snippet3.cpp | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/2d/rigidbody/rigidbody_1/snippet3.cpp b/2d/rigidbody/rigidbody_1/snippet3.cpp index a43c884..4727a9a 100644 --- a/2d/rigidbody/rigidbody_1/snippet3.cpp +++ b/2d/rigidbody/rigidbody_1/snippet3.cpp @@ -17,24 +17,26 @@ struct Rigidbody { void update(float32 deltaTimeSeconds) { applyGravity(deltaTimeSeconds); - // Add up all of the forces acting at this moment Vector2 force; for (int32 idx = 0; idx < numImpulses; idx++) { Impulse& i = activeImpulses[idx]; float32 nextTimeAppliedSeconds = i.timeAppliedSeconds + deltaTimeSeconds; if (nextTimeAppliedSeconds >= i.timeOfApplicationSeconds) { - nextTimeAppliedSeconds = i.timeOfApplicationSeconds; + nextTimeAppliedSeconds = i.timeOfApplicationSeconds; // Do the remainder of the time i.isDead = true; } + // We apply the force spread out over timeOfApplicationSeconds, so we need + // to calculate the fractional amount of force that was applied in this frame. float32 impulseDtSeconds = nextTimeAppliedSeconds - i.timeAppliedSeconds; - force += i.force * impulseDtSeconds; + Vector2 forceToApply = i.force * (impulseDtSeconds / i.timeOfApplicationSeconds); + force += forceToApply * impulseDtSeconds; i.timeAppliedSeconds = nextTimeAppliedSeconds; } Vector2 acceleration = force / mass; - velocity += (acceleration * impulseDtSeconds); + velocity += (acceleration * deltaTimeSeconds); position += (velocity * deltaTimeSeconds); // Cleanup any impulses that have expired in the mean time |