From be505ec459c5b443552095d76608f37b82904349 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Wed, 14 Aug 2024 08:57:15 +0100 Subject: [PATCH] Add: Accessor to test if a tile may be animated. --- src/landscape.cpp | 2 +- src/saveload/afterload.cpp | 2 +- src/tile_cmd.h | 10 ++++++++++ 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/landscape.cpp b/src/landscape.cpp index 66422db748..7e416546a9 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -530,7 +530,7 @@ void DrawFoundation(TileInfo *ti, Foundation f) void DoClearSquare(TileIndex tile) { /* If the tile can have animation and we clear it, delete it from the animated tile list. */ - if (_tile_type_procs[GetTileType(tile)]->animate_tile_proc != nullptr) DeleteAnimatedTile(tile); + if (MayAnimateTile(tile)) DeleteAnimatedTile(tile); bool remove = IsDockingTile(tile); MakeClear(tile, CLEAR_GRASS, _generating_world ? 3 : 0); diff --git a/src/saveload/afterload.cpp b/src/saveload/afterload.cpp index 5df9556bba..7c04967754 100644 --- a/src/saveload/afterload.cpp +++ b/src/saveload/afterload.cpp @@ -2203,7 +2203,7 @@ bool AfterLoadGame() for (auto tile = _animated_tiles.begin(); tile < _animated_tiles.end(); /* Nothing */) { /* Remove if tile is not animated */ - bool remove = _tile_type_procs[GetTileType(*tile)]->animate_tile_proc == nullptr; + bool remove = !MayAnimateTile(*tile); /* and remove if duplicate */ for (auto j = _animated_tiles.begin(); !remove && j < tile; j++) { diff --git a/src/tile_cmd.h b/src/tile_cmd.h index 88f36fef86..c5f9ebdcbf 100644 --- a/src/tile_cmd.h +++ b/src/tile_cmd.h @@ -194,6 +194,16 @@ inline void AddProducedCargo(TileIndex tile, CargoArray &produced) proc(tile, produced); } +/** + * Test if a tile may be animated. + * @param tile Tile to test. + * @returns True iff the type of the tile has a handler for tile animation. + */ +inline bool MayAnimateTile(TileIndex tile) +{ + return _tile_type_procs[GetTileType(tile)]->animate_tile_proc != nullptr; +} + inline void AnimateTile(TileIndex tile) { AnimateTileProc *proc = _tile_type_procs[GetTileType(tile)]->animate_tile_proc;