diff options
| author | cracker64 <cracker642@gmail.com> | 2013-03-01 05:41:53 (GMT) |
|---|---|---|
| committer | cracker64 <cracker642@gmail.com> | 2013-03-01 05:41:53 (GMT) |
| commit | 0d70547cf059b5bd0a7a4a0acd9251fb94c6115e (patch) | |
| tree | 99a0b212eeecee83662d963da052b439375acbf3 /src/simulation/elements/GEL.cpp | |
| parent | 5873d6958641af21b92fcb039d26c336331f19e7 (diff) | |
| download | powder-0d70547cf059b5bd0a7a4a0acd9251fb94c6115e.zip powder-0d70547cf059b5bd0a7a4a0acd9251fb94c6115e.tar.gz | |
More fixes to fix fixes and new fixes to fix stuff.
Diffstat (limited to 'src/simulation/elements/GEL.cpp')
| -rw-r--r-- | src/simulation/elements/GEL.cpp | 100 |
1 files changed, 57 insertions, 43 deletions
diff --git a/src/simulation/elements/GEL.cpp b/src/simulation/elements/GEL.cpp index 2b02841..0a61b82 100644 --- a/src/simulation/elements/GEL.cpp +++ b/src/simulation/elements/GEL.cpp @@ -65,66 +65,80 @@ int Element_GEL::update(UPDATE_FUNC_ARGS) continue; rt = r&0xFF; //Desaturation - if ((rt==PT_WATR || rt==PT_DSTW || rt==PT_FRZW) && parts[i].tmp<100 && 500>rand()%absorbChanceDenom) + switch (rt) { - parts[i].tmp++; - sim->kill_part(r>>8); - } - else if ((rt==PT_PSTE) && parts[i].tmp<100 && 20>rand()%absorbChanceDenom) - { - parts[i].tmp++; - sim->create_part(r>>8, x+rx, y+ry, PT_CLST); - } - else if ((rt==PT_SLTW) && parts[i].tmp<100 && 50>rand()%absorbChanceDenom) - { - parts[i].tmp++; - if (rand()%4) + case PT_WATR: + case PT_DSTW: + case PT_FRZW: + if (parts[i].tmp<100 && 500>rand()%absorbChanceDenom) + { + parts[i].tmp++; sim->kill_part(r>>8); - else - sim->part_change_type(r>>8, x+rx, y+ry, PT_SALT); - } - else if ((rt==PT_CBNW) && parts[i].tmp<100 && 100>rand()%absorbChanceDenom) - { - parts[i].tmp++; - sim->part_change_type(r>>8, x+rx, y+ry, PT_CO2); - } - - else if (rt==PT_SPNG && parts[i].tmp<100 && ((parts[r>>8].life+1)>parts[i].tmp)) - { - parts[r>>8].life--; - parts[i].tmp++; - } - //Concentration diffusion - if (rt==PT_GEL && (parts[r>>8].tmp+1)<parts[i].tmp) - { - parts[r>>8].tmp++; - parts[i].tmp--; + } + break; + case PT_PSTE: + if (parts[i].tmp<100 && 20>rand()%absorbChanceDenom) + { + parts[i].tmp++; + sim->create_part(r>>8, x+rx, y+ry, PT_CLST); + } + break; + case PT_SLTW: + if (parts[i].tmp<100 && 50>rand()%absorbChanceDenom) + { + parts[i].tmp++; + if (rand()%4) + sim->kill_part(r>>8); + else + sim->part_change_type(r>>8, x+rx, y+ry, PT_SALT); + } + break; + case PT_CBNW: + if (parts[i].tmp<100 && 100>rand()%absorbChanceDenom) + { + parts[i].tmp++; + sim->part_change_type(r>>8, x+rx, y+ry, PT_CO2); + } + break; + case PT_SPNG: + if (parts[i].tmp<100 && ((parts[r>>8].life+1)>parts[i].tmp)) + { + parts[r>>8].life--; + parts[i].tmp++; + } + else if ((parts[r>>8].life+1)<parts[i].tmp)//Concentration diffusion + { + parts[r>>8].life++; + parts[i].tmp--; + } + break; + case PT_GEL: + if ((parts[r>>8].tmp+1)<parts[i].tmp) + { + parts[r>>8].tmp++; + parts[i].tmp--; + } gel = true; + break; + default: + break; } - else if (rt==PT_SPNG && (parts[r>>8].life+1)<parts[i].tmp) - { - parts[r>>8].life++; - parts[i].tmp--; - } - float dx, dy; dx = parts[i].x - parts[r>>8].x; dy = parts[i].y - parts[r>>8].y; //Stickness - if ((dx*dx + dy*dy)>1.5 && (gel || !sim->elements[r&0xFF].Falldown || (fabs((float)rx)<2 && fabs((float)ry)<2))) + if ((dx*dx + dy*dy)>1.5 && (gel || !sim->elements[rt].Falldown || (fabs((float)rx)<2 && fabs((float)ry)<2))) { float per, nd; nd = dx*dx + dy*dy - 0.5; - per = 5*(1 - parts[i].tmp/100)*(nd/(dx*dx + dy*dy + nd) - 0.5); - if (sim->elements[r&0xFF].State==ST_LIQUID) + if (sim->elements[rt].State==ST_LIQUID) per *= 0.1; - dx *= per; dy *= per; parts[i].vx += dx; parts[i].vy += dy; - if ((sim->elements[r&0xFF].Properties&TYPE_PART) || rt==PT_GOO) + if ((sim->elements[rt].Properties&TYPE_PART) || rt==PT_GOO) { parts[r>>8].vx -= dx; parts[r>>8].vy -= dy; |
