diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index fa08c86c7c..9de37704a2 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2606,6 +2606,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{G=Masculin}{TI STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} a transportar cada mes de {STATION} a {STATION} ({COMMA}{NBSP}% de capacitat){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} per a transportar de tornada ({COMMA}{NBSP}% de capacitat) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Temps de viatge mitjà: {NUM}{NBSP}di{P a es} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Temps de viatge mitjà: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Marca l'àrea de cobertura diff --git a/src/lang/dutch.txt b/src/lang/dutch.txt index df2059fe46..1c1cc4b102 100644 --- a/src/lang/dutch.txt +++ b/src/lang/dutch.txt @@ -2605,6 +2605,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} voor retourtransport per maand van {STATION} naar {STATION} ({COMMA}% van capaciteit){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} voor retourtransport ({COMMA}% van capaciteit) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Gemiddelde reistijd: {NUM}{NBSP}dag{P "" en} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Gemiddelde reistijd: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Dekkingsgebied markeren diff --git a/src/lang/english.txt b/src/lang/english.txt index 88b1fb2335..c27ecedb90 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -3123,6 +3123,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} to be transported per month from {STATION} to {STATION} ({COMMA}% of capacity){RAW_STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} to be transported back ({COMMA}% of capacity) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Average travel time: {NUM}{NBSP}day{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Average travel time: {STRING1} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Coverage area highlight diff --git a/src/lang/english_AU.txt b/src/lang/english_AU.txt index 371e792d9c..3425af5056 100644 --- a/src/lang/english_AU.txt +++ b/src/lang/english_AU.txt @@ -2630,6 +2630,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} to be transported per month from {STATION} to {STATION} ({COMMA}% of capacity){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} to be transported back ({COMMA}% of capacity) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Average travel time: {NUM}{NBSP}day{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Average travel time: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Coverage area highlight diff --git a/src/lang/english_US.txt b/src/lang/english_US.txt index 995c4e1cb3..646635f47f 100644 --- a/src/lang/english_US.txt +++ b/src/lang/english_US.txt @@ -2631,6 +2631,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} to be transported per month from {STATION} to {STATION} ({COMMA}% of capacity){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} to be transported back ({COMMA}% of capacity) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Average travel time: {NUM}{NBSP}day{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Average travel time: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Coverage area highlight diff --git a/src/lang/french.txt b/src/lang/french.txt index 57f1c1949c..c8044c4d10 100644 --- a/src/lang/french.txt +++ b/src/lang/french.txt @@ -2606,6 +2606,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} à transporter par mois de {STATION} à {STATION} ({COMMA}% de la capacité){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} à transporter en retour ({COMMA}% de la capacité) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Temps de trajet moyen{NBSP}: {NUM}{NBSP}jour{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Temps de trajet moyen{NBSP}: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Afficher la zone couverte diff --git a/src/lang/galician.txt b/src/lang/galician.txt index cd69a26658..0f16d7c1e3 100644 --- a/src/lang/galician.txt +++ b/src/lang/galician.txt @@ -7200,6 +7200,7 @@ STR_CONFIG_SETTING_TOWN_MAX_ROAD_SLOPE_ZERO :Sen límite STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} transportaranse cada mes dende {STATION} a {STATION} ({COMMA}% da capacidade){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} transportaranse de volta ({COMMA}% da capacidade) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo medio de viaxe: {NUM}{NBSP}día{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tempo medio de viaxe: {STRING} STR_STATION_BUILD_INFRASTRUCTURE_COST :{BLACK}Custo de mantemento: {GOLD}{CURRENCY_SHORT}/ano STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_ALLOW_ROADS :Permitido construír estradas STR_LOCAL_AUTHORITY_SETTING_OVERRIDE_ALLOW_LEVEL_CROSSINGS :Permitido construír pasos a nivel diff --git a/src/lang/german.txt b/src/lang/german.txt index ba54fbe37c..9e8509d180 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -3099,6 +3099,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} Zum Transport pro Monat votgesehen von {STATION} zu {STATION}({COMMA}% der Kapazitäten){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} ZUM Rücktransport vorgesehen ({COMMA}% der Kapazitäten) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Durchschnittliche Reisezeit: {NUM}{NBSP}Tag{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Durchschnittliche Reisezeit: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Einzugsgebiet anzeigen diff --git a/src/lang/hungarian.txt b/src/lang/hungarian.txt index 5472d9e630..cf44814330 100644 --- a/src/lang/hungarian.txt +++ b/src/lang/hungarian.txt @@ -2669,6 +2669,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} elszállítva havonta innen: {STATION} ide: {STATION} ({COMMA}% elszállítva){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} visszaszállításra ({COMMA}% elszállítva) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Átlagos utazási idő: {NUM}{NBSP}nap{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Átlagos utazási idő: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Lefedett terület mutatása: diff --git a/src/lang/korean.txt b/src/lang/korean.txt index 3a20f71326..c22f954ac2 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -3124,6 +3124,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{1:STATION}에서 {2:STATION}까지 매달 {0:CARGO_LONG} {G 0 "을" "를"} 수송해야 함 (수용량의 {3:COMMA}%){4:STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{0:CARGO_LONG}{G 0 "을" "를"} 다시 수송해와야 함 (수용량의 {1:COMMA}%) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}평균 운행 시간: {NUM}일 +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}평균 운행 시간: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}역세권 표시 diff --git a/src/lang/polish.txt b/src/lang/polish.txt index dd7c157b8a..5095546d0f 100644 --- a/src/lang/polish.txt +++ b/src/lang/polish.txt @@ -2985,6 +2985,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} miesięcznie do przetransportowania z {STATION} do {STATION} ({COMMA}% przepustowości){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} do przetransportowania z powrotem ({COMMA}% przepustowości) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Średni czas podróży: {NUM}{NBSP}d{P zień ni ni} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Średni czas podróży: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Podświetlaj zasięg diff --git a/src/lang/portuguese.txt b/src/lang/portuguese.txt index cbc690f32c..58d5d6880c 100644 --- a/src/lang/portuguese.txt +++ b/src/lang/portuguese.txt @@ -2606,6 +2606,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} a ser transportado mensalmente de {STATION} para {STATION} ({COMMA}% da capacidade){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} a ser transportado de volta ({COMMA}% da capacidade) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tempo médio de viagem: {NUM}{NBSP}dia{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tempo médio de viagem: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Exibir área de cobertura diff --git a/src/lang/russian.txt b/src/lang/russian.txt index c1c28d4e89..832d248a3a 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -2772,6 +2772,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} в месяц к перевозке от {STATION} к {STATION} ({COMMA}% ёмкости){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} к возврату ({COMMA}% ёмкости) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Среднее время в пути: {NUM}{NBSP}д{P ень ня ней} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Среднее время в пути: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Подсветка зоны покрытия diff --git a/src/lang/spanish_MX.txt b/src/lang/spanish_MX.txt index b878a85baf..6e971ca86d 100644 --- a/src/lang/spanish_MX.txt +++ b/src/lang/spanish_MX.txt @@ -2606,6 +2606,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} a ser transportad{G 0 o a}{P 0 "" s} al mes desde {STATION} a {STATION} ({COMMA}% de la capacidad){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} a ser transportad{G 0 o a}{P 0 "" s}) de vuelta ({COMMA}% de la capacidad) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Tiempo promedio de viaje: {NUM}{NBSP}día{P "" s} +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Tiempo promedio de viaje: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Mostrar área de recolección diff --git a/src/lang/vietnamese.txt b/src/lang/vietnamese.txt index d1bd5a5cac..a2bb10a9e7 100644 --- a/src/lang/vietnamese.txt +++ b/src/lang/vietnamese.txt @@ -2605,6 +2605,7 @@ STR_LINKGRAPH_LEGEND_OVERLOADED :{TINY_FONT}{BLA STR_LINKGRAPH_STATS_TOOLTIP :{BLACK}{CARGO_LONG} sẽ được vận chuyển hằng tháng từ {STATION} đến {STATION} ({COMMA}% dung lượng){STRING} STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION :{}{CARGO_LONG} sẽ được hoàn chuyển ({COMMA}% dung lượng) STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION :{}Thời gian đi lại trung bình: {NUM}{NBSP}ngày +STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL :{}Thời gian đi lại trung bình: {STRING} # Base for station construction window(s) STR_STATION_BUILD_COVERAGE_AREA_TITLE :{BLACK}Hiện rõ vùng phủ ảnh hưởng diff --git a/src/linkgraph/linkgraph_gui.cpp b/src/linkgraph/linkgraph_gui.cpp index 7c2a1ce7a5..4ed11bbe14 100644 --- a/src/linkgraph/linkgraph_gui.cpp +++ b/src/linkgraph/linkgraph_gui.cpp @@ -171,7 +171,9 @@ void LinkGraphOverlay::RebuildCache(bool incremental) item->to_pt = to_pt; } this->AddStats(c, lg.Monthly(edge.Capacity()), lg.Monthly(edge.Usage()), - ge.flows.GetFlowVia(to->index), from->owner == OWNER_NONE || to->owner == OWNER_NONE, + ge.flows.GetFlowVia(to->index), + edge.TravelTime(), + from->owner == OWNER_NONE || to->owner == OWNER_NONE, item->prop); } } @@ -345,7 +347,7 @@ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixe * @param new_shared If the new link is shared. * @param cargo LinkProperties to write the information to. */ -/* static */ void LinkGraphOverlay::AddStats(CargoID new_cargo, uint new_cap, uint new_usg, uint new_plan, bool new_shared, LinkProperties &cargo) +/* static */ void LinkGraphOverlay::AddStats(CargoID new_cargo, uint new_cap, uint new_usg, uint new_plan, uint32 time, bool new_shared, LinkProperties &cargo) { /* multiply the numbers by 32 in order to avoid comparing to 0 too often. */ if (cargo.capacity == 0 || @@ -354,6 +356,7 @@ inline bool LinkGraphOverlay::IsLinkVisible(Point pta, Point ptb, const DrawPixe cargo.capacity = new_cap; cargo.usage = new_usg; cargo.planned = new_plan; + cargo.time = time; } if (new_shared) cargo.shared = true; } @@ -505,20 +508,35 @@ bool LinkGraphOverlay::ShowTooltip(Point pt, TooltipCloseCondition close_cond) check_distance()) { static char buf[1024]; + char *buf_end = buf; buf[0] = 0; /* Fill buf with more information if this is a bidirectional link. */ + uint32 back_time = 0; for (LinkList::const_reverse_iterator j = std::next(i); j != this->cached_links.rend(); ++j) { if (j->from_id == i->to_id && j->to_id == i->from_id) { + back_time = j->prop.time; if (j->prop.Usage() > 0) { SetDParam(0, j->prop.cargo); SetDParam(1, j->prop.Usage()); SetDParam(2, j->prop.Usage() * 100 / (j->prop.capacity + 1)); - GetString(buf, STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION, lastof(buf)); + buf_end = GetString(buf, STR_LINKGRAPH_STATS_TOOLTIP_RETURN_EXTENSION, lastof(buf)); } break; } } + /* Add information about the travel time if known. */ + const uint32 time = link.time ? (back_time ? ((link.time + back_time) / 2) : link.time) : back_time; + if (time > 0) { + if (_settings_time.time_in_minutes) { + SetDParam(0, STR_TIMETABLE_MINUTES); + SetDParam(1, time / _settings_time.ticks_per_minute); + buf_end = GetString(buf_end, STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION_GENERAL, lastof(buf)); + } else { + SetDParam(0, time / (DAY_TICKS * _settings_game.economy.day_length_factor)); + buf_end = GetString(buf_end, STR_LINKGRAPH_STATS_TOOLTIP_TIME_EXTENSION, lastof(buf)); + } + } SetDParam(0, link.cargo); SetDParam(1, link.Usage()); diff --git a/src/linkgraph/linkgraph_gui.h b/src/linkgraph/linkgraph_gui.h index a73b798045..61b74d2de5 100644 --- a/src/linkgraph/linkgraph_gui.h +++ b/src/linkgraph/linkgraph_gui.h @@ -23,7 +23,7 @@ * Only the cargo type of the most saturated linkgraph is taken into account. */ struct LinkProperties { - LinkProperties() : capacity(0), usage(0), planned(0), cargo(CT_INVALID), shared(false) {} + LinkProperties() : capacity(0), usage(0), planned(0), cargo(CT_INVALID), time(0), shared(false) {} /** Return the usage of the link to display. */ uint Usage() const { return std::max(this->usage, this->planned); } @@ -32,6 +32,7 @@ struct LinkProperties { uint usage; ///< Actual usage of the link. uint planned; ///< Planned usage of the link. CargoID cargo; ///< Cargo type of the link. + uint32 time; ///< Travel time of the link. bool shared; ///< If this is a shared link to be drawn dashed. }; @@ -112,7 +113,7 @@ protected: bool IsPointVisible(Point pt, const DrawPixelInfo *dpi, int padding = 0) const; void GetWidgetDpi(DrawPixelInfo *dpi, uint margin = 0) const; - static void AddStats(CargoID new_cargo, uint new_cap, uint new_usg, uint new_flow, bool new_shared, LinkProperties &cargo); + static void AddStats(CargoID new_cargo, uint new_cap, uint new_usg, uint new_plan, uint32 time, bool new_shared, LinkProperties &cargo); static void DrawVertex(int x, int y, int size, int colour, int border_colour); }; diff --git a/src/linkgraph/mcf.cpp b/src/linkgraph/mcf.cpp index 51a35838fe..bdf4761222 100644 --- a/src/linkgraph/mcf.cpp +++ b/src/linkgraph/mcf.cpp @@ -313,9 +313,7 @@ void MultiCommodityFlow::Dijkstra(NodeID source_node, PathVector &paths) /* Prioritize the fastest route for passengers, mail and express cargo, * and the shortest route for other classes of cargo. * In-between stops are punished with a 1 tile or 1 day penalty. */ - bool express = IsCargoInClass(this->job.Cargo(), CC_PASSENGERS) || - IsCargoInClass(this->job.Cargo(), CC_MAIL) || - IsCargoInClass(this->job.Cargo(), CC_EXPRESS); + bool express = IsLinkGraphCargoExpress(this->job.Cargo()); auto calculate_distance = [&]() { return DistanceMaxPlusManhattan(this->job[from].XY(), this->job[to].XY()) + 1; diff --git a/src/linkgraph/mcf.h b/src/linkgraph/mcf.h index 4ad598c574..0f43fca110 100644 --- a/src/linkgraph/mcf.h +++ b/src/linkgraph/mcf.h @@ -89,4 +89,11 @@ public: virtual ~MCFHandler() {} }; +inline bool IsLinkGraphCargoExpress(CargoID cargo) +{ + return IsCargoInClass(cargo, CC_PASSENGERS) || + IsCargoInClass(cargo, CC_MAIL) || + IsCargoInClass(cargo, CC_EXPRESS); +} + #endif /* MCF_H */