diff options
| author | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-25 16:12:15 (GMT) |
|---|---|---|
| committer | Simon Robertshaw <simon@hardwired.org.uk> | 2012-07-25 16:12:15 (GMT) |
| commit | 6585a4640b9d1d24d821fb2147fe6182a709f088 (patch) | |
| tree | 4ccbd35c1776955c2933991af5181babe2332f9a /src/simulation/elements | |
| parent | 0afecb5b77442d770f5ebb149f574d87859ebde7 (diff) | |
| download | powder-6585a4640b9d1d24d821fb2147fe6182a709f088.zip powder-6585a4640b9d1d24d821fb2147fe6182a709f088.tar.gz | |
TPT: Replace all explosion sparks with new element (EMBR) 1d5b081942
Diffstat (limited to 'src/simulation/elements')
| -rw-r--r-- | src/simulation/elements/147.cpp | 49 | ||||
| -rw-r--r-- | src/simulation/elements/BOMB.cpp | 2 | ||||
| -rw-r--r-- | src/simulation/elements/DUST.cpp | 29 | ||||
| -rw-r--r-- | src/simulation/elements/ELEC.cpp | 18 | ||||
| -rw-r--r-- | src/simulation/elements/EMBR.cpp | 2 | ||||
| -rw-r--r-- | src/simulation/elements/FIRW.cpp | 97 | ||||
| -rw-r--r-- | src/simulation/elements/IGNT.cpp | 4 |
7 files changed, 50 insertions, 151 deletions
diff --git a/src/simulation/elements/147.cpp b/src/simulation/elements/147.cpp deleted file mode 100644 index 902db2d..0000000 --- a/src/simulation/elements/147.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "simulation/Elements.h" -//#TPT-Directive ElementClass Element_147 PT_147 147 -Element_147::Element_147() -{ - Identifier = "DEFAULT_PT_147"; - Name = "WIND"; - Colour = PIXPACK(0x101010); - MenuVisible = 0; - MenuSection = SC_SPECIAL; - Enabled = 0; - - Advection = 0.0f; - AirDrag = 0.00f * CFDS; - AirLoss = 0.90f; - Loss = 0.00f; - Collision = 0.0f; - Gravity = 0.0f; - Diffusion = 0.00f; - HotAir = 0.000f * CFDS; - Falldown = 0; - - Flammable = 0; - Explosive = 0; - Meltable = 0; - Hardness = 0; - - Weight = 100; - - Temperature = 0.0f; - HeatConduct = 40; - Description = ""; - - State = ST_NONE; - Properties = ST_NONE; - - LowPressure = IPL; - LowPressureTransition = NT; - HighPressure = IPH; - HighPressureTransition = NT; - LowTemperature = ITL; - LowTemperatureTransition = NT; - HighTemperature = ITH; - HighTemperatureTransition = NT; - - Update = NULL; - -} - -Element_147::~Element_147() {}
\ No newline at end of file diff --git a/src/simulation/elements/BOMB.cpp b/src/simulation/elements/BOMB.cpp index b170cc2..5001df6 100644 --- a/src/simulation/elements/BOMB.cpp +++ b/src/simulation/elements/BOMB.cpp @@ -70,7 +70,7 @@ int Element_BOMB::update(UPDATE_FUNC_ARGS) if ((pmap[y+nxj][x+nxi]&0xFF)!=PT_DMND && (pmap[y+nxj][x+nxi]&0xFF)!=PT_CLNE && (pmap[y+nxj][x+nxi]&0xFF)!=PT_PCLN && (pmap[y+nxj][x+nxi]&0xFF)!=PT_BCLN) { sim->delete_part(x+nxi, y+nxj, 0); - pv[(y+nxj)/CELL][(x+nxi)/CELL] += 0.1f; + sim->pv[(y+nxj)/CELL][(x+nxi)/CELL] += 0.1f; nb = sim->create_part(-3, x+nxi, y+nxj, PT_EMBR); if (nb!=-1) { diff --git a/src/simulation/elements/DUST.cpp b/src/simulation/elements/DUST.cpp index 353bfbd..924dabb 100644 --- a/src/simulation/elements/DUST.cpp +++ b/src/simulation/elements/DUST.cpp @@ -43,34 +43,7 @@ Element_DUST::Element_DUST() HighTemperatureTransition = NT; Update = NULL; - Graphics = &Element_DUST::graphics; + Graphics = NULL; } -//#TPT-Directive ElementHeader Element_DUST static int graphics(GRAPHICS_FUNC_ARGS) -int Element_DUST::graphics(GRAPHICS_FUNC_ARGS) - -{ - if(cpart->life >= 1) - { - *firea = 120; - *firer = *colr = cpart->flags; - *fireg = *colg = cpart->tmp; - *fireb = *colb = cpart->ctype; - if (ren->decorations_enable && cpart->dcolour) - { - int a = (cpart->dcolour>>24)&0xFF; - *firer = *colr = (a*((cpart->dcolour>>16)&0xFF) + (255-a)**colr) >> 8; - *fireg = *colg = (a*((cpart->dcolour>>8)&0xFF) + (255-a)**colg) >> 8; - *fireb = *colb = (a*((cpart->dcolour)&0xFF) + (255-a)**colb) >> 8; - } - *pixel_mode |= PMODE_GLOW | FIRE_ADD; - /**firea = 255; - *firer = *colr; - *fireg = *colg; - *fireb = *colb;*/ - } - return 0; -} - - Element_DUST::~Element_DUST() {}
\ No newline at end of file diff --git a/src/simulation/elements/ELEC.cpp b/src/simulation/elements/ELEC.cpp index ddaeac7..e9d1f5a 100644 --- a/src/simulation/elements/ELEC.cpp +++ b/src/simulation/elements/ELEC.cpp @@ -67,25 +67,31 @@ int Element_ELEC::update(UPDATE_FUNC_ARGS) continue; if ((r&0xFF)==PT_GLAS) { - //fire_r[y/CELL][x/CELL] += rand()%200; //D: Doesn't work with OpenGL, also shouldn't be here TODO: FIX THIS SHIT - //fire_g[y/CELL][x/CELL] += rand()%200; - //fire_b[y/CELL][x/CELL] += rand()%200; for (rrx=-1; rrx<=1; rrx++) { for (rry=-1; rry<=1; rry++) { if (x+rx+rrx>=0 && y+ry+rry>=0 && x+rx+rrx<XRES && y+ry+rry<YRES) { - nb = sim->create_part(-1, x+rx+rrx, y+ry+rry, PT_BOMB); + nb = sim->create_part(-1, x+rx+rrx, y+ry+rry, PT_EMBR); if (nb!=-1) { - parts[nb].tmp = 1; + parts[nb].tmp = 0; parts[nb].life = 50; - parts[nb].temp = 400.0f; + parts[nb].temp = parts[i].temp*0.8f; parts[nb].vx = rand()%20-10; parts[nb].vy = rand()%20-10; } } } } + //fire_r[y/CELL][x/CELL] += rand()%200; //D: Doesn't work with OpenGL, also shouldn't be here + //fire_g[y/CELL][x/CELL] += rand()%200; + //fire_b[y/CELL][x/CELL] += rand()%200; + /* possible alternative, but doesn't work well at the moment because FIRE_ADD divides firea by 8, so the glow isn't strong enough + create_part(i, x, y, PT_EMBR); + parts[i].tmp = 2; + parts[i].life = 2; + parts[i].ctype = ((rand()%200)<<16) | ((rand()%200)<<8) | (rand()%200); + */ sim->kill_part(i); return 1; } diff --git a/src/simulation/elements/EMBR.cpp b/src/simulation/elements/EMBR.cpp index 80c2c4e..ea710cf 100644 --- a/src/simulation/elements/EMBR.cpp +++ b/src/simulation/elements/EMBR.cpp @@ -94,7 +94,7 @@ int Element_EMBR::graphics(GRAPHICS_FUNC_ARGS) *colr = *colg = *colb = 255; } - if (decorations_enable && cpart->dcolour) + if (ren->decorations_enable && cpart->dcolour) { int a = (cpart->dcolour>>24)&0xFF; *colr = (a*((cpart->dcolour>>16)&0xFF) + (255-a)**colr) >> 8; diff --git a/src/simulation/elements/FIRW.cpp b/src/simulation/elements/FIRW.cpp index a23d013..9be26dd 100644 --- a/src/simulation/elements/FIRW.cpp +++ b/src/simulation/elements/FIRW.cpp @@ -1,4 +1,8 @@ #include "simulation/Elements.h" +extern "C" +{ + #include "hmap.h" +} //#TPT-Directive ElementClass Element_FIRW PT_FIRW 69 Element_FIRW::Element_FIRW() { @@ -50,7 +54,7 @@ Element_FIRW::Element_FIRW() int Element_FIRW::update(UPDATE_FUNC_ARGS) { int r, rx, ry, rt, np; - if (parts[i].tmp==0) { + if (parts[i].tmp<=0) { for (rx=-1; rx<2; rx++) for (ry=-1; ry<2; ry++) if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) @@ -62,52 +66,43 @@ int Element_FIRW::update(UPDATE_FUNC_ARGS) if (rt==PT_FIRE||rt==PT_PLSM||rt==PT_THDR) { parts[i].tmp = 1; - parts[i].life = rand()%50+60; + parts[i].life = rand()%40+60; } } } else if (parts[i].tmp==1) { - if (parts[i].life==0) { + if (parts[i].life<=0) { parts[i].tmp=2; } else { - float newVel = parts[i].life/25; - parts[i].flags &= ~FLAG_STAGNANT; - /* TODO: - if ((pmap[(int)(ly-newVel)][(int)lx]&0xFF)==PT_NONE && ly-newVel>0) { - parts[i].vy = -newVel; - ly-=newVel; - iy-=newVel; - }*/ - parts[i].vy = -newVel; + // TODO: different gravity modes + Newtonian gravity + parts[i].vy = -parts[i].life*0.04f - 0.1f; } } - else if (parts[i].tmp==2) { - int col = rand()%200+4; - int tmul; - for (rx=-2; rx<3; rx++) - for (ry=-2; ry<3; ry++) - if (x+rx>=0 && y+ry>0 && x+rx<XRES && y+ry<YRES && (rx || ry)) - { - tmul = rand()%7; - np = sim->create_part(-1, x+rx, y+ry, PT_FIRW); - if (np>-1) - { - parts[np].vx = (rand()%3-1)*tmul; - parts[np].vy = (rand()%3-1)*tmul; - parts[np].tmp = col; - parts[np].life = rand()%100+100; - parts[np].temp = 6000.0f; - parts[np].dcolour = parts[i].dcolour; - } - } - sim->pv[y/CELL][x/CELL] += 20; + else if (parts[i].tmp>=2) + { + float angle, magnitude; + int caddress = (rand()%200)*3; + int n; + unsigned col = (((unsigned char)(firw_data[caddress]))<<16) | (((unsigned char)(firw_data[caddress+1]))<<8) | ((unsigned char)(firw_data[caddress+2])); + for (n=0; n<40; n++) + { + np = sim->create_part(-3, x, y, PT_EMBR); + if (np>-1) + { + magnitude = ((rand()%60)+40)*0.05f; + angle = (rand()%6284)*0.001f;//(in radians, between 0 and 2*pi) + parts[np].vx = parts[i].vx + cosf(angle)*magnitude; + parts[np].vy = parts[i].vy + sinf(angle)*magnitude - 2.5f; + parts[np].ctype = col; + parts[np].tmp = 1; + parts[np].life = rand()%40+70; + parts[np].temp = (rand()%500)+5750.0f; + parts[np].dcolour = parts[i].dcolour; + } + } + sim->pv[y/CELL][x/CELL] += 8.0f; sim->kill_part(i); return 1; - } else if (parts[i].tmp>=3) { - if (parts[i].life<=0) { - sim->kill_part(i); - return 1; - } } return 0; } @@ -117,33 +112,7 @@ int Element_FIRW::update(UPDATE_FUNC_ARGS) int Element_FIRW::graphics(GRAPHICS_FUNC_ARGS) { - if(cpart->tmp>=3) - { - int caddress = restrict_flt(restrict_flt((float)(cpart->tmp-4), 0.0f, 200.0f)*3, 0.0f, (200.0f*3)-3); - *colr = 0;//(unsigned char)firw_data[caddress]; - *colg = 0;//(unsigned char)firw_data[caddress+1]; - *colb = 0;//(unsigned char)firw_data[caddress+2]; - - if (ren->decorations_enable && cpart->dcolour) - { - int a = (cpart->dcolour>>24)&0xFF; - *colr = (a*((cpart->dcolour>>16)&0xFF) + (255-a)**colr) >> 8; - *colg = (a*((cpart->dcolour>>8)&0xFF) + (255-a)**colg) >> 8; - *colb = (a*((cpart->dcolour)&0xFF) + (255-a)**colb) >> 8; - } - - *firea = cpart->life*4; - if(*firea > 240) - *firea = 240; - *firer = *colr; - *fireg = *colg; - *fireb = *colb; - - *pixel_mode = PMODE_NONE; //Clear default, don't draw pixel - *pixel_mode |= FIRE_ADD; - //Returning 0 means dynamic, do not cache - } - else if(cpart->tmp > 0) + if(cpart->tmp > 0) { *pixel_mode |= PMODE_GLOW; } diff --git a/src/simulation/elements/IGNT.cpp b/src/simulation/elements/IGNT.cpp index 206b92b..de26eb7 100644 --- a/src/simulation/elements/IGNT.cpp +++ b/src/simulation/elements/IGNT.cpp @@ -73,9 +73,9 @@ int Element_IGNT::update(UPDATE_FUNC_ARGS) { if(rand()%3) { - int nb = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_BOMB); + int nb = sim->create_part(-1, x+rand()%3-1, y+rand()%3-1, PT_EMBR); if (nb!=-1) { - parts[nb].tmp = 1; + parts[nb].tmp = 0; parts[nb].life = 30; parts[nb].vx = rand()%20-10; parts[nb].vy = rand()%20-10; |
