Merge branch 'master' into jgrpp
# Conflicts: # config.lib # projects/openttd_vs140.vcxproj # projects/openttd_vs140.vcxproj.filters # projects/openttd_vs141.vcxproj # projects/openttd_vs141.vcxproj.filters # projects/openttd_vs142.vcxproj # projects/openttd_vs142.vcxproj.filters # src/aircraft_cmd.cpp # src/base_station_base.h # src/core/pool_type.hpp # src/disaster_vehicle.cpp # src/economy.cpp # src/engine.cpp # src/group.h # src/group_cmd.cpp # src/group_gui.cpp # src/lang/english.txt # src/lang/german.txt # src/linkgraph/linkgraph_gui.cpp # src/network/network_command.cpp # src/network/network_server.cpp # src/openttd.cpp # src/order_cmd.cpp # src/road_cmd.cpp # src/saveload/afterload.cpp # src/saveload/cargopacket_sl.cpp # src/saveload/linkgraph_sl.cpp # src/saveload/order_sl.cpp # src/saveload/station_sl.cpp # src/saveload/town_sl.cpp # src/saveload/vehicle_sl.cpp # src/screenshot.cpp # src/screenshot.h # src/settings_gui.cpp # src/settings_type.h # src/smallmap_gui.cpp # src/station.cpp # src/station_cmd.cpp # src/table/settings.ini # src/toolbar_gui.cpp # src/town_cmd.cpp # src/train.h # src/train_cmd.cpp # src/train_gui.cpp # src/vehicle.cpp # src/vehicle_base.h # src/vehiclelist.cpp # src/window_type.h
This commit is contained in:
@@ -2095,38 +2095,41 @@ static void SetDefaultRailGui()
|
||||
if (_local_company == COMPANY_SPECTATOR || !Company::IsValidID(_local_company)) return;
|
||||
|
||||
extern RailType _last_built_railtype;
|
||||
RailType rt = (RailType)(_settings_client.gui.default_rail_type + RAILTYPE_END);
|
||||
if (rt == DEF_RAILTYPE_MOST_USED) {
|
||||
/* Find the most used rail type */
|
||||
uint count[RAILTYPE_END];
|
||||
memset(count, 0, sizeof(count));
|
||||
for (TileIndex t = 0; t < MapSize(); t++) {
|
||||
if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || HasStationTileRail(t) ||
|
||||
(IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) {
|
||||
count[GetRailType(t)]++;
|
||||
RailType rt;
|
||||
switch (_settings_client.gui.default_rail_type) {
|
||||
case 2: {
|
||||
/* Find the most used rail type */
|
||||
uint count[RAILTYPE_END];
|
||||
memset(count, 0, sizeof(count));
|
||||
for (TileIndex t = 0; t < MapSize(); t++) {
|
||||
if (IsTileType(t, MP_RAILWAY) || IsLevelCrossingTile(t) || HasStationTileRail(t) ||
|
||||
(IsTileType(t, MP_TUNNELBRIDGE) && GetTunnelBridgeTransportType(t) == TRANSPORT_RAIL)) {
|
||||
count[GetRailType(t)]++;
|
||||
}
|
||||
}
|
||||
|
||||
rt = static_cast<RailType>(std::max_element(count + RAILTYPE_BEGIN, count + RAILTYPE_END) - count);
|
||||
if (count[rt] > 0) break;
|
||||
|
||||
/* No rail, just get the first available one */
|
||||
FALLTHROUGH;
|
||||
}
|
||||
|
||||
rt = RAILTYPE_RAIL;
|
||||
for (RailType r = RAILTYPE_ELECTRIC; r < RAILTYPE_END; r++) {
|
||||
if (count[r] >= count[rt]) rt = r;
|
||||
case 0: {
|
||||
/* Use first available type */
|
||||
std::vector<RailType>::const_iterator it = std::find_if(_sorted_railtypes.begin(), _sorted_railtypes.end(),
|
||||
[](RailType r){ return HasRailtypeAvail(_local_company, r); });
|
||||
rt = it != _sorted_railtypes.end() ? *it : RAILTYPE_BEGIN;
|
||||
break;
|
||||
}
|
||||
|
||||
/* No rail, just get the first available one */
|
||||
if (count[rt] == 0) rt = DEF_RAILTYPE_FIRST;
|
||||
}
|
||||
switch (rt) {
|
||||
case DEF_RAILTYPE_FIRST:
|
||||
rt = RAILTYPE_RAIL;
|
||||
while (rt < RAILTYPE_END && !HasRailtypeAvail(_local_company, rt)) rt++;
|
||||
case 1: {
|
||||
/* Use last available type */
|
||||
std::vector<RailType>::const_reverse_iterator it = std::find_if(_sorted_railtypes.rbegin(), _sorted_railtypes.rend(),
|
||||
[](RailType r){ return HasRailtypeAvail(_local_company, r); });
|
||||
rt = it != _sorted_railtypes.rend() ? *it : RAILTYPE_BEGIN;
|
||||
break;
|
||||
|
||||
case DEF_RAILTYPE_LAST:
|
||||
rt = GetBestRailtype(_local_company);
|
||||
break;
|
||||
|
||||
}
|
||||
default:
|
||||
break;
|
||||
NOT_REACHED();
|
||||
}
|
||||
|
||||
_last_built_railtype = _cur_railtype = rt;
|
||||
|
Reference in New Issue
Block a user