Permalink
Browse files

ensure air doesn't "leak" out of TTAN containers when loading stamps …

…and saves
  • Loading branch information...
jacob1 committed Aug 3, 2017
1 parent ac489c9 commit 99c568f1360a05f1c8440dc8400d2b13f4c1dfca
Showing with 28 additions and 1 deletion.
  1. +25 −0 src/simulation/Air.cpp
  2. +1 −0 src/simulation/Air.h
  3. +2 −1 src/simulation/Simulation.cpp
@@ -352,6 +352,31 @@ void Air::Invert()
}
}
// called when loading saves / stamps to ensure nothing "leaks" the first frame
void Air::RecalculateBlockAirMaps()
{
for (int i = 0; i <= sim.parts_lastActiveIndex; i++)
{
int type = sim.parts[i].type;
// Real TTAN would only block if there was enough TTAN
// but it would be more expensive and complicated to actually check that
// so just block for a frame, if it wasn't supposed to block it will continue allowing air next frame
if (type == PT_TTAN)
{
int x = ((int)(sim.parts[i].x+0.5f))/CELL, y = ((int)(sim.parts[i].y+0.5f))/CELL;
bmap_blockair[y][x] = 1;
bmap_blockairh[y][x] = 0x8;
}
// mostly accurate insulator blocking, besides checking GEL
else if ((type == PT_HSWC && sim.parts[i].life != 10) || sim.elements[type].HeatConduct <= (rand()%250))
{
int x = ((int)(sim.parts[i].x+0.5f))/CELL, y = ((int)(sim.parts[i].y+0.5f))/CELL;
if (!(bmap_blockairh[y][x]&0x8))
bmap_blockairh[y][x]++;
}
}
}
Air::Air(Simulation & simulation):
sim(simulation),
airMode(0),
@@ -33,6 +33,7 @@ class Air
void Clear();
void ClearAirH();
void Invert();
void RecalculateBlockAirMaps();
Air(Simulation & sim);
};
@@ -216,6 +216,7 @@ int Simulation::Load(int fullX, int fullY, GameSave * save)
}
gravWallChanged = true;
air->RecalculateBlockAirMaps();
return 0;
}
@@ -533,7 +534,7 @@ SimulationSample Simulation::GetSample(int x, int y)
{
sample.WallType = bmap[y/CELL][x/CELL];
}
sample.AirPressure = pv[y/CELL][x/CELL];
sample.AirPressure = (int)air->bmap_blockair[y/CELL][x/CELL];
sample.AirTemperature = hv[y/CELL][x/CELL];
sample.AirVelocityX = vx[y/CELL][x/CELL];
sample.AirVelocityY = vy[y/CELL][x/CELL];

0 comments on commit 99c568f

Please sign in to comment.