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.
This commit is contained in:
2017-07-04 10:57:57 +02:00
parent 3edc8c1f9b
commit b87d10d4fe

View 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;