Add setting for default road/tram types, to match default rail type setting
This commit is contained in:
@@ -1576,9 +1576,12 @@ STR_CONFIG_SETTING_QUICKGOTO :Quick creation
|
|||||||
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-select the 'goto cursor' when opening the orders window
|
STR_CONFIG_SETTING_QUICKGOTO_HELPTEXT :Pre-select the 'goto cursor' when opening the orders window
|
||||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Default rail type (after new game/game load): {STRING2}
|
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE :Default rail type (after new game/game load): {STRING2}
|
||||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Rail type to select after starting or loading a game. 'first available' selects the oldest type of tracks, 'last available' selects the newest type of tracks, and 'most used' selects the type which is currently most in use
|
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT :Rail type to select after starting or loading a game. 'first available' selects the oldest type of tracks, 'last available' selects the newest type of tracks, and 'most used' selects the type which is currently most in use
|
||||||
|
STR_CONFIG_SETTING_DEFAULT_ROAD_TYPE :Default road/tram types (after new game/game load): {STRING2}
|
||||||
|
STR_CONFIG_SETTING_DEFAULT_ROAD_TYPE_HELPTEXT :Road/tram types to select after starting or loading a game. 'first available' selects the oldest type of road/tram, 'last available' selects the newest type of road/tram, 'most used' selects the type which is currently most in use, and 'default' selects the default type
|
||||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :First available
|
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST :First available
|
||||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Last available
|
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_LAST :Last available
|
||||||
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Most used
|
STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_MOST_USED :Most used
|
||||||
|
STR_CONFIG_SETTING_DEFAULT_ROAD_TYPE_DEFAULT :Default
|
||||||
|
|
||||||
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Show path reservations for tracks: {STRING2}
|
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION :Show path reservations for tracks: {STRING2}
|
||||||
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Give reserved tracks a different colour to assist in problems with trains refusing to enter path-based blocks
|
STR_CONFIG_SETTING_SHOW_TRACK_RESERVATION_HELPTEXT :Give reserved tracks a different colour to assist in problems with trains refusing to enter path-based blocks
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
#include "strings_func.h"
|
#include "strings_func.h"
|
||||||
#include "core/geometry_func.hpp"
|
#include "core/geometry_func.hpp"
|
||||||
#include "date_func.h"
|
#include "date_func.h"
|
||||||
|
#include "station_map.h"
|
||||||
|
|
||||||
#include "widgets/road_widget.h"
|
#include "widgets/road_widget.h"
|
||||||
|
|
||||||
@@ -1258,11 +1259,87 @@ void InitializeRoadGui()
|
|||||||
_road_station_picker_orientation = DIAGDIR_NW;
|
_road_station_picker_orientation = DIAGDIR_NW;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Set the initial (default) road and tram types to use */
|
||||||
|
static void SetDefaultRoadGui()
|
||||||
|
{
|
||||||
|
extern RoadType _last_built_roadtype;
|
||||||
|
extern RoadType _last_built_tramtype;
|
||||||
|
|
||||||
|
/* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
|
||||||
|
_last_built_roadtype = ROADTYPE_ROAD;
|
||||||
|
_last_built_tramtype = ROADTYPE_TRAM;
|
||||||
|
|
||||||
|
if (_local_company == COMPANY_SPECTATOR || !Company::IsValidID(_local_company)) return;
|
||||||
|
|
||||||
|
auto get_first_road_type = [](RoadTramType rtt, RoadType &out) {
|
||||||
|
auto it = std::find_if(_sorted_roadtypes.begin(), _sorted_roadtypes.end(),
|
||||||
|
[&](RoadType r){ return GetRoadTramType(r) == rtt && HasRoadTypeAvail(_local_company, r); });
|
||||||
|
if (it != _sorted_roadtypes.end()) out = *it;
|
||||||
|
};
|
||||||
|
auto get_last_road_type = [](RoadTramType rtt, RoadType &out) {
|
||||||
|
auto it = std::find_if(_sorted_roadtypes.rbegin(), _sorted_roadtypes.rend(),
|
||||||
|
[&](RoadType r){ return GetRoadTramType(r) == rtt && HasRoadTypeAvail(_local_company, r); });
|
||||||
|
if (it != _sorted_roadtypes.rend()) out = *it;
|
||||||
|
};
|
||||||
|
|
||||||
|
switch (_settings_client.gui.default_road_type) {
|
||||||
|
case 3: {
|
||||||
|
/* Use defaults above */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
/* Find the most used types */
|
||||||
|
std::array<uint, ROADTYPE_END> road_count = {};
|
||||||
|
std::array<uint, ROADTYPE_END> tram_count = {};
|
||||||
|
for (TileIndex t = 0; t < MapSize(); t++) {
|
||||||
|
if (MayHaveRoad(t)) {
|
||||||
|
if (IsTileType(t, MP_STATION) && !IsRoadStop(t)) continue;
|
||||||
|
RoadType road_type = GetRoadTypeRoad(t);
|
||||||
|
if (road_type != INVALID_ROADTYPE) road_count[road_type]++;
|
||||||
|
RoadType tram_type = GetRoadTypeTram(t);
|
||||||
|
if (tram_type != INVALID_ROADTYPE) tram_count[tram_type]++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto get_best_road_type = [&](RoadTramType rtt, RoadType &out, const std::array<uint, ROADTYPE_END> &count) {
|
||||||
|
uint highest = 0;
|
||||||
|
for (RoadType rt = ROADTYPE_BEGIN; rt != ROADTYPE_END; rt++) {
|
||||||
|
if (count[rt] > highest && HasRoadTypeAvail(_local_company, rt)) {
|
||||||
|
out = rt;
|
||||||
|
highest = count[rt];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (highest == 0) get_first_road_type(rtt, out);
|
||||||
|
};
|
||||||
|
get_best_road_type(RTT_ROAD, _last_built_roadtype, road_count);
|
||||||
|
get_best_road_type(RTT_TRAM, _last_built_tramtype, tram_count);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 0: {
|
||||||
|
/* Use first available types */
|
||||||
|
get_first_road_type(RTT_ROAD, _last_built_roadtype);
|
||||||
|
get_first_road_type(RTT_TRAM, _last_built_tramtype);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1: {
|
||||||
|
/* Use last available type */
|
||||||
|
get_last_road_type(RTT_ROAD, _last_built_roadtype);
|
||||||
|
get_last_road_type(RTT_TRAM, _last_built_tramtype);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
NOT_REACHED();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* I really don't know why rail_gui.cpp has this too, shouldn't be included in the other one?
|
* I really don't know why rail_gui.cpp has this too, shouldn't be included in the other one?
|
||||||
*/
|
*/
|
||||||
void InitializeRoadGUI()
|
void InitializeRoadGUI()
|
||||||
{
|
{
|
||||||
|
SetDefaultRoadGui();
|
||||||
|
|
||||||
BuildRoadToolbarWindow *w = dynamic_cast<BuildRoadToolbarWindow *>(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_ROAD));
|
BuildRoadToolbarWindow *w = dynamic_cast<BuildRoadToolbarWindow *>(FindWindowById(WC_BUILD_TOOLBAR, TRANSPORT_ROAD));
|
||||||
if (w != nullptr) w->ModifyRoadType(_cur_roadtype);
|
if (w != nullptr) w->ModifyRoadType(_cur_roadtype);
|
||||||
}
|
}
|
||||||
|
@@ -49,6 +49,7 @@
|
|||||||
#include "../newgrf.h"
|
#include "../newgrf.h"
|
||||||
#include "../engine_func.h"
|
#include "../engine_func.h"
|
||||||
#include "../rail_gui.h"
|
#include "../rail_gui.h"
|
||||||
|
#include "../road_gui.h"
|
||||||
#include "../core/backup_type.hpp"
|
#include "../core/backup_type.hpp"
|
||||||
#include "../core/mem_func.hpp"
|
#include "../core/mem_func.hpp"
|
||||||
#include "../smallmap_gui.h"
|
#include "../smallmap_gui.h"
|
||||||
@@ -3787,6 +3788,8 @@ bool AfterLoadGame()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
InitializeRoadGUI();
|
||||||
|
|
||||||
/* This needs to be done after conversion. */
|
/* This needs to be done after conversion. */
|
||||||
RebuildViewportKdtree();
|
RebuildViewportKdtree();
|
||||||
ViewportMapBuildTunnelCache();
|
ViewportMapBuildTunnelCache();
|
||||||
|
@@ -1653,6 +1653,7 @@ static SettingsContainer &GetSettingsTree()
|
|||||||
construction->Add(new SettingEntry("gui.persistent_buildingtools"));
|
construction->Add(new SettingEntry("gui.persistent_buildingtools"));
|
||||||
construction->Add(new SettingEntry("gui.quick_goto"));
|
construction->Add(new SettingEntry("gui.quick_goto"));
|
||||||
construction->Add(new SettingEntry("gui.default_rail_type"));
|
construction->Add(new SettingEntry("gui.default_rail_type"));
|
||||||
|
construction->Add(new SettingEntry("gui.default_road_type"));
|
||||||
construction->Add(new SettingEntry("gui.disable_unsuitable_building"));
|
construction->Add(new SettingEntry("gui.disable_unsuitable_building"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -111,6 +111,7 @@ struct GUISettings : public TimeSettings {
|
|||||||
uint8 advanced_vehicle_list; ///< use the "advanced" vehicle list
|
uint8 advanced_vehicle_list; ///< use the "advanced" vehicle list
|
||||||
uint8 loading_indicators; ///< show loading indicators
|
uint8 loading_indicators; ///< show loading indicators
|
||||||
uint8 default_rail_type; ///< the default rail type for the rail GUI
|
uint8 default_rail_type; ///< the default rail type for the rail GUI
|
||||||
|
uint8 default_road_type; ///< the default road/tram types for the road/tram GUI
|
||||||
uint8 toolbar_pos; ///< position of toolbars, 0=left, 1=center, 2=right
|
uint8 toolbar_pos; ///< position of toolbars, 0=left, 1=center, 2=right
|
||||||
uint8 statusbar_pos; ///< position of statusbar, 0=left, 1=center, 2=right
|
uint8 statusbar_pos; ///< position of statusbar, 0=left, 1=center, 2=right
|
||||||
uint8 window_snap_radius; ///< windows snap at each other if closer than this
|
uint8 window_snap_radius; ///< windows snap at each other if closer than this
|
||||||
|
@@ -4545,6 +4545,19 @@ strhelp = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_HELPTEXT
|
|||||||
strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST
|
strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST
|
||||||
cat = SC_BASIC
|
cat = SC_BASIC
|
||||||
|
|
||||||
|
[SDTC_VAR]
|
||||||
|
var = gui.default_road_type
|
||||||
|
type = SLE_UINT8
|
||||||
|
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||||
|
guiflags = SGF_MULTISTRING
|
||||||
|
def = 0
|
||||||
|
min = 0
|
||||||
|
max = 3
|
||||||
|
str = STR_CONFIG_SETTING_DEFAULT_ROAD_TYPE
|
||||||
|
strhelp = STR_CONFIG_SETTING_DEFAULT_ROAD_TYPE_HELPTEXT
|
||||||
|
strval = STR_CONFIG_SETTING_DEFAULT_RAIL_TYPE_FIRST
|
||||||
|
cat = SC_BASIC
|
||||||
|
|
||||||
[SDTC_BOOL]
|
[SDTC_BOOL]
|
||||||
var = gui.enable_signal_gui
|
var = gui.enable_signal_gui
|
||||||
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC
|
||||||
|
@@ -2670,10 +2670,6 @@ static WindowDesc _toolb_scen_desc(
|
|||||||
/** Allocate the toolbar. */
|
/** Allocate the toolbar. */
|
||||||
void AllocateToolbar()
|
void AllocateToolbar()
|
||||||
{
|
{
|
||||||
/* Clean old GUI values; railtype is (re)set by rail_gui.cpp */
|
|
||||||
_last_built_roadtype = ROADTYPE_ROAD;
|
|
||||||
_last_built_tramtype = ROADTYPE_TRAM;
|
|
||||||
|
|
||||||
if (_game_mode == GM_EDITOR) {
|
if (_game_mode == GM_EDITOR) {
|
||||||
new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
|
new ScenarioEditorToolbarWindow(&_toolb_scen_desc);
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user