From b4a423b78378547b24915018f52c973bba270070 Mon Sep 17 00:00:00 2001 From: Nick Gasson Date: Sun, 5 Sep 2010 10:55:32 +0100 Subject: [PATCH] Delete scenery that covers multiple tiles --- src/Map.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/Map.cpp b/src/Map.cpp index e4b9885..b481a91 100644 --- a/src/Map.cpp +++ b/src/Map.cpp @@ -290,17 +290,30 @@ void Map::erase_tile(int x, int y) tile.track->get()->get_covers(covers); for (vector >::iterator it = covers.begin(); - it != covers.end(); ++it) + it != covers.end(); ++it) { tile_at((*it).x, (*it).y).track.reset(); + dirty_tile(x, y); + } } - if (tile.scenery) - tile.scenery.reset(); + if (tile.scenery) { + // Like track, scenery may cover multiple tiles - if (tile.station) - tile.station.reset(); + const Point size = tile.scenery->get()->size(); + const Point& where = tile.scenery->origin(); + + for (int x = 0; x < size.x; x++) { + for (int y = 0; y < size.y; y++) { + tile_at(where.x + x, where.y + y).scenery.reset(); + dirty_tile(where.x + x, where.y + y); + } + } + } - dirty_tile(x, y); + if (tile.station) { + tile.station.reset(); + dirty_tile(x, y); + } } bool Map::empty_tile(Point point) const -- 2.39.2