summaryrefslogtreecommitdiff
path: root/src
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
parentc819e2655e41363d0d416d478abe2804d40c1a95 (diff)
downloadpowder-2015499ff1f61d59e38e7943248d46cc2b16bc41.zip
powder-2015499ff1f61d59e38e7943248d46cc2b16bc41.tar.gz
Fix grav wall
Diffstat (limited to 'src')
-rw-r--r--src/graphics.c2
-rw-r--r--src/gravity.c24
-rw-r--r--src/main.c2
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;
+ }
+ }
}
}
}
diff --git a/src/main.c b/src/main.c
index 58c2a1a..097ba98 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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));