From b87d10d4fe4df2d87d3acdd366f4bd5e2d1350fb Mon Sep 17 00:00:00 2001 From: Luca Rood Date: Tue, 4 Jul 2017 10:57:57 +0200 Subject: 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. --- source/blender/blenkernel/intern/rigidbody.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'source/blender/blenkernel/intern/rigidbody.c') 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; -- cgit v1.2.3