mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-07-08 13:29:42 +01:00
Fix: Missing water region invalidation after flooding a half tile with rail in the highest corner
Invalidate water region when any flood occurs. Convert a few magic numbers to their names.
This commit is contained in:
parent
097937ecdf
commit
610026ef17
@ -773,13 +773,13 @@ bool FloodHalftile(TileIndex t)
|
|||||||
TrackBits lower_track = CornerToTrackBits(OppositeCorner(GetHighestSlopeCorner(tileh)));
|
TrackBits lower_track = CornerToTrackBits(OppositeCorner(GetHighestSlopeCorner(tileh)));
|
||||||
|
|
||||||
TrackBits to_remove = lower_track & rail_bits;
|
TrackBits to_remove = lower_track & rail_bits;
|
||||||
if (to_remove != 0) {
|
if (to_remove != TRACK_BIT_NONE) {
|
||||||
Backup<CompanyID> cur_company(_current_company, OWNER_WATER);
|
Backup<CompanyID> cur_company(_current_company, OWNER_WATER);
|
||||||
flooded = Command<CMD_REMOVE_SINGLE_RAIL>::Do(DC_EXEC, t, FindFirstTrack(to_remove)).Succeeded();
|
flooded = Command<CMD_REMOVE_SINGLE_RAIL>::Do(DC_EXEC, t, FindFirstTrack(to_remove)).Succeeded();
|
||||||
cur_company.Restore();
|
cur_company.Restore();
|
||||||
if (!flooded) return flooded; // not yet floodable
|
if (!flooded) return flooded; // not yet floodable
|
||||||
rail_bits = rail_bits & ~to_remove;
|
rail_bits = rail_bits & ~to_remove;
|
||||||
if (rail_bits == 0) {
|
if (rail_bits == TRACK_BIT_NONE) {
|
||||||
MakeShore(t);
|
MakeShore(t);
|
||||||
MarkTileDirtyByTile(t);
|
MarkTileDirtyByTile(t);
|
||||||
return flooded;
|
return flooded;
|
||||||
|
@ -1187,6 +1187,7 @@ static void DoFloodTile(TileIndex target)
|
|||||||
UpdateSignalsInBuffer();
|
UpdateSignalsInBuffer();
|
||||||
|
|
||||||
if (IsPossibleDockingTile(target)) CheckForDockingTile(target);
|
if (IsPossibleDockingTile(target)) CheckForDockingTile(target);
|
||||||
|
InvalidateWaterRegion(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
cur_company.Restore();
|
cur_company.Restore();
|
||||||
|
Loading…
Reference in New Issue
Block a user