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:
parent
c78d4203ee
commit
77bcac1a56
@ -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
|
||||||
|
32
src/air.c
32
src/air.c
@ -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)
|
||||||
|
@ -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
|
||||||
|
Reference in New Issue
Block a user