diff options
| author | cracker64 <cracker642@gmail.com> | 2013-02-28 17:37:16 (GMT) |
|---|---|---|
| committer | cracker64 <cracker642@gmail.com> | 2013-02-28 17:37:16 (GMT) |
| commit | 5873d6958641af21b92fcb039d26c336331f19e7 (patch) | |
| tree | a334e74d7cf79726f5c0a411515bed801ee0333f /src/simulation/elements/CBNW.cpp | |
| parent | c65081d3ed44a97cea0f41a63e9ec07cf0feb5f2 (diff) | |
| download | powder-5873d6958641af21b92fcb039d26c336331f19e7.zip powder-5873d6958641af21b92fcb039d26c336331f19e7.tar.gz | |
Going through again.
Diffstat (limited to 'src/simulation/elements/CBNW.cpp')
| -rw-r--r-- | src/simulation/elements/CBNW.cpp | 170 |
1 files changed, 86 insertions, 84 deletions
diff --git a/src/simulation/elements/CBNW.cpp b/src/simulation/elements/CBNW.cpp index 87240d8..b59e5f4 100644 --- a/src/simulation/elements/CBNW.cpp +++ b/src/simulation/elements/CBNW.cpp @@ -48,91 +48,93 @@ Element_CBNW::Element_CBNW() //#TPT-Directive ElementHeader Element_CBNW static int update(UPDATE_FUNC_ARGS) int Element_CBNW::update(UPDATE_FUNC_ARGS) - { - int r, rx, ry; - if (sim->pv[y/CELL][x/CELL]<=3) - { - if(sim->pv[y/CELL][x/CELL]<=-0.5) - { - sim->part_change_type(i,x,y,PT_CO2); - parts[i].ctype = 5; - sim->pv[y/CELL][x/CELL] += 0.5f; - } - else if(1>(rand()%4000)) - { - sim->part_change_type(i,x,y,PT_CO2); - parts[i].ctype = 5; - sim->pv[y/CELL][x/CELL] += 0.5f; - } - } - if (parts[i].tmp2!=20) { - parts[i].tmp2 -= (parts[i].tmp2>20)?1:-1; - } - else if(!(rand()%200)) - { - parts[i].tmp2 = rand()%40; - } +{ + int r, rx, ry; + if (sim->pv[y/CELL][x/CELL]<=3) + { + if(sim->pv[y/CELL][x/CELL]<=-0.5) + { + sim->part_change_type(i,x,y,PT_CO2); + parts[i].ctype = 5; + sim->pv[y/CELL][x/CELL] += 0.5f; + } + else if(!(rand()%4000)) + { + sim->part_change_type(i,x,y,PT_CO2); + parts[i].ctype = 5; + sim->pv[y/CELL][x/CELL] += 0.5f; + } + } + if (parts[i].tmp2!=20) { + parts[i].tmp2 -= (parts[i].tmp2>20)?1:-1; + } + else if(!(rand()%200)) + { + parts[i].tmp2 = rand()%40; + } - if(parts[i].tmp>0) - { - //Explode - if(parts[i].tmp==1 && rand()%4) - { - sim->part_change_type(i,x,y,PT_CO2); - parts[i].ctype = 5; - sim->pv[y/CELL][x/CELL] += 0.2f; - } - parts[i].tmp--; - } - 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)) - { - r = pmap[y+ry][x+rx]; - if (!r) - continue; - if ((sim->elements[r&0xFF].Properties&TYPE_PART) && parts[i].tmp == 0 && 1>(rand()%250)) - { - //Start explode - parts[i].tmp = rand()%25;//(rand()%100)+50; - } - else if((r&0xFF)!=PT_DMND && (r&0xFF)!=PT_GLAS && (sim->elements[r&0xFF].Properties&TYPE_SOLID) && parts[i].tmp == 0 && (2-sim->pv[y/CELL][x/CELL])>(rand()%40000)) - { - sim->part_change_type(i,x,y,PT_CO2); - parts[i].ctype = 5; - sim->pv[y/CELL][x/CELL] += 0.2f; - - } - if ((r&0xFF)==PT_CBNW) - { - if(!parts[i].tmp && parts[r>>8].tmp) - { - parts[i].tmp = parts[r>>8].tmp; - if((r>>8)>i) //If the other particle hasn't been life updated - parts[i].tmp--; - } - else if(parts[i].tmp && !parts[r>>8].tmp) - { - parts[r>>8].tmp = parts[i].tmp; - if((r>>8)>i) //If the other particle hasn't been life updated - parts[r>>8].tmp++; - } - } - if (((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) && (sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && 1>(rand()%500)) - { - sim->part_change_type(i,x,y,PT_FIRE); - parts[i].life = 4; - parts[i].ctype = PT_WATR; - } - if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){ - sim->kill_part(r>>8); - if(1>(rand()%150)){ - sim->kill_part(i); - return 1; - } - } - } - return 0; + if(parts[i].tmp>0) + { + //Explode + if(parts[i].tmp==1 && rand()%4) + { + sim->part_change_type(i,x,y,PT_CO2); + parts[i].ctype = 5; + sim->pv[y/CELL][x/CELL] += 0.2f; + } + parts[i].tmp--; + } + 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)) + { + r = pmap[y+ry][x+rx]; + if (!r) + continue; + if ((sim->elements[r&0xFF].Properties&TYPE_PART) && parts[i].tmp == 0 && !(rand()%250)) + { + //Start explode + parts[i].tmp = rand()%25;//(rand()%100)+50; + } + else if((sim->elements[r&0xFF].Properties&TYPE_SOLID) && (r&0xFF)!=PT_DMND && (r&0xFF)!=PT_GLAS && parts[i].tmp == 0 && (2-sim->pv[y/CELL][x/CELL])>(rand()%40000)) + { + sim->part_change_type(i,x,y,PT_CO2); + parts[i].ctype = 5; + sim->pv[y/CELL][x/CELL] += 0.2f; + } + if ((r&0xFF)==PT_CBNW) + { + if(!parts[i].tmp && parts[r>>8].tmp) + { + parts[i].tmp = parts[r>>8].tmp; + if((r>>8)>i) //If the other particle hasn't been life updated + parts[i].tmp--; + } + else if(parts[i].tmp && !parts[r>>8].tmp) + { + parts[r>>8].tmp = parts[i].tmp; + if((r>>8)>i) //If the other particle hasn't been life updated + parts[r>>8].tmp++; + } + } + else if ((r&0xFF)==PT_RBDM||(r&0xFF)==PT_LRBD) + { + if ((sim->legacy_enable||parts[i].temp>(273.15f+12.0f)) && !(rand()%500)) + { + sim->part_change_type(i,x,y,PT_FIRE); + parts[i].life = 4; + parts[i].ctype = PT_WATR; + } + } + else if ((r&0xFF)==PT_FIRE && parts[r>>8].ctype!=PT_WATR){ + sim->kill_part(r>>8); + if(1>(rand()%150)){ + sim->kill_part(i); + return 1; + } + } + } + return 0; } |
