# HG changeset patch # User smatz # Date 2007-12-08 21:57:24 # Node ID fb0f34142941a24eea6ec23f06f5b753cd94b49c # Parent 83739684a751e1935d218875ecc659a2ce36dd27 (svn r11604) -Fix: canal tiles were not marked dirty when surrounding tile got flooded, causing glitches diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -589,6 +589,16 @@ static void AnimateTile_Water(TileIndex } /** + * Marks tile dirty if it is a canal tile. + * Called to avoid glitches when flooding tiles next to canal tile. + * + * @param tile tile to check + */ +static inline void MarkTileDirtyIfCanal(TileIndex tile) { + if (IsTileType(tile, MP_WATER) && IsCanal(tile)) MarkTileDirtyByTile(tile); +} + +/** * Floods neighboured floodable tiles * * @param tile The water source tile that causes the flooding. @@ -650,6 +660,11 @@ static void TileLoopWaterHelper(TileInde if (CmdSucceeded(DoCommand(target, 0, 0, DC_EXEC, CMD_LANDSCAPE_CLEAR))) { MakeWater(target); MarkTileDirtyByTile(target); + /* Mark surrounding canal tiles dirty too to avoid glitches */ + MarkTileDirtyIfCanal(target + TileDiffXY(0, 1)); + MarkTileDirtyIfCanal(target + TileDiffXY(1, 0)); + MarkTileDirtyIfCanal(target + TileDiffXY(0, -1)); + MarkTileDirtyIfCanal(target + TileDiffXY(-1, 0)); } } }