mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r7951) -Backport from trunk (r7810, r7812):
- Building airport whose size exceeds max station spread-out caused assert. (r7810) - rail station build window was not correctly updated after station_spread change (r7812)
This commit is contained in:
parent
1277599c30
commit
0a211097ac
26
rail_gui.c
26
rail_gui.c
|
@ -694,6 +694,7 @@ static void StationBuildWndProc(Window *w, WindowEvent *e)
|
|||
bool newstations = _railstation.newstations;
|
||||
int y_offset;
|
||||
DrawPixelInfo tmp_dpi, *old_dpi;
|
||||
const StationSpec *statspec = newstations ? GetCustomStationSpec(_railstation.station_class, _railstation.station_type) : NULL;
|
||||
|
||||
if (WP(w,def_d).close) return;
|
||||
|
||||
|
@ -712,23 +713,14 @@ static void StationBuildWndProc(Window *w, WindowEvent *e)
|
|||
if (_station_show_coverage)
|
||||
SetTileSelectBigSize(-rad, -rad, 2 * rad, 2 * rad);
|
||||
|
||||
/* Update buttons for correct spread value */
|
||||
for (bits = _patches.station_spread; bits < 7; bits++) {
|
||||
DisableWindowWidget(w, bits + 5);
|
||||
DisableWindowWidget(w, bits + 12);
|
||||
}
|
||||
|
||||
if (newstations) {
|
||||
const StationSpec *statspec = GetCustomStationSpec(_railstation.station_class, _railstation.station_type);
|
||||
|
||||
for (bits = 0; bits < 7; bits++) {
|
||||
if (statspec == NULL) {
|
||||
EnableWindowWidget(w, bits + 5);
|
||||
EnableWindowWidget(w, bits + 12);
|
||||
} else {
|
||||
SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits));
|
||||
SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits));
|
||||
}
|
||||
for (bits = 0; bits < 7; bits++) {
|
||||
bool disable = bits >= _patches.station_spread;
|
||||
if (statspec == NULL) {
|
||||
SetWindowWidgetDisabledState(w, bits + 5, disable);
|
||||
SetWindowWidgetDisabledState(w, bits + 12, disable);
|
||||
} else {
|
||||
SetWindowWidgetDisabledState(w, bits + 5, HASBIT(statspec->disallowed_platforms, bits) || disable);
|
||||
SetWindowWidgetDisabledState(w, bits + 12, HASBIT(statspec->disallowed_lengths, bits) || disable);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1700,6 +1700,11 @@ int32 CmdBuildAirport(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
|||
if (st != NULL && st->facilities) st = NULL;
|
||||
}
|
||||
|
||||
if (w > _patches.station_spread || h > _patches.station_spread) {
|
||||
_error_message = STR_306C_STATION_TOO_SPREAD_OUT;
|
||||
return CMD_ERROR;
|
||||
}
|
||||
|
||||
if (st != NULL) {
|
||||
if (st->owner != OWNER_NONE && st->owner != _current_player)
|
||||
return_cmd_error(STR_3009_TOO_CLOSE_TO_ANOTHER_STATION);
|
||||
|
|
Loading…
Reference in New Issue