diff --git a/src/lang/english.txt b/src/lang/english.txt index 767c46c309..e78dfeb13b 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -1293,6 +1293,8 @@ STR_CONFIG_SETTING_SHOW_TRAIN_WEIGHT_RATIOS_IN_DETAILS :Show train weig STR_CONFIG_SETTING_SHOW_TRAIN_WEIGHT_RATIOS_IN_DETAILS_HELPTEXT :Show train weight ratios in the vehicle details window STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF :Show restricted electric signals using default graphics: {STRING2} STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF_HELPTEXT :Show electric signals with routing restriction programs using the default signal graphics with a blue signal post, instead of using any NewGRF signal graphics. This is to make it easier to visually distinguish restricted signals. +STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES :Show advanced routing restriction features: {STRING2} +STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES_HELPTEXT :Show advanced routing restriction features. When disabled, some advanced features are not shown in the UI, but are still available to all players. STR_CONFIG_SETTING_LANDSCAPE :Landscape: {STRING2} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Landscapes define basic gameplay scenarios with different cargos and town growth requirements. NewGRF and Game Scripts allow finer control though diff --git a/src/settings_gui.cpp b/src/settings_gui.cpp index 53ab16b05c..c96d5c4f00 100644 --- a/src/settings_gui.cpp +++ b/src/settings_gui.cpp @@ -1548,6 +1548,7 @@ static SettingsContainer &GetSettingsTree() interface->Add(new SettingEntry("gui.timetable_arrival_departure")); interface->Add(new SettingEntry("gui.expenses_layout")); interface->Add(new SettingEntry("gui.show_train_weight_ratios_in_details")); + interface->Add(new SettingEntry("gui.show_adv_tracerestrict_features")); } SettingsPage *advisors = main->Add(new SettingsPage(STR_CONFIG_SETTING_ADVISORS)); diff --git a/src/settings_type.h b/src/settings_type.h index 6bf05dd8a2..b1e2d38f74 100644 --- a/src/settings_type.h +++ b/src/settings_type.h @@ -138,6 +138,7 @@ struct GUISettings { uint8 graph_line_thickness; ///< the thickness of the lines in the various graph guis bool show_train_weight_ratios_in_details; ///< show train weight ratios in vehicle details window top widget bool show_restricted_signal_default; ///< Show restricted electric signals using the default sprite + bool show_adv_tracerestrict_features; ///< Show advanced trace restrict features in UI uint8 osk_activation; ///< Mouse gesture to trigger the OSK. uint16 console_backlog_timeout; ///< the minimum amount of time items should be in the console backlog before they will be removed in ~3 seconds granularity. diff --git a/src/table/settings.ini b/src/table/settings.ini index b88c3d495f..13dad170e7 100644 --- a/src/table/settings.ini +++ b/src/table/settings.ini @@ -3160,6 +3160,15 @@ str = STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF strhelp = STR_CONFIG_SETTING_SHOW_RESTRICTED_SIG_DEF_HELPTEXT proc = RedrawScreen +[SDTC_BOOL] +var = gui.show_adv_tracerestrict_features +flags = SLF_NOT_IN_SAVE | SLF_NO_NETWORK_SYNC +def = false +str = STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES +strhelp = STR_CONFIG_SETTING_SHOW_ADV_TRACE_RESTRICT_FEATURES_HELPTEXT +proc = RedrawScreen +cat = SC_EXPERT + ; For the dedicated build we'll enable dates in logs by default. [SDTC_BOOL] ifdef = DEDICATED diff --git a/src/tracerestrict_gui.cpp b/src/tracerestrict_gui.cpp index 47f6b5c7ad..3d5d4742c0 100644 --- a/src/tracerestrict_gui.cpp +++ b/src/tracerestrict_gui.cpp @@ -141,6 +141,8 @@ static const StringID _program_insert_str[] = { static const uint32 _program_insert_else_hide_mask = 8; ///< disable bitmask for else static const uint32 _program_insert_or_if_hide_mask = 4; ///< disable bitmask for orif static const uint32 _program_insert_else_if_hide_mask = 2; ///< disable bitmask for elif +static const uint32 _program_wait_pbs_hide_mask = 0x100; ///< disable bitmask for wait at PBS +static const uint32 _program_slot_hide_mask = 0x200; ///< disable bitmask for slot static const uint _program_insert_val[] = { TRIT_COND_UNDEFINED, // if block TRIT_COND_UNDEFINED | (TRCF_ELSE << 16), // elif block @@ -289,7 +291,7 @@ static TraceRestrictItemType ItemTypeFromGuiType(TraceRestrictGuiItemType type) /** * Return the appropriate type dropdown TraceRestrictDropDownListSet for the given item type @p type */ -static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictGuiItemType type) +static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictGuiItemType type, uint32 *hide_mask = nullptr) { static const StringID str_action[] = { STR_TRACE_RESTRICT_PF_DENY, @@ -353,7 +355,15 @@ static const TraceRestrictDropDownListSet *GetTypeDropDownListSet(TraceRestrictG str_cond, val_cond, }; - return IsTraceRestrictTypeConditional(ItemTypeFromGuiType(type)) ? &set_cond : &set_action; + bool is_conditional = IsTraceRestrictTypeConditional(ItemTypeFromGuiType(type)); + if (hide_mask) { + if (_settings_client.gui.show_adv_tracerestrict_features) { + *hide_mask = 0; + } else { + *hide_mask = is_conditional ? 0x4000 : 0x30; + } + } + return is_conditional ? &set_cond : &set_action; } /** @@ -1111,6 +1121,7 @@ public: } uint32 disabled = _program_insert_or_if_hide_mask; + uint32 hidden = 0; TraceRestrictItem item = this->GetSelected(); if (GetTraceRestrictType(item) == TRIT_COND_ENDIF || (IsTraceRestrictConditional(item) && GetTraceRestrictCondFlags(item) != 0)) { @@ -1131,8 +1142,9 @@ public: if (ElseIfInsertionDryRun(false)) disabled &= ~_program_insert_or_if_hide_mask; } } + if (!_settings_client.gui.show_adv_tracerestrict_features) hidden |= _program_slot_hide_mask | _program_wait_pbs_hide_mask; - this->ShowDropDownListWithValue(&_program_insert, 0, true, TR_WIDGET_INSERT, disabled, 0, 0); + this->ShowDropDownListWithValue(&_program_insert, 0, true, TR_WIDGET_INSERT, disabled, hidden, 0); break; } @@ -1197,7 +1209,9 @@ public: TraceRestrictGuiItemType type = GetItemGuiType(item); if (type != TRIT_NULL) { - this->ShowDropDownListWithValue(GetTypeDropDownListSet(type), type, false, widget, 0, 0, 0); + uint32 hide_mask = 0; + const TraceRestrictDropDownListSet *set = GetTypeDropDownListSet(type, &hide_mask); + this->ShowDropDownListWithValue(set, type, false, widget, 0, hide_mask, 0); } break; } diff --git a/src/vehicle_gui.cpp b/src/vehicle_gui.cpp index 204c4aeb3d..89cde2b5fe 100644 --- a/src/vehicle_gui.cpp +++ b/src/vehicle_gui.cpp @@ -179,7 +179,7 @@ DropDownList *BaseVehicleListWindow::BuildActionDropdownList(bool show_autorepla *list->Append() = new DropDownListStringItem(STR_GROUP_ADD_SHARED_VEHICLE, ADI_ADD_SHARED, false); *list->Append() = new DropDownListStringItem(STR_GROUP_REMOVE_ALL_VEHICLES, ADI_REMOVE_ALL, false); } - if (this->vli.vtype == VEH_TRAIN) { + if (this->vli.vtype == VEH_TRAIN && _settings_client.gui.show_adv_tracerestrict_features) { *list->Append() = new DropDownListStringItem(STR_TRACE_RESTRICT_SLOT_MANAGE, ADI_TRACERESTRICT_SLOT_MGMT, false); }