diff options
| author | Simon <simon@hardwired.org.uk> | 2011-01-04 13:35:16 (GMT) |
|---|---|---|
| committer | Simon <simon@hardwired.org.uk> | 2011-01-04 13:35:16 (GMT) |
| commit | 3a2bc7664336fc386cde95dbdd3ca782b89cf0ac (patch) | |
| tree | a6a1275738db987232887efcc8055a123a77c3e6 /src | |
| parent | f0d9882b03a3b851984b74cbfe0f1e4810508073 (diff) | |
| download | powder-3a2bc7664336fc386cde95dbdd3ca782b89cf0ac.zip powder-3a2bc7664336fc386cde95dbdd3ca782b89cf0ac.tar.gz | |
Gravity control by Moach
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.c | 26 | ||||
| -rw-r--r-- | src/powder.c | 44 |
2 files changed, 60 insertions, 10 deletions
@@ -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) |
