summaryrefslogtreecommitdiff
path: root/src/powder.c
diff options
context:
space:
mode:
authorjacksonmj <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)
commit31ce22f122111267f7e2989a6eaf0e627ea7d2a7 (patch)
tree9f14e764026452dd85024f7ee85b21c9981d2bcb /src/powder.c
parentded23cfa948ef224075e59340a4ab70f3b1b9f28 (diff)
downloadpowder-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.c22
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];