From f1cda6a692e4c277e11a7f60fdb8cf28930642e5 Mon Sep 17 00:00:00 2001 From: Ihar Hubchyk Date: Sat, 18 May 2024 11:03:28 +0800 Subject: [PATCH] Show a warning message that stream and road cannot be placed on water relates to #6845 --- src/fheroes2/editor/editor_interface.cpp | 14 ++++++++++++++ src/fheroes2/maps/maps_tiles_helper.cpp | 4 ++-- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/src/fheroes2/editor/editor_interface.cpp b/src/fheroes2/editor/editor_interface.cpp index 7a55077af20..1e8899dd62b 100644 --- a/src/fheroes2/editor/editor_interface.cpp +++ b/src/fheroes2/editor/editor_interface.cpp @@ -1240,6 +1240,13 @@ namespace Interface Maps::readMapInEditor( _mapFormat ); } else if ( _editorPanel.isRoadDraw() ) { + if ( tile.isWater() ) { + std::string msg = _( "%{objects} cannot be placed on water." ); + StringReplace( msg, "%{objects}", _( "Road" ) ); + _warningMessage.reset( std::move( msg ) ); + return; + } + fheroes2::ActionCreator action( _historyManager, _mapFormat ); if ( Maps::updateRoadOnTile( tile, true ) ) { @@ -1249,6 +1256,13 @@ namespace Interface } } else if ( _editorPanel.isStreamDraw() ) { + if ( tile.isWater() ) { + std::string msg = _( "%{objects} cannot be placed on water." ); + StringReplace( msg, "%{objects}", _( "Stream" ) ); + _warningMessage.reset( std::move( msg ) ); + return; + } + fheroes2::ActionCreator action( _historyManager, _mapFormat ); if ( Maps::updateStreamOnTile( tile, true ) ) { diff --git a/src/fheroes2/maps/maps_tiles_helper.cpp b/src/fheroes2/maps/maps_tiles_helper.cpp index 71451ecb4a5..2f51600d3bb 100644 --- a/src/fheroes2/maps/maps_tiles_helper.cpp +++ b/src/fheroes2/maps/maps_tiles_helper.cpp @@ -1315,7 +1315,7 @@ namespace Maps bool updateRoadOnTile( Tiles & tile, const bool setRoad ) { - if ( setRoad == tile.isRoad() || ( tile.GetGround() == Ground::WATER && setRoad ) ) { + if ( setRoad == tile.isRoad() || ( tile.isWater() && setRoad ) ) { // We cannot place roads on the water or above already placed roads. return false; } @@ -1351,7 +1351,7 @@ namespace Maps bool updateStreamOnTile( Tiles & tile, const bool setStream ) { - if ( setStream == tile.isStream() || ( tile.GetGround() == Ground::WATER && setStream ) ) { + if ( setStream == tile.isStream() || ( tile.isWater() && setStream ) ) { // We cannot place streams on the water or on already placed streams. return false; }