Fix for [#26658] Permeable colliders stop particles
authorJanne Karhu <jhkarh@gmail.com>
Tue, 29 Mar 2011 10:27:31 +0000 (10:27 +0000)
committerJanne Karhu <jhkarh@gmail.com>
Tue, 29 Mar 2011 10:27:31 +0000 (10:27 +0000)
* Forgot this exception from the collisions rewrite. Don't check collisions with the same face twice.

source/blender/blenkernel/BKE_particle.h
source/blender/blenkernel/intern/particle_system.c

index 9b1651b12cd0d071d8969c6a5ef2eea3cc677d17..4dfc53e1734f316721933d96f8e6930ebc4b4b63 100644 (file)
@@ -157,8 +157,6 @@ typedef struct ParticleBillboardData
 
 typedef struct ParticleCollisionElement
 {
-       Object *ob;
-
        /* pointers to original data */
        float *x[4], *v[4];
 
@@ -171,6 +169,9 @@ typedef struct ParticleCollisionElement
        /* count of original data (1-4) */
        int tot;
 
+       /* index of the collision face */
+       int index;
+
        /* flags for inversed normal / particle already inside element at start */
        short inv_nor, inside;
 } ParticleCollisionElement;
index 649a6fa90a093a97d00e19a5368f757344d290dc..2fe7f42abe3f3cf6f790f2ec33436ad195739ee6 100644 (file)
@@ -2989,6 +2989,11 @@ void BKE_psys_collision_neartest_cb(void *userdata, int index, const BVHTreeRay
 
        pce.tot = 3;
        pce.inside = 0;
+       pce.index = index;
+
+       /* don't collide with same face again */
+       if(col->hit == col->current && col->pce.index == index && col->pce.tot == 3)
+               return;
 
        do
        {