mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-03-09 15:41:15 +00:00
(svn r16972) -Fix [FS#3058] (r16942): mixup of variables caused, in some cases, rail stations to have incorrect width/height.
This commit is contained in:
parent
4ef012abfa
commit
39ac44ad49
@ -717,25 +717,25 @@ CommandCost CheckFlatLandBelow(TileIndex tile, uint w, uint h, DoCommandFlag fla
|
||||
/**
|
||||
* Check whether we can expand the rail part of the given station.
|
||||
* @param st the station to expand
|
||||
* @param cur_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
|
||||
* @return true if we are allowed to extend
|
||||
*/
|
||||
static bool CanExpandRailStation(const Station *st, TileArea &cur_ta, Axis axis)
|
||||
static bool CanExpandRailStation(const Station *st, TileArea &new_ta, Axis axis)
|
||||
{
|
||||
TileArea new_ta = cur_ta;
|
||||
TileArea cur_ta = st->train_station;
|
||||
|
||||
if (_settings_game.station.nonuniform_stations) {
|
||||
/* determine new size of train station region.. */
|
||||
int x = min(TileX(st->train_station.tile), TileX(cur_ta.tile));
|
||||
int y = min(TileY(st->train_station.tile), TileY(cur_ta.tile));
|
||||
new_ta.w = max(TileX(st->train_station.tile) + new_ta.w, TileX(cur_ta.tile) + cur_ta.w) - x;
|
||||
new_ta.h = max(TileY(st->train_station.tile) + new_ta.h, TileY(cur_ta.tile) + cur_ta.h) - y;
|
||||
int x = min(TileX(cur_ta.tile), TileX(new_ta.tile));
|
||||
int y = min(TileY(cur_ta.tile), TileY(new_ta.tile));
|
||||
new_ta.w = max(TileX(cur_ta.tile) + cur_ta.w, TileX(new_ta.tile) + new_ta.w) - x;
|
||||
new_ta.h = max(TileY(cur_ta.tile) + cur_ta.h, TileY(new_ta.tile) + new_ta.h) - y;
|
||||
new_ta.tile = TileXY(x, y);
|
||||
} else {
|
||||
/* do not allow modifying non-uniform stations,
|
||||
* the uniform-stations code wouldn't handle it well */
|
||||
TILE_LOOP(t, st->train_station.w, st->train_station.h, st->train_station.tile) {
|
||||
TILE_LOOP(t, cur_ta.w, cur_ta.h, cur_ta.tile) {
|
||||
if (!st->TileBelongsToRailStation(t)) { // there may be adjoined station
|
||||
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED;
|
||||
return false;
|
||||
@ -743,25 +743,25 @@ static bool CanExpandRailStation(const Station *st, TileArea &cur_ta, Axis axis)
|
||||
}
|
||||
|
||||
/* check so the orientation is the same */
|
||||
if (GetRailStationAxis(st->train_station.tile) != axis) {
|
||||
if (GetRailStationAxis(cur_ta.tile) != axis) {
|
||||
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* check if the new station adjoins the old station in either direction */
|
||||
if (new_ta.w == cur_ta.w && st->train_station.tile == cur_ta.tile + TileDiffXY(0, cur_ta.h)) {
|
||||
if (cur_ta.w == new_ta.w && cur_ta.tile == new_ta.tile + TileDiffXY(0, new_ta.h)) {
|
||||
/* above */
|
||||
new_ta.h += cur_ta.h;
|
||||
} else if (new_ta.w == cur_ta.w && st->train_station.tile == cur_ta.tile - TileDiffXY(0, new_ta.h)) {
|
||||
} else if (cur_ta.w == new_ta.w && cur_ta.tile == new_ta.tile - TileDiffXY(0, cur_ta.h)) {
|
||||
/* below */
|
||||
new_ta.tile -= TileDiffXY(0, new_ta.h);
|
||||
new_ta.h += cur_ta.h;
|
||||
} else if (new_ta.h == cur_ta.h && st->train_station.tile == cur_ta.tile + TileDiffXY(cur_ta.w, 0)) {
|
||||
new_ta.tile = cur_ta.tile;
|
||||
new_ta.h += new_ta.h;
|
||||
} else if (cur_ta.h == new_ta.h && cur_ta.tile == new_ta.tile + TileDiffXY(new_ta.w, 0)) {
|
||||
/* to the left */
|
||||
new_ta.w += cur_ta.w;
|
||||
} else if (new_ta.h == cur_ta.h && st->train_station.tile == cur_ta.tile - TileDiffXY(new_ta.w, 0)) {
|
||||
} else if (cur_ta.h == new_ta.h && cur_ta.tile == new_ta.tile - TileDiffXY(cur_ta.w, 0)) {
|
||||
/* to the right */
|
||||
new_ta.tile -= TileDiffXY(new_ta.w, 0);
|
||||
new_ta.tile = cur_ta.tile;
|
||||
new_ta.w += cur_ta.w;
|
||||
} else {
|
||||
_error_message = STR_NONUNIFORM_STATIONS_DISALLOWED;
|
||||
@ -774,8 +774,6 @@ static bool CanExpandRailStation(const Station *st, TileArea &cur_ta, Axis axis)
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Update the current values with the new. */
|
||||
cur_ta = new_ta;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user