Better fix for rigid body not resimulating
authorLuca Rood <dev@lucarood.com>
Tue, 4 Jul 2017 08:57:57 +0000 (10:57 +0200)
committerLuca Rood <dev@lucarood.com>
Tue, 4 Jul 2017 08:57:57 +0000 (10:57 +0200)
Last fix only accounted for direct changes to the RB settings, but
failed for, say, object transformations. This fix accounts for any
change that might invalidate the RB cache.

source/blender/blenkernel/intern/rigidbody.c

index 03977b2c9ae2d5e50a82c27d2994fed9e86e76b3..c18366d1b8ab937fbfd9c6c22b70bc7d45c5dad7 100644 (file)
@@ -1517,7 +1517,6 @@ void BKE_rigidbody_cache_reset(RigidBodyWorld *rbw)
 {
        if (rbw) {
                rbw->pointcache->flag |= PTCACHE_OUTDATED;
-               rbw->ltime = rbw->pointcache->startframe;
        }
 }
 
@@ -1580,6 +1579,10 @@ void BKE_rigidbody_do_simulation(Scene *scene, float ctime)
        // RB_TODO deal with interpolated, old and baked results
        bool can_simulate = (ctime == rbw->ltime + 1) && !(cache->flag & PTCACHE_BAKED);
 
+       if (cache->flag & PTCACHE_OUTDATED || cache->last_exact == 0) {
+               rbw->ltime = cache->startframe;
+       }
+
        if (BKE_ptcache_read(&pid, ctime, can_simulate)) {
                BKE_ptcache_validate(cache, (int)ctime);
                return;