Small fixes

Fix nearest_part distance calculation
Rename air constants to avoid PLOSS clash with math.h
Prevent crashes due to bad lava ctype.
This commit is contained in:
jacksonmj 2011-02-01 16:03:09 +00:00
parent c78d4203ee
commit 77bcac1a56
3 changed files with 24 additions and 26 deletions

View File

@ -14,8 +14,6 @@
#define SERVER "powdertoy.co.uk" #define SERVER "powdertoy.co.uk"
#undef PLOSS
#define THUMB_CACHE_SIZE 256 #define THUMB_CACHE_SIZE 256
#define IMGCONNS 3 #define IMGCONNS 3
@ -45,11 +43,11 @@ extern unsigned char ZSIZE;
#define ISTP (CELL/2) #define ISTP (CELL/2)
#define CFDS (4.0f/CELL) #define CFDS (4.0f/CELL)
#define TSTEPP 0.3f #define AIR_TSTEPP 0.3f
#define TSTEPV 0.4f #define AIR_TSTEPV 0.4f
#define VADV 0.3f #define AIR_VADV 0.3f
#define VLOSS 0.999f #define AIR_VLOSS 0.999f
#define PLOSS 0.9999f #define AIR_PLOSS 0.9999f
#define GRID_X 5 #define GRID_X 5
#define GRID_Y 4 #define GRID_Y 4

View File

@ -86,8 +86,8 @@ void update_air(void)
dp = 0.0f; dp = 0.0f;
dp += vx[y][x-1] - vx[y][x]; dp += vx[y][x-1] - vx[y][x];
dp += vy[y-1][x] - vy[y][x]; dp += vy[y-1][x] - vy[y][x];
pv[y][x] *= PLOSS; pv[y][x] *= AIR_PLOSS;
pv[y][x] += dp*TSTEPP; pv[y][x] += dp*AIR_TSTEPP;
} }
for (y=0; y<YRES/CELL-1; y++) for (y=0; y<YRES/CELL-1; y++)
@ -96,10 +96,10 @@ void update_air(void)
dx = dy = 0.0f; dx = dy = 0.0f;
dx += pv[y][x] - pv[y][x+1]; dx += pv[y][x] - pv[y][x+1];
dy += pv[y][x] - pv[y+1][x]; dy += pv[y][x] - pv[y+1][x];
vx[y][x] *= VLOSS; vx[y][x] *= AIR_VLOSS;
vy[y][x] *= VLOSS; vy[y][x] *= AIR_VLOSS;
vx[y][x] += dx*TSTEPV; vx[y][x] += dx*AIR_TSTEPV;
vy[y][x] += dy*TSTEPV; vy[y][x] += dy*AIR_TSTEPV;
if (bmap[y][x]==WL_WALL || bmap[y][x+1]==WL_WALL || if (bmap[y][x]==WL_WALL || bmap[y][x+1]==WL_WALL ||
bmap[y][x]==WL_WALLELEC || bmap[y][x+1]==WL_WALLELEC || bmap[y][x]==WL_WALLELEC || bmap[y][x+1]==WL_WALLELEC ||
(bmap[y][x]==WL_EWALL && !emap[y][x]) || (bmap[y][x]==WL_EWALL && !emap[y][x]) ||
@ -148,20 +148,20 @@ void update_air(void)
if (i>=2 && i<XRES/CELL-3 && if (i>=2 && i<XRES/CELL-3 &&
j>=2 && j<YRES/CELL-3) j>=2 && j<YRES/CELL-3)
{ {
dx *= 1.0f - VADV; dx *= 1.0f - AIR_VADV;
dy *= 1.0f - VADV; dy *= 1.0f - AIR_VADV;
dx += VADV*(1.0f-tx)*(1.0f-ty)*vx[j][i]; dx += AIR_VADV*(1.0f-tx)*(1.0f-ty)*vx[j][i];
dy += VADV*(1.0f-tx)*(1.0f-ty)*vy[j][i]; dy += AIR_VADV*(1.0f-tx)*(1.0f-ty)*vy[j][i];
dx += VADV*tx*(1.0f-ty)*vx[j][i+1]; dx += AIR_VADV*tx*(1.0f-ty)*vx[j][i+1];
dy += VADV*tx*(1.0f-ty)*vy[j][i+1]; dy += AIR_VADV*tx*(1.0f-ty)*vy[j][i+1];
dx += VADV*(1.0f-tx)*ty*vx[j+1][i]; dx += AIR_VADV*(1.0f-tx)*ty*vx[j+1][i];
dy += VADV*(1.0f-tx)*ty*vy[j+1][i]; dy += AIR_VADV*(1.0f-tx)*ty*vy[j+1][i];
dx += VADV*tx*ty*vx[j+1][i+1]; dx += AIR_VADV*tx*ty*vx[j+1][i+1];
dy += VADV*tx*ty*vy[j+1][i+1]; dy += AIR_VADV*tx*ty*vy[j+1][i+1];
} }
if (bmap[y][x] == WL_FAN) if (bmap[y][x] == WL_FAN)

View File

@ -1113,7 +1113,7 @@ int nearest_part(int ci, int t)
{ {
if (parts[i].type==t&&!parts[i].life&&i!=ci) if (parts[i].type==t&&!parts[i].life&&i!=ci)
{ {
ndistance = abs((cx-parts[i].x)+(cy-parts[i].y));// Faster but less accurate Older: sqrt(pow(cx-parts[i].x, 2)+pow(cy-parts[i].y, 2)); ndistance = abs(cx-parts[i].x)+abs(cy-parts[i].y);// Faster but less accurate Older: sqrt(pow(cx-parts[i].x, 2)+pow(cy-parts[i].y, 2));
if (ndistance<distance) if (ndistance<distance)
{ {
distance = ndistance; distance = ndistance;
@ -1290,9 +1290,9 @@ void update_particles_i(pixel *vid, int start, int inc)
} }
if (ISGOL==1&&++CGOL>=GSPEED)//GSPEED is frames per generation if (ISGOL==1&&++CGOL>=GSPEED)//GSPEED is frames per generation
{ {
int createdsomething = 0;
CGOL=0; CGOL=0;
ISGOL=0; ISGOL=0;
int createdsomething = 0;
for (nx=CELL; nx<XRES-CELL; nx++) for (nx=CELL; nx<XRES-CELL; nx++)
for (ny=CELL; ny<YRES-CELL; ny++) for (ny=CELL; ny<YRES-CELL; ny++)
{ {
@ -1553,7 +1553,7 @@ void update_particles_i(pixel *vid, int start, int inc)
else t = PT_DSTW; else t = PT_DSTW;
} }
else if (t==PT_LAVA) { else if (t==PT_LAVA) {
if (parts[i].ctype&&parts[i].ctype!=PT_LAVA) { if (parts[i].ctype && parts[i].ctype<PT_NUM && parts[i].ctype!=PT_LAVA) {
if (ptransitions[parts[i].ctype].tht==PT_LAVA&&pt>=ptransitions[parts[i].ctype].thv) s = 0; if (ptransitions[parts[i].ctype].tht==PT_LAVA&&pt>=ptransitions[parts[i].ctype].thv) s = 0;
else if (parts[i].ctype==PT_THRM&&pt>=ptransitions[PT_BMTL].thv) s = 0; else if (parts[i].ctype==PT_THRM&&pt>=ptransitions[PT_BMTL].thv) s = 0;
else if (pt>=973.0f) s = 0; // freezing point for lava with any other (not listed in ptransitions as turning into lava) ctype else if (pt>=973.0f) s = 0; // freezing point for lava with any other (not listed in ptransitions as turning into lava) ctype