Fix "far away" air heat and velocity code working correctly only in one direction.

This commit is contained in:
Saveliy Skresanov 2025-01-23 00:50:02 +07:00
parent c32166efdc
commit 2e27cbfddf
2 changed files with 5 additions and 6 deletions

View File

@ -92,7 +92,7 @@ void Air::update_airh(void)
// The code is almost identical to the "far away" velocity code from update_air
auto tx = x - dx*advDistanceMult;
auto ty = y - dy*advDistanceMult;
if ((dx*advDistanceMult>1.0f || dy*advDistanceMult>1.0f) && (tx>=2 && tx<XCELLS-2 && ty>=2 && ty<YCELLS-2))
if ((std::abs(dx*advDistanceMult)>1.0f || std::abs(dy*advDistanceMult)>1.0f) && (tx>=2 && tx<XCELLS-2 && ty>=2 && ty<YCELLS-2))
{
float stepX, stepY;
int stepLimit;
@ -290,7 +290,7 @@ void Air::update_air(void)
auto tx = x - dx*advDistanceMult;
auto ty = y - dy*advDistanceMult;
if ((dx*advDistanceMult>1.0f || dy*advDistanceMult>1.0f) && (tx>=2 && tx<XCELLS-2 && ty>=2 && ty<YCELLS-2))
if ((std::abs(dx*advDistanceMult)>1.0f || std::abs(dy*advDistanceMult)>1.0f) && (tx>=2 && tx<XCELLS-2 && ty>=2 && ty<YCELLS-2))
{
// Trying to take velocity from far away, check whether there is an intervening wall.
// Step from current position to desired source location, looking for walls, with either the x or y step size being 1 cell

View File

@ -3621,15 +3621,14 @@ void Simulation::BeforeSim()
if (!sys_pause || framerender)
{
// decrease wall conduction, make walls block air and ambient heat
int x, y;
for (y = 0; y < YCELLS; y++)
for (int y = 0; y < YCELLS; y++)
{
for (x = 0; x < XCELLS; x++)
for (int x = 0; x < XCELLS; x++)
{
if (emap[y][x])
emap[y][x] --;
air->bmap_blockair[y][x] = (bmap[y][x]==WL_WALL || bmap[y][x]==WL_WALLELEC || bmap[y][x]==WL_BLOCKAIR || (bmap[y][x]==WL_EWALL && !emap[y][x]));
air->bmap_blockairh[y][x] = (bmap[y][x]==WL_WALL || bmap[y][x]==WL_WALLELEC || bmap[y][x]==WL_BLOCKAIR || bmap[y][x]==WL_GRAV || (bmap[y][x]==WL_EWALL && !emap[y][x])) ? 0x8:0;
air->bmap_blockairh[y][x] = (air->bmap_blockair[y][x] || bmap[y][x]==WL_GRAV) ? 0x8 : 0;
}
}