From 5cd0013e5c1ccb2f8e3d61b4247d90218ee612ea Mon Sep 17 00:00:00 2001 From: smatz Date: Sat, 8 Dec 2007 21:57:24 +0000 Subject: (svn r11604) -Fix: canal tiles were not marked dirty when surrounding tile got flooded, causing glitches --- src/water_cmd.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/water_cmd.cpp b/src/water_cmd.cpp index e6d1904bb..5529b8a3c 100644 --- a/src/water_cmd.cpp +++ b/src/water_cmd.cpp @@ -588,6 +588,16 @@ static void AnimateTile_Water(TileIndex tile) /* not used */ } +/** + * 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 * @@ -650,6 +660,11 @@ static void TileLoopWaterHelper(TileIndex tile, const TileIndexDiffC *offs) 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)); } } } -- cgit v1.2.3-54-g00ecf