(svn r19275) -Codechange: CanExpandRailStation() returns a CommandCost.

This commit is contained in:
alberth 2010-02-27 14:17:33 +00:00
parent fee81aedcb
commit b8f811c7ff
2 changed files with 17 additions and 17 deletions

View File

@ -891,9 +891,9 @@ static CommandCost CheckFlatLandRoadStop(TileArea tile_area, DoCommandFlag flags
* @param st the station to expand * @param st the station to expand
* @param new_ta the current (and if all is fine new) tile area of the rail part of the station * @param new_ta the current (and if all is fine new) tile area of the rail part of the station
* @param axis the axis of the newly build rail * @param axis the axis of the newly build rail
* @return true if we are allowed to extend * @return Succeeded or failed command.
*/ */
bool CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis) CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis)
{ {
TileArea cur_ta = st->train_station; TileArea cur_ta = st->train_station;
@ -909,15 +909,13 @@ bool CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis)
* the uniform-stations code wouldn't handle it well */ * the uniform-stations code wouldn't handle it well */
TILE_LOOP(t, cur_ta.w, cur_ta.h, cur_ta.tile) { TILE_LOOP(t, cur_ta.w, cur_ta.h, cur_ta.tile) {
if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station
_error_message = STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED; return_cmd_error(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED);
return false;
} }
} }
/* check so the orientation is the same */ /* check so the orientation is the same */
if (GetRailStationAxis(cur_ta.tile) != axis) { if (GetRailStationAxis(cur_ta.tile) != axis) {
_error_message = STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED; return_cmd_error(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED);
return false;
} }
/* check if the new station adjoins the old station in either direction */ /* check if the new station adjoins the old station in either direction */
@ -936,17 +934,15 @@ bool CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis)
new_ta.tile = cur_ta.tile; new_ta.tile = cur_ta.tile;
new_ta.w += cur_ta.w; new_ta.w += cur_ta.w;
} else { } else {
_error_message = STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED; return_cmd_error(STR_ERROR_NONUNIFORM_STATIONS_DISALLOWED);
return false;
} }
} }
/* make sure the final size is not too big. */ /* make sure the final size is not too big. */
if (new_ta.w > _settings_game.station.station_spread || new_ta.h > _settings_game.station.station_spread) { if (new_ta.w > _settings_game.station.station_spread || new_ta.h > _settings_game.station.station_spread) {
_error_message = STR_ERROR_STATION_TOO_SPREAD_OUT; return_cmd_error(STR_ERROR_STATION_TOO_SPREAD_OUT);
return false;
} }
return true; return CommandCost();
} }
static inline byte *CreateSingle(byte *layout, int n) static inline byte *CreateSingle(byte *layout, int n)
@ -1150,10 +1146,11 @@ CommandCost CmdBuildRailStation(TileIndex tile_org, DoCommandFlag flags, uint32
if (st->train_station.tile != INVALID_TILE) { if (st->train_station.tile != INVALID_TILE) {
/* check if we want to expanding an already existing station? */ /* check if we want to expanding an already existing station? */
if (!_settings_game.station.join_stations) if (!_settings_game.station.join_stations) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_RAILROAD);
return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_RAILROAD);
if (!CanExpandRailStation(st, new_location, axis)) CommandCost ret = CanExpandRailStation(st, new_location, axis);
return CMD_ERROR; ret.SetGlobalErrorMessage();
if (ret.Failed()) return ret;
} }
/* XXX can't we pack this in the "else" part of the if above? */ /* XXX can't we pack this in the "else" part of the if above? */

View File

@ -194,7 +194,7 @@ static CommandCost IsValidTileForWaypoint(TileIndex tile, Axis axis, StationID *
extern void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec); extern void GetStationLayout(byte *layout, int numtracks, int plat_len, const StationSpec *statspec);
extern CommandCost FindJoiningWaypoint(StationID existing_station, StationID station_to_join, bool adjacent, TileArea ta, Waypoint **wp); extern CommandCost FindJoiningWaypoint(StationID existing_station, StationID station_to_join, bool adjacent, TileArea ta, Waypoint **wp);
extern bool CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis); extern CommandCost CanExpandRailStation(const BaseStation *st, TileArea &new_ta, Axis axis);
/** Convert existing rail to waypoint. Eg build a waypoint station over /** Convert existing rail to waypoint. Eg build a waypoint station over
* piece of rail * piece of rail
@ -265,7 +265,10 @@ CommandCost CmdBuildRailWaypoint(TileIndex start_tile, DoCommandFlag flags, uint
if (wp->owner != _current_company) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT); if (wp->owner != _current_company) return_cmd_error(STR_ERROR_TOO_CLOSE_TO_ANOTHER_WAYPOINT);
/* check if we want to expand an already existing waypoint? */ /* check if we want to expand an already existing waypoint? */
if (wp->train_station.tile != INVALID_TILE && !CanExpandRailStation(wp, new_location, axis)) return CMD_ERROR; if (wp->train_station.tile != INVALID_TILE) {
CommandCost ret = CanExpandRailStation(wp, new_location, axis);
if (ret.Failed()) return ret;
}
if (!wp->rect.BeforeAddRect(start_tile, width, height, StationRect::ADD_TEST)) return CMD_ERROR; if (!wp->rect.BeforeAddRect(start_tile, width, height, StationRect::ADD_TEST)) return CMD_ERROR;
} else { } else {