mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-13 20:04:01 +02:00
Fix grav wall
This commit is contained in:
committed by
Simon Robertshaw
parent
c819e2655e
commit
2015499ff1
@@ -11,7 +11,7 @@ extern float gravmap[YRES/CELL][XRES/CELL]; //Maps to be used by the main thread
|
|||||||
extern float *gravpf;
|
extern float *gravpf;
|
||||||
extern float *gravxf;
|
extern float *gravxf;
|
||||||
extern float *gravyf;
|
extern float *gravyf;
|
||||||
extern unsigned gravmask[YRES/CELL][XRES/CELL];
|
extern unsigned *gravmaskf;
|
||||||
|
|
||||||
extern float th_ogravmap[YRES/CELL][XRES/CELL]; // Maps to be processed by the gravity thread
|
extern float th_ogravmap[YRES/CELL][XRES/CELL]; // Maps to be processed by the gravity thread
|
||||||
extern float th_gravmap[YRES/CELL][XRES/CELL];
|
extern float th_gravmap[YRES/CELL][XRES/CELL];
|
||||||
|
@@ -1427,7 +1427,7 @@ void draw_grav_zones(pixel * vid)
|
|||||||
{
|
{
|
||||||
for (x=0; x<XRES/CELL; x++)
|
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 (j=0; j<CELL; j++)//draws the colors
|
||||||
for (i=0; i<CELL; i++)
|
for (i=0; i<CELL; i++)
|
||||||
|
@@ -13,7 +13,7 @@ float gravmap[YRES/CELL][XRES/CELL]; //Maps to be used by the main thread
|
|||||||
float *gravpf;
|
float *gravpf;
|
||||||
float *gravyf;
|
float *gravyf;
|
||||||
float *gravxf;
|
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_ogravmap[YRES/CELL][XRES/CELL]; // Maps to be processed by the gravity thread
|
||||||
float th_gravmap[YRES/CELL][XRES/CELL];
|
float th_gravmap[YRES/CELL][XRES/CELL];
|
||||||
@@ -69,6 +69,7 @@ void gravity_init()
|
|||||||
gravyf = calloc(XRES*YRES, sizeof(float));
|
gravyf = calloc(XRES*YRES, sizeof(float));
|
||||||
gravxf = calloc(XRES*YRES, sizeof(float));
|
gravxf = calloc(XRES*YRES, sizeof(float));
|
||||||
gravpf = calloc(XRES*YRES, sizeof(float));
|
gravpf = calloc(XRES*YRES, sizeof(float));
|
||||||
|
gravmaskf = malloc(XRES*YRES*sizeof(unsigned));
|
||||||
}
|
}
|
||||||
|
|
||||||
void gravity_cleanup()
|
void gravity_cleanup()
|
||||||
@@ -110,9 +111,8 @@ void gravity_update_async()
|
|||||||
}
|
}
|
||||||
pthread_mutex_unlock(&gravmutex);
|
pthread_mutex_unlock(&gravmutex);
|
||||||
//Apply the gravity mask
|
//Apply the gravity mask
|
||||||
//TODO: doesn't work at the moment, gravx and gravy aren't used any more
|
membwand(gravyf, gravmaskf, XRES*YRES*sizeof(float), XRES*YRES*sizeof(unsigned));
|
||||||
//membwand(gravy, gravmask, sizeof(gravy), sizeof(gravmask));
|
membwand(gravxf, gravmaskf, XRES*YRES*sizeof(float), XRES*YRES*sizeof(unsigned));
|
||||||
//membwand(gravx, gravmask, sizeof(gravx), sizeof(gravmask));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -434,7 +434,8 @@ void mask_free(mask_el *c_mask_el){
|
|||||||
void gravity_mask()
|
void gravity_mask()
|
||||||
{
|
{
|
||||||
char checkmap[YRES/CELL][XRES/CELL];
|
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 *t_mask_el = NULL;
|
||||||
mask_el *c_mask_el = NULL;
|
mask_el *c_mask_el = NULL;
|
||||||
memset(checkmap, 0, sizeof(checkmap));
|
memset(checkmap, 0, sizeof(checkmap));
|
||||||
@@ -466,7 +467,7 @@ void gravity_mask()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
c_mask_el = t_mask_el;
|
c_mask_el = t_mask_el;
|
||||||
memset(gravmask, 0, sizeof(gravmask));
|
memset(gravmaskf, 0, XRES*YRES*sizeof(unsigned));
|
||||||
while(c_mask_el!=NULL)
|
while(c_mask_el!=NULL)
|
||||||
{
|
{
|
||||||
char *cshape = c_mask_el->shape;
|
char *cshape = c_mask_el->shape;
|
||||||
@@ -476,9 +477,16 @@ void gravity_mask()
|
|||||||
{
|
{
|
||||||
if(cshape[y*(XRES/CELL)+x]){
|
if(cshape[y*(XRES/CELL)+x]){
|
||||||
if(c_mask_el->shapeout)
|
if(c_mask_el->shapeout)
|
||||||
gravmask[y][x] = 0xFFFFFFFF;
|
maskvalue = 0xFFFFFFFF;
|
||||||
else
|
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_r, 0, sizeof(fire_r));
|
||||||
memset(fire_g, 0, sizeof(fire_g));
|
memset(fire_g, 0, sizeof(fire_g));
|
||||||
memset(fire_b, 0, sizeof(fire_b));
|
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(gravyf, 0, XRES*YRES*sizeof(float));
|
||||||
memset(gravxf, 0, XRES*YRES*sizeof(float));
|
memset(gravxf, 0, XRES*YRES*sizeof(float));
|
||||||
memset(gravpf, 0, XRES*YRES*sizeof(float));
|
memset(gravpf, 0, XRES*YRES*sizeof(float));
|
||||||
|
Reference in New Issue
Block a user