     return Texel(texture, texture_coords);
   }
   
-  vec2 tc = vec2(tcX, tcY) / nbTc;
+  float sumDist = 0;
   
-  return Texel(texture, tc);
+  vec2 tc = vec2(0, 0);
+  
+  for(int i = 0; i < nbTc; i++){
+    vec2 diffTc = tcs[i] - texture_coords;
+    float lengthTc = sqrt((diffTc.x * diffTc.x) + (diffTc.y * diffTc.y));
+    sumDist += lengthTc;
+  }
+  
+  if(sumDist < 0.000000000001){ // :/
+    return Texel(texture, texture_coords);
+  }
+  
+  for(int i = 0; i < nbTc; i++){
+    vec2 diffTc = tcs[i] - texture_coords;
+    float lengthTc = sqrt((diffTc.x * diffTc.x) + (diffTc.y * diffTc.y));
+    tc = tc + diffTc * lengthTc / sumDist;
+  }
+  
+  return Texel(texture, tc + texture_coords);
 }

    vec2 xy2 = (xy) * pullingLength;
    xy2 += xy * (1 - dist) * (1 - dist) * pullingLength * pulling * 0.25;
    
    vec2 localTc = (position + xy2) / love_ScreenSize.xy;
    
    tcX += localTc.x;
    tcY += localTc.y;
    
    nbTc++;
  }
  

    vec2 xy2 = (xy) * pushingLength;
    xy2 += xy / dist * (1 - waveDist) * 30;// * (0.5 + (pushingLength / 1000 ) * 0.5) ;
    
    tcs[nbTc] = (position + xy2) / love_ScreenSize.xy;
    
    nbTc++;
  }
