diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index 4915d18d16..d5202bb8db 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -1707,20 +1707,12 @@ static void PopulateStationsNearby(Industry *ind) return; } - /* Get our list of nearby stations. */ - FindStationsAroundTiles(ind->location, &ind->stations_near, false, ind->index); - - /* Test if industry can accept cargo */ - uint cargo_index; - for (cargo_index = 0; cargo_index < lengthof(ind->accepts_cargo); cargo_index++) { - if (ind->accepts_cargo[cargo_index] != CT_INVALID) break; - } - if (cargo_index >= lengthof(ind->accepts_cargo)) return; - - /* Cargo is accepted, add industry to nearby stations nearby industry list. */ - for (Station *st : ind->stations_near) { - st->industries_near.insert(ind); - } + ForAllStationsAroundTiles(ind->location, [ind](Station *st, TileIndex tile) { + if (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != ind->index) return false; + ind->stations_near.insert(st); + st->AddIndustryToDeliver(ind); + return true; + }); } /** diff --git a/src/lang/korean.txt b/src/lang/korean.txt index cb9cbe8a7b..150b6754e0 100644 --- a/src/lang/korean.txt +++ b/src/lang/korean.txt @@ -945,6 +945,7 @@ STR_GAME_OPTIONS_CURRENCY_MXN :멕시코 페 STR_GAME_OPTIONS_CURRENCY_NTD :신 타이완 달러 (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :중국 위안 (CNY) STR_GAME_OPTIONS_CURRENCY_HKD :홍콩 달러 (HKD) +STR_GAME_OPTIONS_CURRENCY_INR :인도 루피 (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}차량 통행 방식 @@ -5115,16 +5116,16 @@ STR_PERCENT_NONE_SMALL :{TINY_FONT}{WHI STR_PERCENT_NONE :{WHITE}{NUM}% # Income 'floats' -STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED}가격: {CURRENCY_LONG} -STR_INCOME_FLOAT_COST :{RED}가격: {CURRENCY_LONG} +STR_INCOME_FLOAT_COST_SMALL :{TINY_FONT}{RED}지출: {CURRENCY_LONG} +STR_INCOME_FLOAT_COST :{RED}지출: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME_SMALL :{TINY_FONT}{GREEN}수익: {CURRENCY_LONG} STR_INCOME_FLOAT_INCOME :{GREEN}수익: {CURRENCY_LONG} STR_FEEDER_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG} STR_FEEDER :{YELLOW}환승: {CURRENCY_LONG} STR_FEEDER_INCOME_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {GREEN}수익: {CURRENCY_LONG} STR_FEEDER_INCOME :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {GREEN}수익: {CURRENCY_LONG} -STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}가격: {CURRENCY_LONG} -STR_FEEDER_COST :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}가격: {CURRENCY_LONG} +STR_FEEDER_COST_TINY :{TINY_FONT}{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}지출: {CURRENCY_LONG} +STR_FEEDER_COST :{YELLOW}환승: {CURRENCY_LONG}{WHITE} / {RED}지출: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_COST :{WHITE}예상 가격: {CURRENCY_LONG} STR_MESSAGE_ESTIMATED_INCOME :{WHITE}예상 수익: {CURRENCY_LONG} diff --git a/src/lang/latvian.txt b/src/lang/latvian.txt index 7ac70b60a4..78259df150 100644 --- a/src/lang/latvian.txt +++ b/src/lang/latvian.txt @@ -469,6 +469,7 @@ STR_TOOLBAR_SOUND_MUSIC :Skaņa/mūzika ############ range for message menu starts STR_NEWS_MENU_LAST_MESSAGE_NEWS_REPORT :Pēdējais ziņojums/avīzes raksts STR_NEWS_MENU_MESSAGE_HISTORY_MENU :Ziņojumu vēsture +STR_NEWS_MENU_DELETE_ALL_MESSAGES :Dzēst visus ziņojumus ############ range ends here ############ range for about menu starts @@ -670,6 +671,7 @@ STR_MUSIC_TOOLTIP_TOGGLE_PROGRAM_SHUFFLE :{BLACK}Ieslēgt STR_MUSIC_TOOLTIP_SHOW_MUSIC_TRACK_SELECTION :{BLACK}Rādīt mūzikas celiņu atlases logu # Playlist window +STR_PLAYLIST_MUSIC_SELECTION_SETNAME :{WHITE}Mūzikas programma - “{STRING}” STR_PLAYLIST_TRACK_NAME :{TINY_FONT}{LTBLUE}{ZEROFILL_NUM} "{STRING}" STR_PLAYLIST_TRACK_INDEX :{TINY_FONT}{BLACK}Celiņu rādītājs STR_PLAYLIST_PROGRAM :{TINY_FONT}{BLACK}Programma - '{STRING}' @@ -927,9 +929,11 @@ STR_GAME_OPTIONS_CURRENCY_ZAR :Dienvidāfrikas STR_GAME_OPTIONS_CURRENCY_CUSTOM :Cita... STR_GAME_OPTIONS_CURRENCY_GEL :Gruzijas lari (GEL) STR_GAME_OPTIONS_CURRENCY_IRR :Irānas riāli (IRR) +STR_GAME_OPTIONS_CURRENCY_RUB :Jaunais Krievijas rublis (RUB) STR_GAME_OPTIONS_CURRENCY_MXN :Meksikas peso (MXN) STR_GAME_OPTIONS_CURRENCY_NTD :Jaunais Taivānas dolārs (NTD) STR_GAME_OPTIONS_CURRENCY_CNY :Ķīnas juaņa (CNY) +STR_GAME_OPTIONS_CURRENCY_INR :Indijas rūpija (INR) ############ end of currency region STR_GAME_OPTIONS_ROAD_VEHICLES_FRAME :{BLACK}Autotransporta līdzekļi @@ -1128,6 +1132,7 @@ STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_MENU :Spēles iestat STR_CONFIG_SETTING_TYPE_DROPDOWN_GAME_INGAME :Spēles iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo spēli) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_MENU :Uzņēmuma iestatījumi (tiek iekļauti saglabājumos, ietekmē tikai jaunās spēles) STR_CONFIG_SETTING_TYPE_DROPDOWN_COMPANY_INGAME :Uzņēmuma iestatījumi (tiek iekļauti saglabājumā, ietekmē tikai pašreizējo uzņēmumu) +STR_CONFIG_SETTING_CATEGORY_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategoriju {BLACK}uz {WHITE}{STRING} STR_CONFIG_SETTING_CATEGORY_AND_TYPE_HIDES :{BLACK}Rādīt visus meklēšanas rezultātus, iestatot{}{SILVER}Kategorija {BLACK}uz {WHITE}{STRING} {BLACK}un {SILVER}Tips {BLACK}uz {WHITE}Visi iestatījumu veidi STR_CONFIG_SETTINGS_NONE :{WHITE}-Nav- @@ -1259,6 +1264,7 @@ STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE :Infrastruktūra STR_CONFIG_SETTING_INFRASTRUCTURE_MAINTENANCE_HELPTEXT :Kad ieslēgts, infrastruktūras uzturēšana nav bezmaksas. Izmaksas pieaug proporcionāli tīkla izmēram, tādā veidā tas ietekmē lielākus uzņēmumus vairāk kā mazus. STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR :Sākotnējā uzņēmuma krāsa: {STRING} +STR_CONFIG_SETTING_COMPANY_STARTING_COLOUR_HELPTEXT :Izvēlieties uzņēmuma sākotnējo krāsu STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS :Lidostas darbosies mūžīgi: {STRING} STR_CONFIG_SETTING_NEVER_EXPIRE_AIRPORTS_HELPTEXT :Ieslēdzot šo iestatījumu, katrs lidostas veids pēc tā ieviešanas vienmēr ir pieejams @@ -1294,6 +1300,7 @@ STR_CONFIG_SETTING_POPULATION_IN_LABEL_HELPTEXT :Rāda pilsētu STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS :Diagrammu līniju platums: {STRING} STR_CONFIG_SETTING_GRAPH_LINE_THICKNESS_HELPTEXT :Diagrammu līniju platums. Šauras līnijas ir precīzāk nolasāmas, platākas vieglāk saskatīt un atšķirt to krāsas STR_CONFIG_SETTING_SHOW_NEWGRF_NAME :Rādīt jauno NewGRF paplašinājumu nosaukumus uzbūvēto transportlīdzekļu logā: {STRING} +STR_CONFIG_SETTING_SHOW_NEWGRF_NAME_HELPTEXT :Uzbūvēto transportlīdzekļu loga pievienot rindu, kurā būtu redzams, no kura NewGRF nāk izvēlētais transportlīdzeklis. STR_CONFIG_SETTING_LANDSCAPE :Ainava: {STRING} STR_CONFIG_SETTING_LANDSCAPE_HELPTEXT :Ainavas nosaka pamata spēles scenārijus ar dažādām kravām un pilsētu izaugsmes nosacījumiem. NewGRF un spēles skripti dod smalkākas kontroles iespējas @@ -1344,6 +1351,7 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :{G=f}tumši za STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :{G=f}violeta STR_CONFIG_SETTING_SCROLLMODE :Skatvietas ritināšanas uzvedība: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Uzvedība, kad ritina karti +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Pārvietot skatvietu ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Pārvietot karti ar labo peles pogu, peles pozīcija ir fiksēta STR_CONFIG_SETTING_SCROLLMODE_LMB :Pārvietot karti ar kreiso peles pogu STR_CONFIG_SETTING_SMOOTH_SCROLLING :Plūdena skatvietas ritināšana: {STRING} @@ -1524,6 +1532,7 @@ STR_CONFIG_SETTING_NEWS_MESSAGES_FULL :pilns STR_CONFIG_SETTING_COLOURED_NEWS_YEAR :Krāsaini avīžu raksti parādās: {STRING} gadā STR_CONFIG_SETTING_COLOURED_NEWS_YEAR_HELPTEXT :Gads kad sāk drukāt krāsainas avīzes. Pirms šā gada tās ir melnbaltas STR_CONFIG_SETTING_STARTING_YEAR :Sākuma gads: {STRING} +STR_CONFIG_SETTING_ENDING_YEAR :Vērtēšanas beigu gads: {STRING} STR_CONFIG_SETTING_ENDING_YEAR_VALUE :{NUM} STR_CONFIG_SETTING_ENDING_YEAR_ZERO :Nekad STR_CONFIG_SETTING_SMOOTH_ECONOMY :Atļaut vienmērīgas izmaiņas ekonomikā: {STRING} @@ -1533,6 +1542,7 @@ STR_CONFIG_SETTING_ALLOW_SHARES_HELPTEXT :Ja iespējots, STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES :Minimālais uzņēmuma vecums, lai tirgotos ar akcijām: {STRING} STR_CONFIG_SETTING_MIN_YEARS_FOR_SHARES_HELPTEXT :Iestatīt minimālo uzņēmuma vecums, lai citi varētu pirkt un pārdod to akcijas. STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE :Procenti no kopējās peļņas, ko maksā tranzītstacijās: {STRING} +STR_CONFIG_SETTING_FEEDER_PAYMENT_SHARE_HELPTEXT :Procenti no ienākumiem, kas tiek doti starpposmiem padeves sistēmās, kas dod lielāku kontroli pār ienākumiem STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY :Velkot izvietot signālierīces uz katra: {STRING} STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_HELPTEXT :Iestatīt attālumus, kādos līdz nākamajam šķērslim (signālierīcei, dzelzceļa mezglam) uz ceļa tiks būvētas signālierīces, ja tās tiek vilktas STR_CONFIG_SETTING_DRAG_SIGNALS_DENSITY_VALUE :{COMMA} lauciņ{P 0 a a a} @@ -1548,6 +1558,7 @@ STR_CONFIG_SETTING_DEFAULT_SIGNAL_NORMAL :bloķēšanas s STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBS :ceļa signāli STR_CONFIG_SETTING_DEFAULT_SIGNAL_PBSOWAY :vienvirziena ceļa signāli STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES :Braukt garām signālu veidiem: {STRING} +STR_CONFIG_SETTING_CYCLE_SIGNAL_TYPES_HELPTEXT :Izvēlieties, caur kuriem signālu veidiem iet cauri, kad uz uzbūvētas signālierīces tiek veikts Ctrl+klikšķis ar signālu rīku STR_CONFIG_SETTING_CYCLE_SIGNAL_NORMAL :tikai bloķēšanas signāliem STR_CONFIG_SETTING_CYCLE_SIGNAL_PBS :tikai ceļa signāliem STR_CONFIG_SETTING_CYCLE_SIGNAL_ALL :visiem @@ -1570,6 +1581,7 @@ STR_CONFIG_SETTING_TOWN_FOUNDING_HELPTEXT :Šā iestatīju STR_CONFIG_SETTING_TOWN_FOUNDING_FORBIDDEN :aizliegta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED :atļauta STR_CONFIG_SETTING_TOWN_FOUNDING_ALLOWED_CUSTOM_LAYOUT :atļauta, ar brīvi izvēlētu izkārtojumu +STR_CONFIG_SETTING_TOWN_CARGOGENMODE :Pilsētas kravu radīšana: {STRING} STR_CONFIG_SETTING_TOWN_CARGOGENMODE_HELPTEXT :Cik daudz kravas rada pilsētu mājas, attiecībā pret kopējo pilsētas iedzīvotāju skaitu.{}Kvadrātisks pieaugums: divas reizes lielāka pilsēta rada četras reizes vairāk pasažieru.{}Lineārs pieaugums: divas reizes lielāka pilsēta rada divas reizes vairāk pasažieru. STR_CONFIG_SETTING_TOWN_CARGOGENMODE_ORIGINAL :Kvadrātisks (sākotnējais) STR_CONFIG_SETTING_TOWN_CARGOGENMODE_BITCOUNT :Lineārs @@ -1618,6 +1630,8 @@ STR_CONFIG_SETTING_CITY_SIZE_MULTIPLIER_HELPTEXT :Lielpilsētu vi STR_CONFIG_SETTING_LINKGRAPH_INTERVAL :Atjaunināt sadales grafu ik pa {STRING}{NBSP}dien{P 0:2 ai ām ām} STR_CONFIG_SETTING_LINKGRAPH_INTERVAL_HELPTEXT :Laiks starp secīgām saišu grafa pārrēķināšanām. Katra pārrēķināšana izskaitļo plānos vienai grafa komponentei. Tas nozīmē, ka šim iestatījumam vērtība X nenozīmē, ka viss grafs tiks atjaunināts ir pēc X dienām. Tikai dažas komponentes tiks pārrēķinātas. Jo mazāka iestatītā vērtība, jo vairāk laika CPU pavadīs rēķinot. Jo lielāka iestatītā vērtība, jo ilgāk nevarēs sākties kravu izplatīšana jaunos maršrutos. +STR_CONFIG_SETTING_LINKGRAPH_TIME :Dot {STRING}{NBSP}dien{P 0:2 u as u} izplatīšanas grafa pārrēķināšanai +STR_CONFIG_SETTING_LINKGRAPH_TIME_HELPTEXT :Laiks, ko aizņem katra saišu grafa komponenšu pārrēķināšana. Kad sākas pārrēķināšana, tiek izveidots pavediens, kuram ir atļauts darboties norādīto dienu skaitu. Jo īsāku skaitli šeit ievadīsiet, jo lielāka iespēja, ka pavediens nebūs laicīgi paveicis savu darbu. Tādā gadījumā spēle apstāsies (“iebremzēs”) līdz darbs būs pabeigts. Jo lielāku skaitli šeit iestatīsiet, jo ilgāk aizņems izplatīšanas atjaunināšana, kad tiks mainīti maršruti. STR_CONFIG_SETTING_DISTRIBUTION_MANUAL :manuāli STR_CONFIG_SETTING_DISTRIBUTION_ASYMMETRIC :asimetriska STR_CONFIG_SETTING_DISTRIBUTION_SYMMETRIC :simetriska @@ -1908,6 +1922,7 @@ STR_FACE_TIE_EARRING_TOOLTIP :{BLACK}Mainīt # Network server list STR_NETWORK_SERVER_LIST_CAPTION :{WHITE}Vairākspēlētāju spēle STR_NETWORK_SERVER_LIST_ADVERTISED :{BLACK}Izsludināt +STR_NETWORK_SERVER_LIST_ADVERTISED_TOOLTIP :{BLACK}Izvēlieties starp reklamēto (interneta) un nereklamēto (lokālā tīkla, LAN) spēli STR_NETWORK_SERVER_LIST_ADVERTISED_NO :Nē STR_NETWORK_SERVER_LIST_ADVERTISED_YES :Jā STR_NETWORK_SERVER_LIST_PLAYER_NAME :{BLACK}Spēlētāja vārds: @@ -2286,6 +2301,7 @@ STR_LINKGRAPH_LEGEND_CAPTION :{BLACK}Kravas p STR_LINKGRAPH_LEGEND_ALL :{BLACK}Visi STR_LINKGRAPH_LEGEND_NONE :{BLACK}Neviens STR_LINKGRAPH_LEGEND_SELECT_COMPANIES :{BLACK}Izvēlēties attēlojamos uzņēmumus +STR_LINKGRAPH_LEGEND_COMPANY_TOOLTIP :{BLACK}{STRING}{}{COMPANY} # Linkgraph legend window and linkgraph legend in smallmap STR_LINKGRAPH_LEGEND_UNUSED :{TINY_FONT}{BLACK}nelietots @@ -2598,6 +2614,7 @@ STR_LAND_AREA_INFORMATION_AIRPORTTILE_NAME :{BLACK}Lidostas STR_LAND_AREA_INFORMATION_NEWGRF_NAME :{BLACK}NewGRF: {LTBLUE}{STRING} STR_LAND_AREA_INFORMATION_CARGO_ACCEPTED :{BLACK}Pieņem kravu: {LTBLUE} STR_LAND_AREA_INFORMATION_CARGO_EIGHTS :({COMMA}/8 {STRING}) +STR_LANG_AREA_INFORMATION_RAIL_TYPE :{BLACK}Sliežu veids: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_ROAD_TYPE :{BLACK}Ceļu tips: {LTBLUE}{STRING} STR_LANG_AREA_INFORMATION_RAIL_SPEED_LIMIT :{BLACK}Sliežu ātruma ierobežojums: {LTBLUE}{VELOCITY} STR_LANG_AREA_INFORMATION_ROAD_SPEED_LIMIT :{BLACK}Ceļa ātruma ierobežojums: {LTBLUE}{VELOCITY} @@ -2720,6 +2737,7 @@ STR_FRAMERATE_FPS_WARN :{YELLOW}{DECIMA STR_FRAMERATE_FPS_BAD :{RED}{DECIMAL} kadri/s STR_FRAMERATE_BYTES_GOOD :{LTBLUE}{BYTES} STR_FRAMERATE_BYTES_WARN :{YELLOW}{BYTES} +STR_FRAMERATE_BYTES_BAD :{RED}{BYTES} STR_FRAMERATE_GRAPH_MILLISECONDS :{TINY_FONT}{COMMA} ms STR_FRAMERATE_GRAPH_SECONDS :{TINY_FONT}{COMMA} m ############ Leave those lines in this order!! @@ -3359,6 +3377,7 @@ STR_INDUSTRY_DIRECTORY_ITEM_NOPROD :{ORANGE}{INDUST STR_INDUSTRY_DIRECTORY_ITEM_PROD1 :{ORANGE}{INDUSTRY} {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD2 :{ORANGE}{INDUSTRY} {STRING}, {STRING} STR_INDUSTRY_DIRECTORY_ITEM_PROD3 :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} +STR_INDUSTRY_DIRECTORY_ITEM_PRODMORE :{ORANGE}{INDUSTRY} {STRING}, {STRING}, {STRING} un vēl {NUM}... STR_INDUSTRY_DIRECTORY_LIST_CAPTION :{BLACK}Ražotņu nosaukumi - klikšķināt uz nosaukuma, lai centrētu skatu uz ražotni. Ctrl+klikšķis atvērs jaunu skatvietu pie ražotnes STR_INDUSTRY_DIRECTORY_ACCEPTED_CARGO_FILTER :{BLACK}Pieņemamā krava: {SILVER}{STRING} STR_INDUSTRY_DIRECTORY_PRODUCED_CARGO_FILTER :{BLACK}Saražotā krava: {SILVER}{STRING} @@ -3479,6 +3498,7 @@ STR_PURCHASE_INFO_COST :{BLACK}Cena: {G STR_PURCHASE_INFO_COST_REFIT :{BLACK}Izmaksas: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas izmaksas: {GOLD}{CURRENCY_LONG}{BLACK}) STR_PURCHASE_INFO_WEIGHT_CWEIGHT :{BLACK}Svars: {GOLD}{WEIGHT_SHORT} ({WEIGHT_SHORT}) STR_PURCHASE_INFO_COST_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} Ātrums: {GOLD}{VELOCITY} +STR_PURCHASE_INFO_COST_REFIT_SPEED :{BLACK}Cena: {GOLD}{CURRENCY_LONG}{BLACK} (Pielāgošanas maksa: {GOLD}{CURRENCY_LONG}{BLACK}) Ātrums: {GOLD}{VELOCITY} STR_PURCHASE_INFO_AIRCRAFT_CAPACITY :{BLACK}Ietilpība: {GOLD}{CARGO_LONG}, {CARGO_LONG} STR_PURCHASE_INFO_PWAGPOWER_PWAGWEIGHT :{BLACK}Motorvagoni: {GOLD}+{POWER}zs{BLACK} Svars: {GOLD}+{WEIGHT_SHORT} STR_PURCHASE_INFO_REFITTABLE_TO :{BLACK}Pielāgojams uz: {GOLD}{STRING} @@ -3511,6 +3531,7 @@ STR_BUY_VEHICLE_AIRCRAFT_BUY_VEHICLE_TOOLTIP :{BLACK}Pirkt iz STR_BUY_VEHICLE_TRAIN_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto vilcienu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_ROAD_VEHICLE_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto ceļa transportlīdzekli. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi +STR_BUY_VEHICLE_SHIP_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto kuģi. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_AIRCRAFT_BUY_REFIT_VEHICLE_TOOLTIP :{BLACK}Pirkt un pielāgot izcelto lidaparātu. Shift+klikšķis parāda novērtētās izmaksas, neveicot iegādi STR_BUY_VEHICLE_TRAIN_RENAME_BUTTON :{BLACK}Pārdēvēt diff --git a/src/openttd.cpp b/src/openttd.cpp index fb46e99cb0..c912432ee8 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -1485,7 +1485,11 @@ void CheckCaches(bool force_check, std::function log) CCLOG("industry neutral station stations_near mismatch: ind %i, (recalc size: %u, neutral size: %u)", (int)ind->index, (uint)ind->stations_near.size(), (uint)stlist.size()); } } else { - FindStationsAroundTiles(ind->location, &stlist, false, ind->index); + ForAllStationsAroundTiles(ind->location, [ind, &stlist](Station *st, TileIndex tile) { + if (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != ind->index) return false; + stlist.insert(st); + return true; + }); if (ind->stations_near != stlist) { CCLOG("industry FindStationsAroundTiles mismatch: ind %i, (recalc size: %u, find size: %u)", (int)ind->index, (uint)ind->stations_near.size(), (uint)stlist.size()); } diff --git a/src/station.cpp b/src/station.cpp index c5abf2d68d..14cb18519d 100644 --- a/src/station.cpp +++ b/src/station.cpp @@ -378,12 +378,11 @@ bool Station::IsWithinRangeOfDockingTile(TileIndex tile, uint max_distance) cons /** * Add nearby industry to station's industries_near list if it accepts cargo. * @param ind Industry - * @param st Station */ -static void AddIndustryToDeliver(Industry *ind, Station *st) +void Station::AddIndustryToDeliver(Industry *ind) { /* Don't check further if this industry is already in the list */ - if (st->industries_near.find(ind) != st->industries_near.end()) return; + if (this->industries_near.find(ind) != this->industries_near.end()) return; /* Include only industries that can accept cargo */ uint cargo_index; @@ -392,7 +391,7 @@ static void AddIndustryToDeliver(Industry *ind, Station *st) } if (cargo_index >= lengthof(ind->accepts_cargo)) return; - st->industries_near.insert(ind); + this->industries_near.insert(ind); } /** @@ -483,7 +482,7 @@ void Station::RecomputeCatchment(bool no_clear_nearby_lists) i->stations_near.insert(this); /* Add if we can deliver to this industry as well */ - AddIndustryToDeliver(i, this); + this->AddIndustryToDeliver(i); } } } diff --git a/src/station_base.h b/src/station_base.h index bd5c01f2f7..4b20232054 100644 --- a/src/station_base.h +++ b/src/station_base.h @@ -833,6 +833,7 @@ public: } bool CatchmentCoversTown(TownID t) const; + void AddIndustryToDeliver(Industry *ind); void RemoveFromAllNearbyLists(); inline bool TileIsInCatchment(TileIndex tile) const @@ -889,4 +890,42 @@ public: void RebuildStationKdtree(); +/** + * Call a function on all stations that have any part of the requested area within their catchment. + * @tparam Func The type of funcion to call + * @param area The TileArea to check + * @param func The function to call, must take two parameters: Station* and TileIndex and return true + * if coverage of that tile is acceptable for a given station or false if search should continue + */ +template +void ForAllStationsAroundTiles(const TileArea &ta, Func func) +{ + /* Not using, or don't have a nearby stations list, so we need to scan. */ + btree::btree_set seen_stations; + + /* Scan an area around the building covering the maximum possible station + * to find the possible nearby stations. */ + uint max_c = _settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED; + max_c += _settings_game.station.catchment_increase; + TileArea ta_ext = TileArea(ta).Expand(max_c); + TILE_AREA_LOOP(tile, ta_ext) { + if (IsTileType(tile, MP_STATION)) seen_stations.insert(GetStationIndex(tile)); + } + + for (StationID stationid : seen_stations) { + Station *st = Station::GetIfValid(stationid); + if (st == nullptr) continue; /* Waypoint */ + + /* Check if station is attached to an industry */ + if (!_settings_game.station.serve_neutral_industries && st->industry != nullptr) continue; + + /* Test if the tile is within the station's catchment */ + TILE_AREA_LOOP(tile, ta) { + if (st->TileIsInCatchment(tile)) { + if (func(st, tile)) break; + } + } + } +} + #endif /* STATION_BASE_H */ diff --git a/src/station_cmd.cpp b/src/station_cmd.cpp index 27fc9bdaf7..ce1f76b41d 100644 --- a/src/station_cmd.cpp +++ b/src/station_cmd.cpp @@ -36,6 +36,7 @@ #include "animated_tile_func.h" #include "elrail_func.h" #include "station_base.h" +#include "station_func.h" #include "station_kdtree.h" #include "roadstop_base.h" #include "newgrf_railtype.h" @@ -4218,60 +4219,6 @@ static void AddNearbyStationsByCatchment(TileIndex tile, StationList *stations, } } -/** - * Find all stations around a rectangular producer (industry, house, headquarter, ...) - * - * @param location The location/area of the producer - * @param[out] stations The list to store the stations in - * @param use_nearby Use nearby station list of industry/town associated with location.tile - */ -void FindStationsAroundTiles(const TileArea &location, StationList * const stations, bool use_nearby, const IndustryID industry_filter) -{ - if (use_nearby) { - /* Industries and towns maintain a list of nearby stations */ - if (IsTileType(location.tile, MP_INDUSTRY)) { - /* Industry nearby stations are already filtered by catchment. */ - *stations = Industry::GetByTile(location.tile)->stations_near; - return; - } else if (IsTileType(location.tile, MP_HOUSE)) { - /* Town nearby stations need to be filtered per tile. */ - assert(location.w == 1 && location.h == 1); - AddNearbyStationsByCatchment(location.tile, stations, Town::GetByTile(location.tile)->stations_near); - return; - } - } - - /* Not using, or don't have a nearby stations list, so we need to scan. */ - - btree::btree_set seen_stations; - - /* Scan an area around the building covering the maximum possible station - * to find the possible nearby stations. */ - uint max_c = _settings_game.station.modified_catchment ? MAX_CATCHMENT : CA_UNMODIFIED; - max_c += _settings_game.station.catchment_increase; - TileArea ta = TileArea(location).Expand(max_c); - TILE_AREA_LOOP(tile, ta) { - if (IsTileType(tile, MP_STATION)) seen_stations.insert(GetStationIndex(tile)); - } - - for (StationID stationid : seen_stations) { - Station *st = Station::GetIfValid(stationid); - if (st == nullptr) continue; /* Waypoint */ - - /* Check if station is attached to an industry */ - if (!_settings_game.station.serve_neutral_industries && st->industry != nullptr) continue; - - /* Test if the tile is within the station's catchment */ - TILE_AREA_LOOP(tile, location) { - if (industry_filter != INVALID_INDUSTRY && (!IsTileType(tile, MP_INDUSTRY) || GetIndustryIndex(tile) != industry_filter)) continue; - if (st->TileIsInCatchment(tile)) { - stations->insert(st); - break; - } - } - } -} - /** * Run a tile loop to find stations around a tile, on demand. Cache the result for further requests * @return pointer to a StationList containing all stations found @@ -4279,12 +4226,22 @@ void FindStationsAroundTiles(const TileArea &location, StationList * const stati const StationList *StationFinder::GetStations() { if (this->tile != INVALID_TILE) { - FindStationsAroundTiles(*this, &this->stations); + if (IsTileType(this->tile, MP_HOUSE)) { + /* Town nearby stations need to be filtered per tile. */ + assert(this->w == 1 && this->h == 1); + AddNearbyStationsByCatchment(this->tile, &this->stations, Town::GetByTile(this->tile)->stations_near); + } else { + ForAllStationsAroundTiles(*this, [this](Station *st, TileIndex tile) { + this->stations.insert(st); + return true; + }); + } this->tile = INVALID_TILE; } return &this->stations; } + static bool CanMoveGoodsToStation(const Station *st, CargoID type) { /* Is the station reserved exclusively for somebody else? */ diff --git a/src/station_func.h b/src/station_func.h index 98376bf474..dc89428410 100644 --- a/src/station_func.h +++ b/src/station_func.h @@ -22,8 +22,6 @@ void ModifyStationRatingAround(TileIndex tile, Owner owner, int amount, uint radius); -void FindStationsAroundTiles(const TileArea &location, StationList *stations, bool use_nearby = true, IndustryID industry_filter = INVALID_INDUSTRY); - void ShowStationViewWindow(StationID station); void UpdateAllStationVirtCoords(); void ClearAllStationCachedNames(); diff --git a/src/station_gui.cpp b/src/station_gui.cpp index f36a873549..56910a91c5 100644 --- a/src/station_gui.cpp +++ b/src/station_gui.cpp @@ -105,7 +105,7 @@ static void FindStationsAroundSelection() Station *adjacent = nullptr; - /* Direct loop instead of FindStationsAroundTiles as we are not interested in catchment area */ + /* Direct loop instead of ForAllStationsAroundTiles as we are not interested in catchment area */ TILE_AREA_LOOP(tile, ta) { if (IsTileType(tile, MP_STATION) && GetTileOwner(tile) == _local_company) { Station *st = Station::GetByTile(tile); diff --git a/src/town_cmd.cpp b/src/town_cmd.cpp index 359761fd8b..a57a83dd90 100644 --- a/src/town_cmd.cpp +++ b/src/town_cmd.cpp @@ -2484,7 +2484,12 @@ static void MakeTownHouse(TileIndex t, Town *town, byte counter, byte stage, Hou if (size & BUILDING_2_TILES_X) ClearMakeHouseTile(t + TileDiffXY(1, 0), town, counter, stage, ++type, random_bits); if (size & BUILDING_HAS_4_TILES) ClearMakeHouseTile(t + TileDiffXY(1, 1), town, counter, stage, ++type, random_bits); - if (!_generating_world) FindStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), &town->stations_near, false); + if (!_generating_world) { + ForAllStationsAroundTiles(TileArea(t, (size & BUILDING_2_TILES_X) ? 2 : 1, (size & BUILDING_2_TILES_Y) ? 2 : 1), [town](Station *st, TileIndex tile) { + town->stations_near.insert(st); + return true; + }); + } }