diff options
author | Janne Karhu <jhkarh@gmail.com> | 2009-04-10 03:43:25 +0400 |
---|---|---|
committer | Janne Karhu <jhkarh@gmail.com> | 2009-04-10 03:43:25 +0400 |
commit | 6121d4b9fe188919c3c7f971a66c421d7eb86478 (patch) | |
tree | 31480cd780f58fab0e12db1d84bb75f32cf91830 /source/blender/blenkernel/intern/effect.c | |
parent | 5031fe982ea464ccb49ccfb4df857bf9dcb27c33 (diff) |
Particle effector falloff maxdist etc. didn't work like it was supposed to.
Diffstat (limited to 'source/blender/blenkernel/intern/effect.c')
-rw-r--r-- | source/blender/blenkernel/intern/effect.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c index a6514ae7b87..cca5d68167e 100644 --- a/source/blender/blenkernel/intern/effect.c +++ b/source/blender/blenkernel/intern/effect.c @@ -298,24 +298,22 @@ static float wind_func(struct RNG *rng, float strength) return ret; } - +/* maxdist: zero effect from this distance outwards (if usemax) */ +/* mindist: full effect up to this distance (if usemin) */ +/* power: falloff with formula 1/r^power */ static float falloff_func(float fac, int usemin, float mindist, int usemax, float maxdist, float power) { - if(!usemin) - mindist= 0.0f; + /* first quick checks */ + if(usemax && fac > maxdist) + return 0.0f; - if(fac < mindist) { + if(usemin && fac < mindist) return 1.0f; - } - else if(usemax) { - if(fac>maxdist || (maxdist-mindist)<=0.0f) - return 0.0f; - fac= (fac-mindist)/(maxdist-mindist); - return 1.0f - (float)pow((double)fac, (double)power); - } - else - return pow((double)1.0f+fac-mindist, (double)-power); + if(!usemin) + mindist = 0.0; + + return pow((double)1.0+fac-mindist, (double)-power); } static float falloff_func_dist(PartDeflect *pd, float fac) |