From d666559481a26b4edba7e74001d0df058f4832c5 Mon Sep 17 00:00:00 2001 From: jacob1 Date: Sat, 3 Mar 2018 21:15:28 -0500 Subject: [PATCH] more accurate O2 fusion calculation, fixes #505 seemed to only be 3% slower in my tests with a full screen of heated pressurized O2 --- src/simulation/elements/O2.cpp | 53 +++++++++++++++++++--------------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/src/simulation/elements/O2.cpp b/src/simulation/elements/O2.cpp index 6296bfe529..19ded518de 100644 --- a/src/simulation/elements/O2.cpp +++ b/src/simulation/elements/O2.cpp @@ -74,37 +74,42 @@ int Element_O2::update(UPDATE_FUNC_ARGS) parts[i].tmp |= 2; } } - if (parts[i].temp > 9973.15 && sim->pv[y/CELL][x/CELL] > 250.0f && abs(sim->gravx[((y/CELL)*(XRES/CELL))+(x/CELL)]) + abs(sim->gravy[((y/CELL)*(XRES/CELL))+(x/CELL)]) > 20) + if (parts[i].temp > 9973.15 && sim->pv[y/CELL][x/CELL] > 250.0f) { - if (!(rand()%5)) + float gravx = sim->gravx[((y/CELL)*(XRES/CELL))+(x/CELL)]; + float gravy = sim->gravy[((y/CELL)*(XRES/CELL))+(x/CELL)]; + if (gravx*gravx + gravy*gravy > 400) { - int j; - sim->create_part(i,x,y,PT_BRMT); - - j = sim->create_part(-3,x,y,PT_NEUT); - if (j != -1) - parts[j].temp = MAX_TEMP; - j = sim->create_part(-3,x,y,PT_PHOT); - if (j != -1) - { - parts[j].temp = MAX_TEMP; - parts[j].tmp = 0x1; - } - rx = x+rand()%3-1, ry = y+rand()%3-1, r = TYP(pmap[ry][rx]); - if (sim->can_move[PT_PLSM][r] || r == PT_O2) + if (!(rand()%5)) { - j = sim->create_part(-3,rx,ry,PT_PLSM); - if (j > -1) + int j; + sim->create_part(i,x,y,PT_BRMT); + + j = sim->create_part(-3,x,y,PT_NEUT); + if (j != -1) + parts[j].temp = MAX_TEMP; + j = sim->create_part(-3,x,y,PT_PHOT); + if (j != -1) { parts[j].temp = MAX_TEMP; - parts[j].tmp |= 4; + parts[j].tmp = 0x1; + } + rx = x+rand()%3-1, ry = y+rand()%3-1, r = TYP(pmap[ry][rx]); + if (sim->can_move[PT_PLSM][r] || r == PT_O2) + { + j = sim->create_part(-3,rx,ry,PT_PLSM); + if (j > -1) + { + parts[j].temp = MAX_TEMP; + parts[j].tmp |= 4; + } } + j = sim->create_part(-3,x,y,PT_GRVT); + if (j != -1) + parts[j].temp = MAX_TEMP; + parts[i].temp = MAX_TEMP; + sim->pv[y/CELL][x/CELL] = 256; } - j = sim->create_part(-3,x,y,PT_GRVT); - if (j != -1) - parts[j].temp = MAX_TEMP; - parts[i].temp = MAX_TEMP; - sim->pv[y/CELL][x/CELL] = 256; } } return 0;