diff options
| author | Philip <philip@philip-linuxlaptop.(none)> | 2010-11-09 00:59:03 (GMT) |
|---|---|---|
| committer | Philip <philip@philip-linuxlaptop.(none)> | 2010-11-09 00:59:03 (GMT) |
| commit | 16265e3736d5cf9e5620d423e03ed1df0ede50eb (patch) | |
| tree | fad9a64e776b22660536d797737c6489af4e4266 /src/powder.c | |
| parent | b8ed9035f7d3af3b1b7e8d404b277abcb53df083 (diff) | |
| download | powder-16265e3736d5cf9e5620d423e03ed1df0ede50eb.zip powder-16265e3736d5cf9e5620d423e03ed1df0ede50eb.tar.gz | |
made faster
Diffstat (limited to 'src/powder.c')
| -rw-r--r-- | src/powder.c | 64 |
1 files changed, 39 insertions, 25 deletions
diff --git a/src/powder.c b/src/powder.c index 71e3031..1c63255 100644 --- a/src/powder.c +++ b/src/powder.c @@ -354,7 +354,7 @@ void kill_part(int i) pfree = i; } -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) _inline int create_part(int p, int x, int y, int t) #else inline int create_part(int p, int x, int y, int t) @@ -650,7 +650,7 @@ static void create_cherenkov_photon(int pp) parts[i].vy *= r; } -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) _inline void delete_part(int x, int y) #else inline void delete_part(int x, int y) @@ -672,7 +672,7 @@ inline void delete_part(int x, int y) return; } -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) _inline int is_wire(int x, int y) #else inline int is_wire(int x, int y) @@ -681,7 +681,7 @@ inline int is_wire(int x, int y) return bmap[y][x]==6 || bmap[y][x]==7 || bmap[y][x]==3 || bmap[y][x]==8 || bmap[y][x]==11 || bmap[y][x]==12; } -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) _inline int is_wire_off(int x, int y) #else inline int is_wire_off(int x, int y) @@ -772,7 +772,7 @@ void set_emap(int x, int y) } } -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) _inline int parts_avg(int ci, int ni) #else inline int parts_avg(int ci, int ni) @@ -845,24 +845,42 @@ void update_particles_i(pixel *vid, int start, int inc) for(int nnx=-1;nnx<2;nnx++) for(int nny=-1;nny<2;nny++) { - if(ny+nny<4&&nx+nnx<4)//any way to make wrapping code smaller? + if(ny+nny<4&&nx+nnx<4){//any way to make wrapping code smaller? gol2[XRES-5][YRES-5][golnum] ++; - else if(ny+nny<4&&nx+nnx>=XRES-4) + gol2[XRES-5][YRES-5][0] ++; + } + else if(ny+nny<4&&nx+nnx>=XRES-4){ gol2[4][YRES-5][golnum] ++; - else if(ny+nny>=YRES-4&&nx+nnx<4) + gol2[4][YRES-5][0] ++; + } + else if(ny+nny>=YRES-4&&nx+nnx<4){ gol2[XRES-5][4][golnum] ++; - else if(nx+nnx<4) + gol2[XRES-5][4][0] ++; + } + else if(nx+nnx<4){ gol2[XRES-5][ny+nny][golnum] ++; - else if(ny+nny<4) + gol2[XRES-5][ny+nny][0] ++; + } + else if(ny+nny<4){ gol2[nx+nnx][YRES-5][golnum] ++; - else if(ny+nny>=YRES-4&&nx+nnx>=XRES-4) + gol2[nx+nnx][YRES-5][0] ++; + } + else if(ny+nny>=YRES-4&&nx+nnx>=XRES-4){ gol2[4][4][golnum] ++; - else if(ny+nny>=YRES-4) + gol2[4][4][0] ++; + } + else if(ny+nny>=YRES-4){ gol2[nx+nnx][4][golnum] ++; - else if(nx+nnx>=XRES-4) + gol2[nx+nnx][4][0] ++; + } + else if(nx+nnx>=XRES-4){ gol2[4][ny+nny][golnum] ++; - else + gol2[4][ny+nny][0] ++; + } + else{ gol2[nx+nnx][ny+nny][golnum] ++; + gol2[nx+nnx][ny+nny][0] ++; + } } @@ -872,15 +890,11 @@ void update_particles_i(pixel *vid, int start, int inc) for(nx=4;nx<XRES-4;nx++) for(ny=4;ny<YRES-4;ny++) { - int neighbors = 0; + int neighbors = gol2[nx][ny][0]; + if(neighbors==0) + continue; for(int golnum = 1;golnum<NGOL;golnum++) - { - neighbors += gol2[nx][ny][golnum]; - } - if(neighbors!=0) - { - for(int golnum = 1;golnum<NGOL;golnum++) - for(int goldelete = 1;goldelete<10;goldelete++) + for(int goldelete = 1;goldelete<10;goldelete++) { if(neighbors==goldelete&&gol[nx][ny]==0&&grule[golnum][goldelete]>=2&&gol2[nx][ny][golnum]>=(goldelete%2)+goldelete/2) { @@ -889,9 +903,9 @@ void update_particles_i(pixel *vid, int start, int inc) else if(neighbors==goldelete&&gol[nx][ny]==golnum&&(grule[golnum][goldelete-1]==0||grule[golnum][goldelete-1]==2)) parts[pmap[ny][nx]>>8].type = PT_NONE; } - for(int z = 1;z<NGOL;z++) + gol2[nx][ny][0] = 0; + for(int z = 1;z<NGOL;z++) gol2[nx][ny][z] = 0; - } } } if(CGOL==0) @@ -1019,7 +1033,7 @@ void update_particles_i(pixel *vid, int start, int inc) } // interpolator -#ifdef WIN32 +#if defined(WIN32) && !defined(__GNUC__) mv = max(fabsf(parts[i].vx), fabsf(parts[i].vy)); #else mv = fmaxf(fabsf(parts[i].vx), fabsf(parts[i].vy)); |
