Change vehicle route overlay settings

Add a mode setting: off, all locations, station stops only
Change show vehicle route setting to on/off
Move settings to their own section in the GUI
Add an unset hotkey to switch the mode setting
pull/453/head
Jonathan G Rennison 2 years ago
parent 7ec5450ed1
commit 6cf62af092

@ -1753,8 +1753,6 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :Nic
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Nastvit 1X zoom STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Nastvit 1X zoom
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Otevřít další pohled STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Otevřít další pohled
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Zobrazit trasu vozidla: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Zobrazit trasu vozidla: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO :Vypnuto
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_SIMPLE :Jednoduchá
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Styl vykreslení trasy vozidla: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Styl vykreslení trasy vozidla: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :přerušovaná čára široká {COMMA} pixel{P "" y ů} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :přerušovaná čára široká {COMMA} pixel{P "" y ů}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :plné čáry STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :plné čáry

@ -1785,7 +1785,15 @@ STR_CONFIG_SETTING_OSK_ACTIVATION_DISABLED :Disabled
STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click STR_CONFIG_SETTING_OSK_ACTIVATION_DOUBLE_CLICK :Double click
STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focussed) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK_FOCUS :Single click (when focussed)
STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately) STR_CONFIG_SETTING_OSK_ACTIVATION_SINGLE_CLICK :Single click (immediately)
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS :Show the vehicle's route steps: {STRING2}
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE :Show route overlay of focused vehicle: {STRING2}
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_HELPTEXT :When enabled, and a vehicle window is focused, show markers at and/or lines between the locations of the vehicle's orders.{}The station stopped at only mode only shows orders where the vehicle stops at a station (this excludes via orders, waypoints and depots).
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_OFF :Off
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_ALL_LOCATIONS :All order locations
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_STATIONS_ONLY :Stations stops only
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS :Show vehicle route overlay markers: {STRING2}
STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS_HELPTEXT :When enabled, and a vehicle window is focused, a marker with the order number and type is shown at the location of each order.
STR_CONFIG_SETTING_SHOW_VEHICLE_LIST_COMPANY_COLOUR :Mark other companies' vehicles in lists with their company colour: {STRING2} STR_CONFIG_SETTING_SHOW_VEHICLE_LIST_COMPANY_COLOUR :Mark other companies' vehicles in lists with their company colour: {STRING2}
STR_CONFIG_SETTING_SHOW_VEHICLE_LIST_COMPANY_COLOUR_HELPTEXT :Vehicles in a vehicle list window which are owned by a different company than the owner of the vehicle list are marked with a coloured square in the vehicle's company colour. STR_CONFIG_SETTING_SHOW_VEHICLE_LIST_COMPANY_COLOUR_HELPTEXT :Vehicles in a vehicle list window which are owned by a different company than the owner of the vehicle list are marked with a coloured square in the vehicle's company colour.
STR_CONFIG_SETTING_ENABLE_SINGLE_VEH_SHARED_ORDER_GUI :Enable single vehicles in shared order group window: {STRING2} STR_CONFIG_SETTING_ENABLE_SINGLE_VEH_SHARED_ORDER_GUI :Enable single vehicles in shared order group window: {STRING2}
@ -1809,9 +1817,8 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK :Function of dou
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :Do nothing STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :Do nothing
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Zoom in directly to 1X STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Zoom in directly to 1X
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Open an extra viewport STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Open an extra viewport
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Show the vehicle's route: {STRING2} STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Show vehicle route overlay lines: {STRING2}
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO :No STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_HELPTEXT :When enabled, and a vehicle window is focused, lines are drawn between the locations of each of the vehicle's orders. (Conditional order branches are shown using yellow lines).
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_SIMPLE :Simple
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Drawing style of vehicle's route: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Drawing style of vehicle's route: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :dashed lines of {COMMA} pixel{P "" s} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :dashed lines of {COMMA} pixel{P "" s}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :plain lines STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :plain lines
@ -2443,6 +2450,7 @@ STR_CONFIG_SETTING_AI_NPC :{ORANGE}Compute
STR_CONFIG_SETTING_NETWORK :{ORANGE}Network STR_CONFIG_SETTING_NETWORK :{ORANGE}Network
STR_CONFIG_SETTING_VIEWPORT_MAP_OPTIONS :{ORANGE}Map mode STR_CONFIG_SETTING_VIEWPORT_MAP_OPTIONS :{ORANGE}Map mode
STR_CONFIG_SETTING_VIEWPORT_SIGNALS :{ORANGE}Signals STR_CONFIG_SETTING_VIEWPORT_SIGNALS :{ORANGE}Signals
STR_CONFIG_SETTING_VEHICLE_ROUTE_OVERLAY :{ORANGE}Vehicle route overlay
STR_CONFIG_SETTING_SHARING :{ORANGE}Infrastructure sharing STR_CONFIG_SETTING_SHARING :{ORANGE}Infrastructure sharing
STR_CONFIG_SETTING_SCENARIO_EDITOR :{ORANGE}Scenario Editor STR_CONFIG_SETTING_SCENARIO_EDITOR :{ORANGE}Scenario Editor

