Fix building objects, trees and buoys on water/shore not clearing neighbour flooding states

pull/251/head
Jonathan G Rennison 3 years ago
parent 0422e2fe1e
commit 1a29a1ee74

@ -115,6 +115,7 @@ void BuildObject(ObjectType type, TileIndex tile, CompanyID owner, Town *town, u
assert(o->town != nullptr);
TILE_AREA_LOOP(t, ta) {
if (IsWaterTile(t)) ClearNeighbourNonFloodingStates(t);
WaterClass wc = (IsWaterTile(t) ? GetWaterClass(t) : WATER_CLASS_INVALID);
/* Update company infrastructure counts for objects build on canals owned by nobody. */
if (wc == WATER_CLASS_CANAL && owner != OWNER_NONE && (IsTileOwner(tile, OWNER_NONE) || IsTileOwner(tile, OWNER_WATER))) {

@ -99,6 +99,7 @@ static void PlantTreesOnTile(TileIndex tile, TreeType treetype, uint count, uint
switch (GetTileType(tile)) {
case MP_WATER:
ground = TREE_GROUND_SHORE;
ClearNeighbourNonFloodingStates(tile);
break;
case MP_CLEAR:

@ -24,6 +24,7 @@ enum FloodingBehaviour {
};
FloodingBehaviour GetFloodingBehaviour(TileIndex tile);
void ClearNeighbourNonFloodingStates(TileIndex tile);
void TileLoop_Water(TileIndex tile);
bool FloodHalftile(TileIndex t);

@ -88,7 +88,7 @@ static void MarkCanalsAndRiversAroundDirty(TileIndex tile)
}
}
static void ClearNeighbourNonFloodingStates(TileIndex tile)
void ClearNeighbourNonFloodingStates(TileIndex tile)
{
for (Direction dir = DIR_BEGIN; dir < DIR_END; dir++) {
TileIndex dest = tile + TileOffsByDir(dir);

@ -346,6 +346,7 @@ CommandCost CmdBuildBuoy(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
MakeBuoy(tile, wp->index, GetWaterClass(tile));
CheckForDockingTile(tile);
MarkTileDirtyByTile(tile);
ClearNeighbourNonFloodingStates(tile);
wp->UpdateVirtCoord();
InvalidateWindowData(WC_WAYPOINT_VIEW, wp->index);

Loading…
Cancel
Save