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/gravity.c | |
| parent | c819e2655e41363d0d416d478abe2804d40c1a95 (diff) | |
| download | powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.zip powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.tar.gz | |
Fix grav wall
Diffstat (limited to 'src/gravity.c')
| -rw-r--r-- | src/gravity.c | 24 |
1 files changed, 16 insertions, 8 deletions
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; + } + } } } } |
