summaryrefslogtreecommitdiff
path: root/src/main.c
diff options
context:
space:
mode:
authorSimon Robertshaw <simon@hardwired.org.uk>2011-06-09 21:35:00 (GMT)
committer Simon Robertshaw <simon@hardwired.org.uk>2011-06-09 21:35:00 (GMT)
commit1f7106acb16962f925dfccc67dafc39f3bcfd877 (patch)
tree324c1f589da96a30205838e372489d9d9bde6132 /src/main.c
parent1effdb052a0b952d1390109bed67b3371046ccb7 (diff)
downloadpowder-1f7106acb16962f925dfccc67dafc39f3bcfd877.zip
powder-1f7106acb16962f925dfccc67dafc39f3bcfd877.tar.gz
Gravity zoning
Diffstat (limited to 'src/main.c')
-rw-r--r--src/main.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c
index 76e0282..5a22208 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1007,6 +1007,8 @@ int parse_save(void *save, int size, int replace, int x0, int y0, unsigned char
else
stop_grav_async();
}
+
+ gravity_mask();
if (p >= size)
goto version1;
@@ -1060,6 +1062,7 @@ corrupt:
void clear_sim(void)
{
+ int x, y;
memset(bmap, 0, sizeof(bmap));
memset(emap, 0, sizeof(emap));
memset(signs, 0, sizeof(signs));
@@ -1080,6 +1083,15 @@ 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(gravy, 0, sizeof(gravy));
+ memset(gravx, 0, sizeof(gravx));
+ for(x = 0; x < XRES/CELL; x++){
+ for(y = 0; y < YRES/CELL; y++){
+ hv[y][x] = 273.15f+22.0f; //Set to room temperature
+ }
+ }
+ gravity_mask();
}
// stamps library
@@ -1758,6 +1770,12 @@ int main(int argc, char *argv[])
#ifdef OpenGL
ClearScreen();
#else
+ if(gravwl_timeout)
+ {
+ if(gravwl_timeout==1)
+ gravity_mask();
+ gravwl_timeout--;
+ }
if (cmode==CM_VEL || cmode==CM_PRESS || cmode==CM_CRACK || (cmode==CM_HEAT && aheat_enable))//air only gets drawn in these modes
{
draw_air(vid_buf);
@@ -1788,6 +1806,8 @@ int main(int argc, char *argv[])
draw_walls(vid_buf);
update_particles(vid_buf); //update everything
draw_parts(vid_buf); //draw particles
+ if(sl == WL_GRAV+100 || sr == WL_GRAV+100)
+ draw_grav_zones(vid_buf);
if(ngrav_enable){
pthread_mutex_lock(&gravmutex);
@@ -1803,6 +1823,9 @@ int main(int argc, char *argv[])
}
}
pthread_mutex_unlock(&gravmutex);
+ //Apply the gravity mask
+ membwand(gravy, gravmask, sizeof(gravy), sizeof(gravmask));
+ membwand(gravx, gravmask, sizeof(gravx), sizeof(gravmask));
}
if (!sys_pause||framerender) //Only update if not paused