diff options
| author | jacksonmj <mj-pt@jacksonmj.co.uk> | 2012-06-21 12:31:35 (GMT) |
|---|---|---|
| committer | jacksonmj <mj-pt@jacksonmj.co.uk> | 2012-06-21 12:58:35 (GMT) |
| commit | 31ce22f122111267f7e2989a6eaf0e627ea7d2a7 (patch) | |
| tree | 9f14e764026452dd85024f7ee85b21c9981d2bcb /src/powder.c | |
| parent | ded23cfa948ef224075e59340a4ab70f3b1b9f28 (diff) | |
| download | powder-31ce22f122111267f7e2989a6eaf0e627ea7d2a7.zip powder-31ce22f122111267f7e2989a6eaf0e627ea7d2a7.tar.gz | |
Gravity modes and Newtonian gravity for fireworks
Resolves issue #59
Diffstat (limited to 'src/powder.c')
| -rw-r--r-- | src/powder.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/powder.c b/src/powder.c index da715f6..c7d3e64 100644 --- a/src/powder.c +++ b/src/powder.c @@ -56,6 +56,28 @@ int pmap_count[YRES][XRES]; unsigned cb_pmap[YRES][XRES]; unsigned photons[YRES][XRES]; +void get_gravity_field(int x, int y, float particleGrav, float newtonGrav, float *pGravX, float *pGravY) +{ + *pGravX = newtonGrav*gravx[(y/CELL)*(XRES/CELL)+(x/CELL)]; + *pGravY = newtonGrav*gravy[(y/CELL)*(XRES/CELL)+(x/CELL)]; + switch (gravityMode) + { + default: + case 0: //normal, vertical gravity + *pGravY += particleGrav; + break; + case 1: //no gravity + break; + case 2: //radial gravity + if (x-XCNTR != 0 || y-YCNTR != 0) + { + float pGravMult = particleGrav/sqrtf((x-XCNTR)*(x-XCNTR) + (y-YCNTR)*(y-YCNTR)); + *pGravX -= pGravMult * (float)(x - XCNTR); + *pGravY -= pGravMult * (float)(y - YCNTR); + } + } +} + static int pn_junction_sprk(int x, int y, int pt) { unsigned r = pmap[y][x]; |