@ -5773,8 +5773,6 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :Non facer nada
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Facer zoom directamente a 1X STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Facer zoom directamente a 1X
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Abrir unha vista adicional STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Abrir unha vista adicional
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Amosar a ruta do vehículo: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Amosar a ruta do vehículo: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO :Non
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_SIMPLE :Simple
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Estilo de debuxo da ruta do vehículo: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Estilo de debuxo da ruta do vehículo: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :liñas discontinuas de {COMMA} pixel{P "" es} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :liñas discontinuas de {COMMA} pixel{P "" es}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :liñas planas STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :liñas planas

@ -1797,8 +1797,6 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :Keine
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Zoome direkt auf Faktor 1x STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :Zoome direkt auf Faktor 1x
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Öffne eine neue Zusatzansicht STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :Öffne eine neue Zusatzansicht
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Zeige die Fahrzeugroute: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :Zeige die Fahrzeugroute: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO :Aus
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_SIMPLE :Einfach
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Zeichenstil der Fahrzeugroute: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :Zeichenstil der Fahrzeugroute: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :gestrichelte Linie von {COMMA} Pixel{P "" n} Länge STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :gestrichelte Linie von {COMMA} Pixel{P "" n} Länge
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :durchgezogene Linie STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :durchgezogene Linie

@ -1811,8 +1811,6 @@ STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_DO_NOTHING :아무것도
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :확대/축소 배율 원래대로 STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_ZOOM_MAIN :확대/축소 배율 원래대로
STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :새 외부 화면 열기 STR_CONFIG_SETTING_VIEWPORT_MAP_ACTION_DBLCLICK_NEW_EXTRA :새 외부 화면 열기
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :차량 경로 보이기: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE :차량 경로 보이기: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO :표시 안함
STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_SIMPLE :단순
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :차량 경로 표시 방식: {STRING} STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH :차량 경로 표시 방식: {STRING}
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :{COMMA} 픽셀 간격의 점선 STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_VALUE :{COMMA} 픽셀 간격의 점선
STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :실선 STR_CONFIG_SETTING_VIEWPORT_MAP_DRAW_ROUTE_DASH_DISABLED :실선

