Advertisement
EditorRUS

Powder toy atmos update code

Dec 10th, 2012
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1.     for (y=0; y<YRES/CELL; y++) //update velocity and pressure
  2.     {
  3.         for (x=0; x<XRES/CELL; x++)
  4.         {
  5.             dh = 0.0f;
  6.             dx = 0.0f;
  7.             dy = 0.0f;
  8.             for (j=-1; j<2; j++)
  9.             {
  10.                 for (i=-1; i<2; i++)
  11.                 {
  12.                     if (y+j>0 && y+j<YRES/CELL-2 &&
  13.                             x+i>0 && x+i<XRES/CELL-2 &&
  14.                             !bmap_blockairh[y+j][x+i])
  15.                     {
  16.                         f = kernel[i+1+(j+1)*3];
  17.                         dh += hv[y+j][x+i]*f;
  18.                         dx += vx[y+j][x+i]*f;
  19.                         dy += vy[y+j][x+i]*f;
  20.                     }
  21.                     else
  22.                     {
  23.                         f = kernel[i+1+(j+1)*3];
  24.                         dh += hv[y][x]*f;
  25.                         dx += vx[y][x]*f;
  26.                         dy += vy[y][x]*f;
  27.                     }
  28.                 }
  29.             }
  30.             tx = x - dx*0.7f;
  31.             ty = y - dy*0.7f;
  32.             i = (int)tx;
  33.             j = (int)ty;
  34.             tx -= i;
  35.             ty -= j;
  36.             if (i>=2 && i<XRES/CELL-3 && j>=2 && j<YRES/CELL-3)
  37.             {
  38.                 odh = dh;
  39.                 dh *= 1.0f - AIR_VADV;
  40.                 dh += AIR_VADV*(1.0f-tx)*(1.0f-ty)*(bmap_blockairh[j][i] ? odh : hv[j][i]);
  41.                 dh += AIR_VADV*tx*(1.0f-ty)*(bmap_blockairh[j][i+1] ? odh : hv[j][i+1]);
  42.                 dh += AIR_VADV*(1.0f-tx)*ty*(bmap_blockairh[j+1][i] ? odh : hv[j+1][i]);
  43.                 dh += AIR_VADV*tx*ty*(bmap_blockairh[j+1][i+1] ? odh : hv[j+1][i+1]);
  44.             }
  45.             pv[y][x] += (dh-hv[y][x])/5000.0f;
  46.             if(!gravityMode){ //Vertical gravity only for the time being
  47.                 float airdiff = hv[y-1][x]-hv[y][x];
  48.                 if(airdiff>0 && !bmap_blockairh[y-1][x])
  49.                     vy[y][x] -= airdiff/5000.0f;
  50.             }
  51.             ohv[y][x] = dh;
  52.         }
  53.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement