diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2011-12-10 16:30:26 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2011-12-18 14:04:47 (GMT) |
| commit | 2015499ff1f61d59e38e7943248d46cc2b16bc41 (patch) | |
| tree | 215baaf62d582b31799088472636d89f337deee0 /src | |
| parent | c819e2655e41363d0d416d478abe2804d40c1a95 (diff) | |
| download | powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.zip powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.tar.gz | |
Fix grav wall
Diffstat (limited to 'src')
| -rw-r--r-- | src/graphics.c | 2 | ||||
| -rw-r--r-- | src/gravity.c | 24 | ||||
| -rw-r--r-- | src/main.c | 2 |
3 files changed, 18 insertions, 10 deletions
diff --git a/src/graphics.c b/src/graphics.c index 62475fc..55dd053 100644 --- a/src/graphics.c +++ b/src/graphics.c @@ -1427,7 +1427,7 @@ void draw_grav_zones(pixel * vid) { for (x=0; x<XRES/CELL; x++) { - if(gravmask[y][x]) + if(gravmaskf[y*CELL*XRES+x*CELL]) { for (j=0; j<CELL; j++)//draws the colors for (i=0; i<CELL; i++) diff --git a/src/gravity.c b/src/gravity.c index d7131a5..8977150 100644 --- a/src/gravity.c +++ b/src/gravity.c @@ -13,7 +13,7 @@ float gravmap[YRES/CELL][XRES/CELL]; //Maps to be used by the main thread float *gravpf; float *gravyf; float *gravxf; -unsigned gravmask[YRES/CELL][XRES/CELL]; +unsigned *gravmaskf; float th_ogravmap[YRES/CELL][XRES/CELL]; // Maps to be processed by the gravity thread float th_gravmap[YRES/CELL][XRES/CELL]; @@ -69,6 +69,7 @@ void gravity_init() gravyf = calloc(XRES*YRES, sizeof(float)); gravxf = calloc(XRES*YRES, sizeof(float)); gravpf = calloc(XRES*YRES, sizeof(float)); + gravmaskf = malloc(XRES*YRES*sizeof(unsigned)); } void gravity_cleanup() @@ -110,9 +111,8 @@ void gravity_update_async() } pthread_mutex_unlock(&gravmutex); //Apply the gravity mask - //TODO: doesn't work at the moment, gravx and gravy aren't used any more - //membwand(gravy, gravmask, sizeof(gravy), sizeof(gravmask)); - //membwand(gravx, gravmask, sizeof(gravx), sizeof(gravmask)); + membwand(gravyf, gravmaskf, XRES*YRES*sizeof(float), XRES*YRES*sizeof(unsigned)); + membwand(gravxf, gravmaskf, XRES*YRES*sizeof(float), XRES*YRES*sizeof(unsigned)); } } @@ -434,7 +434,8 @@ void mask_free(mask_el *c_mask_el){ void gravity_mask() { char checkmap[YRES/CELL][XRES/CELL]; - int x = 0, y = 0; + int x = 0, y = 0, i, j; + unsigned maskvalue; mask_el *t_mask_el = NULL; mask_el *c_mask_el = NULL; memset(checkmap, 0, sizeof(checkmap)); @@ -466,7 +467,7 @@ void gravity_mask() } } c_mask_el = t_mask_el; - memset(gravmask, 0, sizeof(gravmask)); + memset(gravmaskf, 0, XRES*YRES*sizeof(unsigned)); while(c_mask_el!=NULL) { char *cshape = c_mask_el->shape; @@ -476,9 +477,16 @@ void gravity_mask() { if(cshape[y*(XRES/CELL)+x]){ if(c_mask_el->shapeout) - gravmask[y][x] = 0xFFFFFFFF; + maskvalue = 0xFFFFFFFF; else - gravmask[y][x] = 0x00000000; + maskvalue = 0x00000000; + for (j=0; j<CELL; j++) + { + for (i=0; i<CELL; i++) + { + gravmaskf[(y*CELL+j)*XRES+x*CELL+i] = maskvalue; + } + } } } } @@ -1150,7 +1150,7 @@ void clear_sim(void) memset(fire_r, 0, sizeof(fire_r)); memset(fire_g, 0, sizeof(fire_g)); memset(fire_b, 0, sizeof(fire_b)); - memset(gravmask, 0xFF, sizeof(gravmask)); + memset(gravmaskf, 0xFF, XRES*YRES*sizeof(unsigned)); memset(gravyf, 0, XRES*YRES*sizeof(float)); memset(gravxf, 0, XRES*YRES*sizeof(float)); memset(gravpf, 0, XRES*YRES*sizeof(float)); |
