diff options
-rw-r--r-- | src/base_station_base.h | 3 | ||||
-rw-r--r-- | src/station.cpp | 17 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/base_station_base.h b/src/base_station_base.h index 5718edc48..d6d97cc83 100644 --- a/src/base_station_base.h +++ b/src/base_station_base.h @@ -13,6 +13,7 @@ #define BASE_STATION_BASE_H #include "core/pool_type.hpp" +#include "command_type.h" #include "viewport_type.h" #include "station_map.h" @@ -39,7 +40,7 @@ struct StationRect : public Rect { void MakeEmpty(); bool PtInExtendedRect(int x, int y, int distance = 0) const; bool IsEmpty() const; - bool BeforeAddTile(TileIndex tile, StationRectMode mode); + CommandCost BeforeAddTile(TileIndex tile, StationRectMode mode); bool BeforeAddRect(TileIndex tile, int w, int h, StationRectMode mode); bool AfterRemoveTile(BaseStation *st, TileIndex tile); bool AfterRemoveRect(BaseStation *st, TileIndex tile, int w, int h); diff --git a/src/station.cpp b/src/station.cpp index ff4d82305..9ef44a280 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -366,7 +366,7 @@ bool StationRect::IsEmpty() const return this->left == 0 || this->left > this->right || this->top > this->bottom; } -bool StationRect::BeforeAddTile(TileIndex tile, StationRectMode mode) +CommandCost StationRect::BeforeAddTile(TileIndex tile, StationRectMode mode) { int x = TileX(tile); int y = TileY(tile); @@ -386,8 +386,7 @@ bool StationRect::BeforeAddTile(TileIndex tile, StationRectMode mode) int h = new_rect.bottom - new_rect.top + 1; if (mode != ADD_FORCE && (w > _settings_game.station.station_spread || h > _settings_game.station.station_spread)) { assert(mode != ADD_TRY); - _error_message = STR_ERROR_STATION_TOO_SPREAD_OUT; - return false; + return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT); } /* spread-out ok, return true */ @@ -398,13 +397,19 @@ bool StationRect::BeforeAddTile(TileIndex tile, StationRectMode mode) } else { ; // new point is inside the rect, we don't need to do anything } - return true; + return CommandCost(); } bool StationRect::BeforeAddRect(TileIndex tile, int w, int h, StationRectMode mode) { - return (mode == ADD_FORCE || (w <= _settings_game.station.station_spread && h <= _settings_game.station.station_spread)) && // important when the old rect is completely inside the new rect, resp. the old one was empty - this->BeforeAddTile(tile, mode) && this->BeforeAddTile(TILE_ADDXY(tile, w - 1, h - 1), mode); + if (mode == ADD_FORCE || (w <= _settings_game.station.station_spread && h <= _settings_game.station.station_spread)) { + /* Important when the old rect is completely inside the new rect, resp. the old one was empty. */ + CommandCost ret = this->BeforeAddTile(tile, mode); + if (ret.Succeeded()) ret = this->BeforeAddTile(TILE_ADDXY(tile, w - 1, h - 1), mode); + if (ret.Succeeded()) return true; + ret.SetGlobalErrorMessage(); + } + return false; } /** |