diff options
| author | Cracker64 <cracker642@gmail.com> | 2011-01-29 00:58:54 (GMT) |
|---|---|---|
| committer | Cracker64 <cracker642@gmail.com> | 2011-01-29 00:58:54 (GMT) |
| commit | 880ed33fc7b5258626afd186e71b02808555ce15 (patch) | |
| tree | d0393612844ff7be0ed7b386256eeb8e27e3971f /src/powder.c | |
| parent | bcea95c5ca9b899be193c20760c634e2a3f5ad91 (diff) | |
| download | powder-880ed33fc7b5258626afd186e71b02808555ce15.zip powder-880ed33fc7b5258626afd186e71b02808555ce15.tar.gz | |
oops, silly copy file, and fixed the new GoL from simon's fail merging.
Diffstat (limited to 'src/powder.c')
| -rw-r--r-- | src/powder.c | 42 |
1 files changed, 30 insertions, 12 deletions
diff --git a/src/powder.c b/src/powder.c index 385ac5d..632aab8 100644 --- a/src/powder.c +++ b/src/powder.c @@ -667,6 +667,12 @@ inline int create_part(int p, int x, int y, int t) parts[i].life = 50; parts[i].tmp = 50; } + if(ptypes[t].properties&PROP_LIFE) { + int r; + for(r = 0;r<NGOL;r++) + if(t==goltype[r]) + parts[i].tmp = grule[r+1][9] - 1; + } if (t==PT_DEUT) parts[i].life = 10; if (t==PT_BRAY) @@ -1124,7 +1130,7 @@ int nearest_part(int ci, int t) void update_particles_i(pixel *vid, int start, int inc) { - int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z; + int i, j, x, y, t, nx, ny, r, surround_space, s, lt, rt, nt, nnx, nny, q, golnum, goldelete, z, neighbors; float mv, dx, dy, ix, iy, lx, ly, nrx, nry, dp; int fin_x, fin_y, clear_x, clear_y; float fin_xf, fin_yf, clear_xf, clear_yf; @@ -1301,23 +1307,30 @@ void update_particles_i(pixel *vid, int start, int inc) continue; } else - for ( golnum=1; golnum<NGOL; golnum++) + for ( golnum=1; golnum<=NGOL; golnum++) if (parts[r>>8].type==goltype[golnum-1]) { - gol[nx][ny] = golnum; - for ( nnx=-1; nnx<2; nnx++) - for ( nny=-1; nny<2; nny++)//it will count itself as its own neighbor, which is needed, but will have 1 extra for delete check - { - gol2[((nx+nnx+XRES-3*CELL)%(XRES-2*CELL))+CELL][((ny+nny+YRES-3*CELL)%(YRES-2*CELL))+CELL][golnum] ++; - gol2[((nx+nnx+XRES-3*CELL)%(XRES-2*CELL))+CELL][((ny+nny+YRES-3*CELL)%(YRES-2*CELL))+CELL][0] ++; - } + if(parts[r>>8].tmp == grule[golnum][9]-1) { + gol[nx][ny] = golnum; + for ( nnx=-1; nnx<2; nnx++) + for ( nny=-1; nny<2; nny++)//it will count itself as its own neighbor, which is needed, but will have 1 extra for delete check + { + gol2[((nx+nnx+XRES-3*CELL)%(XRES-2*CELL))+CELL][((ny+nny+YRES-3*CELL)%(YRES-2*CELL))+CELL][golnum] ++; + gol2[((nx+nnx+XRES-3*CELL)%(XRES-2*CELL))+CELL][((ny+nny+YRES-3*CELL)%(YRES-2*CELL))+CELL][0] ++; + } + } else { + parts[r>>8].tmp --; + if(parts[r>>8].tmp<=0) + parts[r>>8].type = PT_NONE;//using kill_part makes it not work + } } } for (nx=CELL; nx<XRES-CELL; nx++) for (ny=CELL; ny<YRES-CELL; ny++) { - int neighbors = gol2[nx][ny][0]; - if (neighbors==0) + r = pmap[ny][nx]; + neighbors = gol2[nx][ny][0]; + if(neighbors==0 || !(ptypes[r&0xFF].properties&PROP_LIFE || !r&0xFF) || (r>>8)>=NPART) continue; for ( golnum = 1; golnum<NGOL; golnum++) for ( goldelete = 0; goldelete<9; goldelete++) @@ -1328,7 +1341,12 @@ void update_particles_i(pixel *vid, int start, int inc) createdsomething = 1; } else if (neighbors-1==goldelete&&gol[nx][ny]==golnum&&(grule[golnum][goldelete]==0||grule[golnum][goldelete]==2))//subtract 1 because it counted itself - kill_part(pmap[ny][nx]>>8); + { + if(parts[r>>8].tmp==grule[golnum][9]-1) + parts[r>>8].tmp --; + } + if(parts[r>>8].tmp<=0) + parts[r>>8].type = PT_NONE;//using kill_part makes it not work } gol2[nx][ny][0] = 0; for ( z = 1; z<NGOL; z++) |
