diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-08-15 12:53:28 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-08-15 12:53:28 +0400 |
commit | dd9ce7ba04131e8d6ed08a1c885afbadc2becfe9 (patch) | |
tree | b585922deef03d8706c52b8ee01b296cf7739a5e | |
parent | 4959f424b86545166a6ca6fc43ebf04d0537b04f (diff) |
Fix #23307: accessing FluidParticles.settings causes crash.
-rw-r--r-- | source/blender/makesrna/intern/rna_particle.c | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/source/blender/makesrna/intern/rna_particle.c b/source/blender/makesrna/intern/rna_particle.c index 1ed3adb24b3..ce7440ad09e 100644 --- a/source/blender/makesrna/intern/rna_particle.c +++ b/source/blender/makesrna/intern/rna_particle.c @@ -239,12 +239,25 @@ static void rna_Particle_redo_child(Main *bmain, Scene *scene, PointerRNA *ptr) particle_recalc(bmain, scene, ptr, PSYS_RECALC_CHILD); } +static ParticleSystem *rna_particle_system_for_target(Object *ob, ParticleTarget *target) +{ + ParticleSystem *psys; + ParticleTarget *pt; + + for(psys=ob->particlesystem.first; psys; psys=psys->next) + for(pt=psys->targets.first; pt; pt=pt->next) + if(pt == target) + return psys; + + return NULL; +} + static void rna_Particle_target_reset(Main *bmain, Scene *scene, PointerRNA *ptr) { if(ptr->type==&RNA_ParticleTarget) { - ParticleTarget *pt = (ParticleTarget*)ptr->data; Object *ob = (Object*)ptr->id.data; - ParticleSystem *kpsys=NULL, *psys=psys_get_current(ob); + ParticleTarget *pt = (ParticleTarget*)ptr->data; + ParticleSystem *kpsys=NULL, *psys=rna_particle_system_for_target(ob, pt); if(pt->ob==ob || pt->ob==NULL) { kpsys = BLI_findlink(&ob->particlesystem, pt->psys-1); @@ -277,7 +290,8 @@ static void rna_Particle_target_redo(Main *bmain, Scene *scene, PointerRNA *ptr) { if(ptr->type==&RNA_ParticleTarget) { Object *ob = (Object*)ptr->id.data; - ParticleSystem *psys = psys_get_current(ob); + ParticleTarget *pt = (ParticleTarget*)ptr->data; + ParticleSystem *psys = rna_particle_system_for_target(ob, pt); psys->recalc = PSYS_RECALC_REDO; @@ -302,16 +316,15 @@ static void rna_Particle_hair_dynamics(Main *bmain, Scene *scene, PointerRNA *pt } static PointerRNA rna_particle_settings_get(PointerRNA *ptr) { - Object *ob= (Object*)ptr->id.data; - ParticleSettings *part = psys_get_current(ob)->part; + ParticleSystem *psys= (ParticleSystem*)ptr->data; + ParticleSettings *part = psys->part; return rna_pointer_inherit_refine(ptr, &RNA_ParticleSettings, part); } static void rna_particle_settings_set(PointerRNA *ptr, PointerRNA value) { - Object *ob= (Object*)ptr->id.data; - ParticleSystem *psys = psys_get_current(ob); + ParticleSystem *psys= (ParticleSystem*)ptr->data; if(psys->part) psys->part->id.us--; |