summaryrefslogtreecommitdiff
path: root/src/gravity.c
diff options
context:
space:
mode:
authorjacksonmj <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)
commit2015499ff1f61d59e38e7943248d46cc2b16bc41 (patch)
tree215baaf62d582b31799088472636d89f337deee0 /src/gravity.c
parentc819e2655e41363d0d416d478abe2804d40c1a95 (diff)
downloadpowder-2015499ff1f61d59e38e7943248d46cc2b16bc41.zip
powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.tar.gz
Fix grav wall
Diffstat (limited to 'src/gravity.c')
-rw-r--r--src/gravity.c24
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;
+ }
+ }
}
}
}