@ -233,6 +233,7 @@ enum {
GHK_CLOSE_ERROR, GHK_CLOSE_ERROR,
GHK_CHANGE_MAP_MODE_PREV, GHK_CHANGE_MAP_MODE_PREV,
GHK_CHANGE_MAP_MODE_NEXT, GHK_CHANGE_MAP_MODE_NEXT,
GHK_SWITCH_VIEWPORT_ROUTE_OVERLAY_MODE,
}; };
struct MainWindow : Window struct MainWindow : Window
@ -458,6 +459,13 @@ struct MainWindow : Window
this->SetDirty(); this->SetDirty();
} }
break; break;
case GHK_SWITCH_VIEWPORT_ROUTE_OVERLAY_MODE:
if (_settings_client.gui.show_vehicle_route_mode != 0) {
_settings_client.gui.show_vehicle_route_mode ^= 3;
CheckMarkDirtyFocusedRoutePaths();
SetWindowDirty(WC_GAME_OPTIONS, WN_GAME_OPTIONS_GAME_SETTINGS);
}
break;
default: return ES_NOT_HANDLED; default: return ES_NOT_HANDLED;
} }
@ -576,6 +584,7 @@ static Hotkey global_hotkeys[] = {
Hotkey(WKC_SPACE, "close_error", GHK_CLOSE_ERROR), Hotkey(WKC_SPACE, "close_error", GHK_CLOSE_ERROR),
Hotkey(WKC_PAGEUP, "previous_map_mode", GHK_CHANGE_MAP_MODE_PREV), Hotkey(WKC_PAGEUP, "previous_map_mode", GHK_CHANGE_MAP_MODE_PREV),
Hotkey(WKC_PAGEDOWN, "next_map_mode", GHK_CHANGE_MAP_MODE_NEXT), Hotkey(WKC_PAGEDOWN, "next_map_mode", GHK_CHANGE_MAP_MODE_NEXT),
Hotkey((uint16)0, "switch_viewport_route_overlay_mode", GHK_SWITCH_VIEWPORT_ROUTE_OVERLAY_MODE),
HOTKEY_LIST_END HOTKEY_LIST_END
}; };
HotkeyList MainWindow::hotkeys("global", global_hotkeys); HotkeyList MainWindow::hotkeys("global", global_hotkeys);

@ -1786,9 +1786,6 @@ static SettingsContainer &GetSettingsTree()
graphics->Add(new SettingEntry("gui.smallmap_land_colour")); graphics->Add(new SettingEntry("gui.smallmap_land_colour"));
graphics->Add(new SettingEntry("gui.linkgraph_colours")); graphics->Add(new SettingEntry("gui.linkgraph_colours"));
graphics->Add(new SettingEntry("gui.graph_line_thickness")); graphics->Add(new SettingEntry("gui.graph_line_thickness"));
graphics->Add(new SettingEntry("gui.show_vehicle_route_steps"));
graphics->Add(new SettingEntry("gui.show_vehicle_route"));
graphics->Add(new SettingEntry("gui.dash_level_of_route_lines"));
} }
SettingsPage *sound = main->Add(new SettingsPage(STR_CONFIG_SETTING_SOUND)); SettingsPage *sound = main->Add(new SettingsPage(STR_CONFIG_SETTING_SOUND));
@ -1834,6 +1831,13 @@ static SettingsContainer &GetSettingsTree()
viewport_signals->Add(new SettingEntry("gui.show_restricted_signal_default")); viewport_signals->Add(new SettingEntry("gui.show_restricted_signal_default"));
viewport_signals->Add(new SettingEntry("gui.show_all_signal_default")); viewport_signals->Add(new SettingEntry("gui.show_all_signal_default"));
} }
SettingsPage *viewport_route_overlay = viewports->Add(new SettingsPage(STR_CONFIG_SETTING_VEHICLE_ROUTE_OVERLAY));
{
viewport_route_overlay->Add(new SettingEntry("gui.show_vehicle_route_mode"));
viewport_route_overlay->Add(new ConditionallyHiddenSettingEntry("gui.show_vehicle_route_steps", []() -> bool { return _settings_client.gui.show_vehicle_route_mode == 0; }));
viewport_route_overlay->Add(new ConditionallyHiddenSettingEntry("gui.show_vehicle_route", []() -> bool { return _settings_client.gui.show_vehicle_route_mode == 0; }));
viewport_route_overlay->Add(new ConditionallyHiddenSettingEntry("gui.dash_level_of_route_lines", []() -> bool { return _settings_client.gui.show_vehicle_route_mode == 0 || !_settings_client.gui.show_vehicle_route; }));
}
viewports->Add(new SettingEntry("gui.auto_scrolling")); viewports->Add(new SettingEntry("gui.auto_scrolling"));
viewports->Add(new SettingEntry("gui.scroll_mode")); viewports->Add(new SettingEntry("gui.scroll_mode"));

