diff options
author | Luca Rood <dev@lucarood.com> | 2017-07-04 11:57:57 +0300 |
---|---|---|
committer | Luca Rood <dev@lucarood.com> | 2017-07-04 11:57:57 +0300 |
commit | b87d10d4fe4df2d87d3acdd366f4bd5e2d1350fb (patch) | |
tree | a9c4eba32a78db4f060f34f0a86a1049209f5dd0 /source/blender/blenkernel/intern | |
parent | 3edc8c1f9bc625547fc234b8dbe613f3b60c0eb4 (diff) |
Better fix for rigid body not resimulating
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.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/rigidbody.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c index 03977b2c9ae..c18366d1b8a 100644 --- a/source/blender/blenkernel/intern/rigidbody.c +++ b/source/blender/blenkernel/intern/rigidbody.c @@ -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; |