mirror of
https://github.com/The-Powder-Toy/The-Powder-Toy.git
synced 2025-08-29 19:00:33 +02:00
Fix pmap usage in Simulation::flood_water
flood_water would occasionally corrupt pmap by moving the pmap entry at i's location even if the entry itself didn't refer to i. pmap updates are tricky, they are best handled by Simulation::move.
This commit is contained in:
@@ -736,7 +736,7 @@ int Simulation::FloodINST(int x, int y)
|
||||
|
||||
bool Simulation::flood_water(int x, int y, int i)
|
||||
{
|
||||
int x1, x2, originalY = y;
|
||||
int x1, x2, originalX = x, originalY = y;
|
||||
int r = pmap[y][x];
|
||||
if (!r)
|
||||
return false;
|
||||
@@ -780,12 +780,7 @@ bool Simulation::flood_water(int x, int y, int i)
|
||||
else if (!eval_move(parts[i].type, x, y - 1, nullptr))
|
||||
continue;
|
||||
|
||||
int oldx = (int)(parts[i].x + 0.5f);
|
||||
int oldy = (int)(parts[i].y + 0.5f);
|
||||
pmap[y - 1][x] = pmap[oldy][oldx];
|
||||
pmap[oldy][oldx] = 0;
|
||||
parts[i].x = float(x);
|
||||
parts[i].y = float(y - 1);
|
||||
move(i, originalX, originalY, x, y - 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user