@ -170,8 +170,6 @@ struct GUISettings : public TimeSettings {
uint32 show_scrolling_viewport_on_map; ///< when a no map viewport is scrolled, its location is marked on the other map viewports uint32 show_scrolling_viewport_on_map; ///< when a no map viewport is scrolled, its location is marked on the other map viewports
bool show_bridges_on_map; ///< bridges are rendered on a viewport in map mode bool show_bridges_on_map; ///< bridges are rendered on a viewport in map mode
bool show_tunnels_on_map; ///< tunnels are rendered on a viewport in map mode bool show_tunnels_on_map; ///< tunnels are rendered on a viewport in map mode
uint32 show_vehicle_route; ///< show a vehicle's route when its orders/timetable window is focused
uint32 dash_level_of_route_lines; ///< the dash level passed to GfxDrawLine() (plain if 0)
bool use_owner_colour_for_tunnelbridge;///< bridges and tunnels are rendered with their owner's colour bool use_owner_colour_for_tunnelbridge;///< bridges and tunnels are rendered with their owner's colour
bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables bool timetable_arrival_departure; ///< show arrivals and departures in vehicle timetables
uint8 max_departures; ///< maximum number of departures to show per station uint8 max_departures; ///< maximum number of departures to show per station
@ -232,7 +230,10 @@ struct GUISettings : public TimeSettings {
bool auto_remove_signals; ///< automatically remove signals when in the way during rail construction bool auto_remove_signals; ///< automatically remove signals when in the way during rail construction
uint16 refresh_rate; ///< How often we refresh the screen (time between draw-ticks). uint16 refresh_rate; ///< How often we refresh the screen (time between draw-ticks).
uint16 fast_forward_speed_limit; ///< Game speed to use when fast-forward is enabled. uint16 fast_forward_speed_limit; ///< Game speed to use when fast-forward is enabled.
bool show_vehicle_route_steps; ///< when a window related to a specific vehicle is focused, show route steps uint8 show_vehicle_route_mode; ///< How to show a vehicle's route when one of its windows is focused
bool show_vehicle_route; ///< Show route lines when vehicles route overlay is being shown
bool show_vehicle_route_steps; ///< Show route step markers when vehicles route overlay is being shown
uint8 dash_level_of_route_lines; ///< the dash level passed to GfxDrawLine() (plain if 0)
bool show_vehicle_list_company_colour; ///< show the company colour of vehicles which have an owner different to the owner of the vehicle list bool show_vehicle_list_company_colour; ///< show the company colour of vehicles which have an owner different to the owner of the vehicle list
bool enable_single_veh_shared_order_gui; ///< enable showing a single vehicle in the shared order GUI window bool enable_single_veh_shared_order_gui; ///< enable showing a single vehicle in the shared order GUI window
bool show_adv_load_mode_features; ///< enable advanced loading mode features in UI bool show_adv_load_mode_features; ///< enable advanced loading mode features in UI

@ -4664,20 +4664,37 @@ str = STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_TUNNELS
post_cb = ViewportMapShowTunnelModeChanged post_cb = ViewportMapShowTunnelModeChanged
[SDTC_VAR] [SDTC_VAR]
var = gui.show_vehicle_route var = gui.show_vehicle_route_mode
type = SLE_UINT32 type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_DROPDOWN
def = 1 def = 1
min = 0 min = 0
max = 1 max = 2
interval = 1 interval = 1
str = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE
strhelp = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_HELPTEXT
strval = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_MODE_OFF
post_cb = [](auto) { InvalidateWindowClassesData(WC_GAME_OPTIONS); MarkWholeScreenDirty(); }
[SDTC_BOOL]
var = gui.show_vehicle_route_steps
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = true
str = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS
strhelp = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS_HELPTEXT
post_cb = [](auto) { InvalidateWindowClassesData(WC_GAME_OPTIONS); MarkWholeScreenDirty(); }
[SDTC_BOOL]
var = gui.show_vehicle_route
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = true
str = STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE str = STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE
strval = STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_NO strhelp = STR_CONFIG_SETTING_VIEWPORT_MAP_SHOW_VEHICLE_ROUTE_HELPTEXT
post_cb = [](auto) { MarkWholeScreenDirty(); } post_cb = [](auto) { InvalidateWindowClassesData(WC_GAME_OPTIONS); MarkWholeScreenDirty(); }
[SDTC_VAR] [SDTC_VAR]
var = gui.dash_level_of_route_lines var = gui.dash_level_of_route_lines
type = SLE_UINT32 type = SLE_UINT8
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC | SF_GUI_0_IS_SPECIAL
def = 0 def = 0
min = 0 min = 0
@ -5344,13 +5361,6 @@ strhelp = STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT
strval = STR_JUST_COMMA strval = STR_JUST_COMMA
post_cb = [](auto) { MarkWholeScreenDirty(); } post_cb = [](auto) { MarkWholeScreenDirty(); }
[SDTC_BOOL]
var = gui.show_vehicle_route_steps
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC
def = true
str = STR_CONFIG_SETTING_SHOW_VEHICLE_ROUTE_STEPS
post_cb = [](auto) { MarkWholeScreenDirty(); }
[SDTC_BOOL] [SDTC_BOOL]
var = gui.show_train_length_in_details var = gui.show_train_length_in_details
flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC flags = SF_NOT_IN_SAVE | SF_NO_NETWORK_SYNC

@ -2287,23 +2287,31 @@ static inline Vehicle *GetVehicleFromWindow(Window *w)
return nullptr; return nullptr;
} }
static bool ViewportVehicleRouteShouldSkipOrder(const Order *order)
{
if (_settings_client.gui.show_vehicle_route_mode != 2) return false;
switch (order->GetType()) {
case OT_GOTO_STATION:
case OT_IMPLICIT:
return (order->GetNonStopType() & ONSF_NO_STOP_AT_DESTINATION_STATION) != 0;
default:
return true;
}
}
static inline TileIndex GetLastValidOrderLocation(const Vehicle *veh) static inline TileIndex GetLastValidOrderLocation(const Vehicle *veh)
{ {
TileIndex tmp, result = INVALID_TILE; VehicleOrderID order_id = veh->GetNumOrders();
for(const Order *order : veh->Orders()) { while (order_id > 0) {
switch (order->GetType()) { order_id--;
case OT_GOTO_STATION: const Order *order = veh->GetOrder(order_id);
case OT_GOTO_WAYPOINT: if (ViewportVehicleRouteShouldSkipOrder(order)) continue;
case OT_IMPLICIT: TileIndex location = order->GetLocation(veh, veh->type == VEH_AIRCRAFT);
case OT_GOTO_DEPOT: if (location != INVALID_TILE) return location;
tmp = order->GetLocation(veh, veh->type == VEH_AIRCRAFT);
if (tmp != INVALID_TILE) result = tmp;
break;
default:
break;
}
} }
return result; return INVALID_TILE;
} }
static inline std::pair<const Order *, bool> GetFinalOrder(const Vehicle *veh, const Order *order) static inline std::pair<const Order *, bool> GetFinalOrder(const Vehicle *veh, const Order *order)
@ -2342,7 +2350,7 @@ static bool ViewportMapPrepareVehicleRoute(const Vehicle * const veh)
TileIndex from_tile = GetLastValidOrderLocation(veh); TileIndex from_tile = GetLastValidOrderLocation(veh);
if (from_tile == INVALID_TILE) return false; if (from_tile == INVALID_TILE) return false;
for(const Order *order : veh->Orders()) { for (const Order *order : veh->Orders()) {
auto guard = scope_guard([&]() { auto guard = scope_guard([&]() {
if (order->IsType(OT_CONDITIONAL) && order->GetConditionVariable() == OCV_UNCONDITIONALLY) from_tile = INVALID_TILE; if (order->IsType(OT_CONDITIONAL) && order->GetConditionVariable() == OCV_UNCONDITIONALLY) from_tile = INVALID_TILE;
}); });
@ -2350,6 +2358,7 @@ static bool ViewportMapPrepareVehicleRoute(const Vehicle * const veh)
bool conditional; bool conditional;
std::tie(final_order, conditional) = GetFinalOrder(veh, order); std::tie(final_order, conditional) = GetFinalOrder(veh, order);
if (final_order == nullptr) continue; if (final_order == nullptr) continue;
if (ViewportVehicleRouteShouldSkipOrder(final_order)) continue;
const TileIndex to_tile = final_order->GetLocation(veh, veh->type == VEH_AIRCRAFT); const TileIndex to_tile = final_order->GetLocation(veh, veh->type == VEH_AIRCRAFT);
if (to_tile == INVALID_TILE) continue; if (to_tile == INVALID_TILE) continue;
@ -2372,41 +2381,35 @@ static bool ViewportMapPrepareVehicleRoute(const Vehicle * const veh)
/** Draw the route of a vehicle. */ /** Draw the route of a vehicle. */
static void ViewportMapDrawVehicleRoute(const Viewport *vp, ViewportDrawerDynamic *vdd) static void ViewportMapDrawVehicleRoute(const Viewport *vp, ViewportDrawerDynamic *vdd)
{ {
switch (_settings_client.gui.show_vehicle_route) { if (_vp_route_paths.empty()) return;
/* case 0: return; // No */
case 1: { // Simple
if (_vp_route_paths.empty()) return;
DrawPixelInfo dpi_for_text = vdd->MakeDPIForText();
for (const auto &iter : _vp_route_paths) {
const int from_tile_x = TileX(iter.from_tile) * TILE_SIZE + TILE_SIZE / 2;
const int from_tile_y = TileY(iter.from_tile) * TILE_SIZE + TILE_SIZE / 2;
Point from_pt = RemapCoords(from_tile_x, from_tile_y, 0);
const int from_x = UnScaleByZoom(from_pt.x, vp->zoom);
const int to_tile_x = TileX(iter.to_tile) * TILE_SIZE + TILE_SIZE / 2;
const int to_tile_y = TileY(iter.to_tile) * TILE_SIZE + TILE_SIZE / 2;
Point to_pt = RemapCoords(to_tile_x, to_tile_y, 0);
const int to_x = UnScaleByZoom(to_pt.x, vp->zoom);
if (from_x < dpi_for_text.left - 1 && to_x < dpi_for_text.left - 1) continue; DrawPixelInfo dpi_for_text = vdd->MakeDPIForText();
if (from_x > dpi_for_text.left + dpi_for_text.width + 1 && to_x > dpi_for_text.left + dpi_for_text.width + 1) continue;
from_pt.y -= GetSlopePixelZ(from_tile_x, from_tile_y) * ZOOM_LVL_BASE; for (const auto &iter : _vp_route_paths) {
to_pt.y -= GetSlopePixelZ(to_tile_x, to_tile_y) * ZOOM_LVL_BASE; const int from_tile_x = TileX(iter.from_tile) * TILE_SIZE + TILE_SIZE / 2;
const int from_y = UnScaleByZoom(from_pt.y, vp->zoom); const int from_tile_y = TileY(iter.from_tile) * TILE_SIZE + TILE_SIZE / 2;
const int to_y = UnScaleByZoom(to_pt.y, vp->zoom); Point from_pt = RemapCoords(from_tile_x, from_tile_y, 0);
const int from_x = UnScaleByZoom(from_pt.x, vp->zoom);
int line_width = 3;
if (_settings_client.gui.dash_level_of_route_lines == 0) { const int to_tile_x = TileX(iter.to_tile) * TILE_SIZE + TILE_SIZE / 2;
GfxDrawLine(&dpi_for_text, from_x, from_y, to_x, to_y, PC_BLACK, 3, _settings_client.gui.dash_level_of_route_lines); const int to_tile_y = TileY(iter.to_tile) * TILE_SIZE + TILE_SIZE / 2;
line_width = 1; Point to_pt = RemapCoords(to_tile_x, to_tile_y, 0);
} const int to_x = UnScaleByZoom(to_pt.x, vp->zoom);
GfxDrawLine(&dpi_for_text, from_x, from_y, to_x, to_y, iter.order_match ? PC_WHITE : PC_YELLOW, line_width, _settings_client.gui.dash_level_of_route_lines);
} if (from_x < dpi_for_text.left - 1 && to_x < dpi_for_text.left - 1) continue;
break; if (from_x > dpi_for_text.left + dpi_for_text.width + 1 && to_x > dpi_for_text.left + dpi_for_text.width + 1) continue;
from_pt.y -= GetSlopePixelZ(from_tile_x, from_tile_y) * ZOOM_LVL_BASE;
to_pt.y -= GetSlopePixelZ(to_tile_x, to_tile_y) * ZOOM_LVL_BASE;
const int from_y = UnScaleByZoom(from_pt.y, vp->zoom);
const int to_y = UnScaleByZoom(to_pt.y, vp->zoom);
int line_width = 3;
if (_settings_client.gui.dash_level_of_route_lines == 0) {
GfxDrawLine(&dpi_for_text, from_x, from_y, to_x, to_y, PC_BLACK, 3, _settings_client.gui.dash_level_of_route_lines);
line_width = 1;
} }
GfxDrawLine(&dpi_for_text, from_x, from_y, to_x, to_y, iter.order_match ? PC_WHITE : PC_YELLOW, line_width, _settings_client.gui.dash_level_of_route_lines);
} }
} }
@ -2507,9 +2510,10 @@ static bool ViewportPrepareVehicleRouteSteps(const Vehicle * const veh)
if (_vp_route_steps.size() == 0) { if (_vp_route_steps.size() == 0) {
/* Prepare data. */ /* Prepare data. */
int order_rank = 0; int order_rank = 0;
for(const Order *order : veh->Orders()) { for (const Order *order : veh->Orders()) {
const TileIndex tile = order->GetLocation(veh, veh->type == VEH_AIRCRAFT);
order_rank++; order_rank++;
if (ViewportVehicleRouteShouldSkipOrder(order)) continue;
const TileIndex tile = order->GetLocation(veh, veh->type == VEH_AIRCRAFT);
if (tile == INVALID_TILE) continue; if (tile == INVALID_TILE) continue;
_vp_route_steps[tile].push_back(std::pair<int, OrderType>(order_rank, order->GetType())); _vp_route_steps[tile].push_back(std::pair<int, OrderType>(order_rank, order->GetType()));
} }
@ -2520,6 +2524,7 @@ static bool ViewportPrepareVehicleRouteSteps(const Vehicle * const veh)
void ViewportPrepareVehicleRoute() void ViewportPrepareVehicleRoute()
{ {
if (_settings_client.gui.show_vehicle_route_mode == 0) return;
if (!_settings_client.gui.show_vehicle_route_steps && !_settings_client.gui.show_vehicle_route) return; if (!_settings_client.gui.show_vehicle_route_steps && !_settings_client.gui.show_vehicle_route) return;
const Vehicle * const veh = GetVehicleFromWindow(_focused_window); const Vehicle * const veh = GetVehicleFromWindow(_focused_window);
if (_settings_client.gui.show_vehicle_route_steps && veh && ViewportPrepareVehicleRouteSteps(veh)) { if (_settings_client.gui.show_vehicle_route_steps && veh && ViewportPrepareVehicleRouteSteps(veh)) {
@ -3780,7 +3785,7 @@ static void ViewportDoDrawPhase2(Viewport *vp, ViewportDrawerDynamic *vdd)
vp->overlay->Draw(&dp); vp->overlay->Draw(&dp);
} }
if (_settings_client.gui.show_vehicle_route) ViewportMapDrawVehicleRoute(vp, vdd); if (_settings_client.gui.show_vehicle_route_mode != 0 && _settings_client.gui.show_vehicle_route) ViewportMapDrawVehicleRoute(vp, vdd);
} }
/* This is run in the main thread */ /* This is run in the main thread */
@ -3798,7 +3803,7 @@ static void ViewportDoDrawPhase3(Viewport *vp)
dp.top = UnScaleByZoom(_vdd->dpi.top, zoom); dp.top = UnScaleByZoom(_vdd->dpi.top, zoom);
ViewportDrawStrings(_vdd.get(), zoom, &_vdd->string_sprites_to_draw); ViewportDrawStrings(_vdd.get(), zoom, &_vdd->string_sprites_to_draw);
} }
if (_settings_client.gui.show_vehicle_route_steps && !_vp_route_steps.empty()) { if (_settings_client.gui.show_vehicle_route_mode != 0 && _settings_client.gui.show_vehicle_route_steps && !_vp_route_steps.empty()) {
dp.left = _vdd->offset_x + vp->left; dp.left = _vdd->offset_x + vp->left;
dp.top = _vdd->offset_y + vp->top; dp.top = _vdd->offset_y + vp->top;
ViewportDrawVehicleRouteSteps(vp); ViewportDrawVehicleRouteSteps(vp);
@ -4336,13 +4341,8 @@ static void MarkRoutePathsDirty(const std::vector<DrawnPathRouteTileLine> &lines
void MarkAllRoutePathsDirty(const Vehicle *veh) void MarkAllRoutePathsDirty(const Vehicle *veh)
{ {
switch (_settings_client.gui.show_vehicle_route) { if (_settings_client.gui.show_vehicle_route) {
case 0: // No ViewportMapPrepareVehicleRoute(veh);
return;
case 1: // Simple
ViewportMapPrepareVehicleRoute(veh);
break;
} }
for (const auto &iter : _vp_route_paths) { for (const auto &iter : _vp_route_paths) {
MarkTileLineDirty(iter.from_tile, iter.to_tile, VMDF_NOT_LANDSCAPE); MarkTileLineDirty(iter.from_tile, iter.to_tile, VMDF_NOT_LANDSCAPE);
@ -4354,12 +4354,21 @@ void MarkAllRoutePathsDirty(const Vehicle *veh)
void CheckMarkDirtyFocusedRoutePaths(const Vehicle *veh) void CheckMarkDirtyFocusedRoutePaths(const Vehicle *veh)
{ {
const Vehicle *focused_veh = GetVehicleFromWindow(_focused_window); const Vehicle *focused_veh = GetVehicleFromWindow(_focused_window);
if (focused_veh && veh == focused_veh) { if (focused_veh != nullptr && veh == focused_veh) {
MarkAllRoutePathsDirty(veh); MarkAllRoutePathsDirty(veh);
MarkAllRouteStepsDirty(veh); MarkAllRouteStepsDirty(veh);
} }
} }
void CheckMarkDirtyFocusedRoutePaths()
{
const Vehicle *focused_veh = GetVehicleFromWindow(_focused_window);
if (focused_veh != nullptr) {
MarkAllRoutePathsDirty(focused_veh);
MarkAllRouteStepsDirty(focused_veh);
}
}
/** /**
* Marks the selected tiles as dirty. * Marks the selected tiles as dirty.
* *

@ -46,6 +46,7 @@ void MarkViewportLineDirty(Viewport * const vp, const Point from_pt, const Point
void MarkTileLineDirty(const TileIndex from_tile, const TileIndex to_tile, ViewportMarkDirtyFlags flags); void MarkTileLineDirty(const TileIndex from_tile, const TileIndex to_tile, ViewportMarkDirtyFlags flags);
void MarkAllRoutePathsDirty(const Vehicle *veh); void MarkAllRoutePathsDirty(const Vehicle *veh);
void CheckMarkDirtyFocusedRoutePaths(const Vehicle *veh); void CheckMarkDirtyFocusedRoutePaths(const Vehicle *veh);
void CheckMarkDirtyFocusedRoutePaths();
bool DoZoomInOutWindow(ZoomStateChange how, Window *w); bool DoZoomInOutWindow(ZoomStateChange how, Window *w);
void ZoomInOrOutToCursorWindow(bool in, Window * w); void ZoomInOrOutToCursorWindow(bool in, Window * w);

Loading…
Cancel
Save