[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [31723] trunk/blender/source/blender/ blenkernel: Fix for [#23298] Kill particle breaks when baking simulation
Janne Karhu
jhkarh at gmail.com
Thu Sep 2 12:26:19 CEST 2010
Revision: 31723
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=31723
Author: jhk
Date: 2010-09-02 12:26:19 +0200 (Thu, 02 Sep 2010)
Log Message:
-----------
Fix for [#23298] Kill particle breaks when baking simulation
* Cached particle die times are now read from cached data
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_particle.h
trunk/blender/source/blender/blenkernel/intern/particle.c
trunk/blender/source/blender/blenkernel/intern/particle_system.c
Modified: trunk/blender/source/blender/blenkernel/BKE_particle.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_particle.h 2010-09-02 09:11:40 UTC (rev 31722)
+++ trunk/blender/source/blender/blenkernel/BKE_particle.h 2010-09-02 10:26:19 UTC (rev 31723)
@@ -283,6 +283,8 @@
void psys_mat_hair_to_global(struct Object *ob, struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
void psys_mat_hair_to_orco(struct Object *ob, struct DerivedMesh *dm, short from, struct ParticleData *pa, float hairmat[][4]);
+float psys_get_dietime_from_cache(struct PointCache *cache, int index);
+
void psys_free_pdd(struct ParticleSystem *psys);
float *psys_cache_vgroup(struct DerivedMesh *dm, struct ParticleSystem *psys, int vgroup);
Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c 2010-09-02 09:11:40 UTC (rev 31722)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c 2010-09-02 10:26:19 UTC (rev 31723)
@@ -1121,6 +1121,24 @@
return ret == 2;
}
+
+float psys_get_dietime_from_cache(PointCache *cache, int index) {
+ PTCacheMem *pm;
+ int dietime = 10000000; /* some max value so that we can default to pa->time+lifetime */
+
+ for(pm=cache->mem_cache.last; pm; pm=pm->prev) {
+ if(pm->index_array) {
+ if(pm->index_array[index])
+ return (float)pm->frame;
+ }
+ else {
+ return (float)pm->frame;
+ }
+ }
+
+ return (float)dietime;
+}
+
static void init_particle_interpolation(Object *ob, ParticleSystem *psys, ParticleData *pa, ParticleInterpolationData *pind)
{
Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c 2010-09-02 09:11:40 UTC (rev 31722)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c 2010-09-02 10:26:19 UTC (rev 31723)
@@ -1983,6 +1983,12 @@
pa->dietime = pa->time + pa->lifetime;
+ if(sim->psys->pointcache && sim->psys->pointcache->flag & PTCACHE_BAKED &&
+ sim->psys->pointcache->mem_cache.first) {
+ float dietime = psys_get_dietime_from_cache(sim->psys->pointcache, p);
+ pa->dietime = MIN2(pa->dietime, dietime);
+ }
+
if(pa->time > cfra)
pa->alive = PARS_UNBORN;
else if(pa->dietime <= cfra)
More information about the Bf-blender-cvs
mailing list