summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon <simon@hardwired.org.uk>2011-01-04 13:35:16 (GMT)
committer Simon <simon@hardwired.org.uk>2011-01-04 13:35:16 (GMT)
commit3a2bc7664336fc386cde95dbdd3ca782b89cf0ac (patch)
treea6a1275738db987232887efcc8055a123a77c3e6 /src
parentf0d9882b03a3b851984b74cbfe0f1e4810508073 (diff)
downloadpowder-3a2bc7664336fc386cde95dbdd3ca782b89cf0ac.zip
powder-3a2bc7664336fc386cde95dbdd3ca782b89cf0ac.tar.gz
Gravity control by Moach
Diffstat (limited to 'src')
-rw-r--r--src/main.c26
-rw-r--r--src/powder.c44
2 files changed, 60 insertions, 10 deletions
diff --git a/src/main.c b/src/main.c
index 7c24475..25a2503 100644
--- a/src/main.c
+++ b/src/main.c
@@ -477,6 +477,7 @@ int parse_save(void *save, int size, int replace, int x0, int y0)
if(replace)
{
+ gravityMode = 1;
memset(bmap, 0, sizeof(bmap));
memset(emap, 0, sizeof(emap));
memset(signs, 0, sizeof(signs));
@@ -1515,6 +1516,29 @@ int main(int argc, char *argv[])
else
GRID_MODE = (GRID_MODE+1)%10;
}
+
+ if(sdl_key=='w') //Gravity, by Moach
+ {
+ ++gravityMode; // cycle gravity mode
+ itc = 51;
+
+ switch (gravityMode)
+ {
+ default:
+ gravityMode = 0;
+ case 0:
+ strcpy(itc_msg, "Gravity: Off");
+ break;
+ case 1:
+ strcpy(itc_msg, "Gravity: Vertical");
+ break;
+ case 2:
+ strcpy(itc_msg, "Gravity: Radial");
+ break;
+
+ }
+ }
+
if(sdl_key=='t')
VINE_MODE = !VINE_MODE;
if(sdl_key==SDLK_SPACE)
@@ -2033,6 +2057,8 @@ int main(int argc, char *argv[])
svf_id[0] = 0;
svf_name[0] = 0;
svf_tags[0] = 0;
+ svf_description[0] = 0;
+ gravityMode = 1;
memset(fire_bg, 0, XRES*YRES*PIXELSIZE);
memset(fire_r, 0, sizeof(fire_r));
diff --git a/src/powder.c b/src/powder.c
index f61d6d5..a515177 100644
--- a/src/powder.c
+++ b/src/powder.c
@@ -12,6 +12,8 @@ float player2[27];
particle *parts;
particle *cb_parts;
+int gravityMode = 1; // starts enabled in "vertical" mode...
+
unsigned char bmap[YRES/CELL][XRES/CELL];
unsigned char emap[YRES/CELL][XRES/CELL];
@@ -1073,6 +1075,8 @@ void update_particles_i(pixel *vid, int start, int inc)
float c_heat = 0.0f;
int h_count = 0;
int starti = (start*-1);
+ float pGravX, pGravY, pGravD;
+
if(sys_pause&&!framerender)
return;
if(ISGRAV==1)
@@ -1500,16 +1504,36 @@ void update_particles_i(pixel *vid, int start, int inc)
}
else
{
- if(t==PT_ANAR)
- {
- parts[i].vx -= ptypes[t].advection*vx[y/CELL][x/CELL];
- parts[i].vy -= ptypes[t].advection*vy[y/CELL][x/CELL] + ptypes[t].gravity;
- }
- else{
- parts[i].vx += ptypes[t].advection*vx[y/CELL][x/CELL];
- parts[i].vy += ptypes[t].advection*vy[y/CELL][x/CELL] + ptypes[t].gravity;
-
- }
+ //Gravity mode by Moach
+ switch (gravityMode)
+ {
+ default:
+ case 0:
+ pGravX = pGravY = 0.0f;
+ break;
+ case 1:
+ pGravX = 0.0f;
+ pGravY = ptypes[t].gravity;
+ break;
+ case 2:
+
+ pGravD = 0.01f - hypotf((x - XCNTR), (y - YCNTR));
+
+ pGravX = ptypes[t].gravity * ((float)(x - XCNTR) / pGravD);
+ pGravY = ptypes[t].gravity * ((float)(y - YCNTR) / pGravD);
+
+ }
+
+ if(t==PT_ANAR)
+ {
+ parts[i].vx -= ptypes[t].advection*vx[y/CELL][x/CELL] + pGravX;
+ parts[i].vy -= ptypes[t].advection*vy[y/CELL][x/CELL] + pGravY;
+ }
+ else{
+ parts[i].vx += ptypes[t].advection*vx[y/CELL][x/CELL] + pGravX;
+ parts[i].vy += ptypes[t].advection*vy[y/CELL][x/CELL] + pGravY;
+
+ }
}
if(ptypes[t].diffusion)