summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/base_station_base.h3
-rw-r--r--src/station.cpp17
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;
}
/**