diff --git a/.github/workflows/ci-build.yml b/.github/workflows/ci-build.yml index 0a97098251..0f9ddf9ff3 100644 --- a/.github/workflows/ci-build.yml +++ b/.github/workflows/ci-build.yml @@ -66,10 +66,15 @@ jobs: fail-fast: false matrix: include: - - compiler: clang - cxxcompiler: clang++ - - compiler: gcc - cxxcompiler: g++ + - compiler: clang + cxxcompiler: clang++ + libsdl: libsdl2-dev + - compiler: gcc + cxxcompiler: g++ + libsdl: libsdl2-dev + - compiler: gcc + cxxcompiler: g++ + libsdl: libsdl1.2-dev runs-on: ubuntu-20.04 env: @@ -93,7 +98,7 @@ jobs: libicu-dev \ liblzma-dev \ liblzo2-dev \ - libsdl2-dev \ + ${{ matrix.libsdl }} \ zlib1g-dev \ # EOF echo "::endgroup::" diff --git a/src/genworld_gui.cpp b/src/genworld_gui.cpp index 58cc6a4c2d..27c53dc2a0 100644 --- a/src/genworld_gui.cpp +++ b/src/genworld_gui.cpp @@ -1244,7 +1244,7 @@ struct GenWorldStatus { StringID cls; uint current; uint total; - std::chrono::steady_clock::time_point timer; + std::chrono::steady_clock::time_point next_update; }; static GenWorldStatus _gws; @@ -1346,11 +1346,11 @@ struct GenerateProgressWindow : public Window { */ void PrepareGenerateWorldProgress() { - _gws.cls = STR_GENERATION_WORLD_GENERATION; + _gws.cls = STR_GENERATION_WORLD_GENERATION; _gws.current = 0; - _gws.total = 0; + _gws.total = 0; _gws.percent = 0; - _gws.timer = std::chrono::steady_clock::now() - std::chrono::milliseconds(MODAL_PROGRESS_REDRAW_TIMEOUT * 2); // Ensure we draw on first update + _gws.next_update = std::chrono::steady_clock::now(); } /** @@ -1385,7 +1385,8 @@ static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uin } /* Don't update the screen too often. So update it once in every once in a while... */ - if (!_network_dedicated && std::chrono::steady_clock::now() - _gws.timer < std::chrono::milliseconds(MODAL_PROGRESS_REDRAW_TIMEOUT)) return; + if (!_network_dedicated && std::chrono::steady_clock::now() < _gws.next_update) return; + _gws.next_update = std::chrono::steady_clock::now() + std::chrono::milliseconds(MODAL_PROGRESS_REDRAW_TIMEOUT); /* Percentage is about the number of completed tasks, so 'current - 1' */ _gws.percent = percent_table[cls] + (percent_table[cls + 1] - percent_table[cls]) * (_gws.current == 0 ? 0 : _gws.current - 1) / _gws.total; @@ -1420,8 +1421,6 @@ static void _SetGeneratingWorldProgress(GenWorldProgress cls, uint progress, uin _modal_progress_paint_mutex.lock(); _modal_progress_work_mutex.lock(); _modal_progress_paint_mutex.unlock(); - - _gws.timer = std::chrono::steady_clock::now(); } /** diff --git a/src/lang/catalan.txt b/src/lang/catalan.txt index c2ca2a68a1..5a45af7750 100644 --- a/src/lang/catalan.txt +++ b/src/lang/catalan.txt @@ -2849,6 +2849,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Cadena de filtre: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobreescriu fitxer STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}Esteu segur que voleu sobreescriure el fitxer? +STR_SAVELOAD_DIRECTORY :{STRING} (carpeta) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (carpeta superior) STR_SAVELOAD_OSKTITLE :{BLACK}Posa el nom amb què desar la partida actual diff --git a/src/lang/german.txt b/src/lang/german.txt index dd1e6f7ae2..bbba4c6277 100644 --- a/src/lang/german.txt +++ b/src/lang/german.txt @@ -706,7 +706,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Klicken STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Beste Firmen, die {NUM} erreichten STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Firmentabelle in {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Geschäftsmann +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Geschäftsperson STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Unternehmer STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrieller STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Kapitalist diff --git a/src/lang/russian.txt b/src/lang/russian.txt index 476947683b..24e519dbf6 100644 --- a/src/lang/russian.txt +++ b/src/lang/russian.txt @@ -1129,11 +1129,11 @@ STR_GAME_OPTIONS_AUTOSAVE_FRAME :{BLACK}Авто STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_TOOLTIP :{BLACK}Интервал автосохранения игры ############ start of autosave dropdown -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :Отключено -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :Каждый месяц -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_3_MONTHS :Каждые 3 месяца -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_6_MONTHS :Каждые 6 месяцев -STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :Каждый год +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_OFF :отключено +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_1_MONTH :каждый месяц +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_3_MONTHS :каждые 3 месяца +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_6_MONTHS :каждые 6 месяцев +STR_GAME_OPTIONS_AUTOSAVE_DROPDOWN_EVERY_12_MONTHS :каждый год ############ end of autosave dropdown STR_GAME_OPTIONS_LANGUAGE :{BLACK}Язык @@ -1149,6 +1149,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :Другое STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Размер элементов интерфейса STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Выберите размер элементов интерфейса +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(Автовыбор) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Обычный STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Удвоенный STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Учетверённый @@ -1156,6 +1157,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Учетвер STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Размер шрифта STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Выберите размер шрифта, используемого в игре +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(Автовыбор) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Нормальный STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Двукратный STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Четырёхкратный @@ -1526,10 +1528,10 @@ STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_DARK_GREEN :тёмно-зе STR_CONFIG_SETTING_SMALLMAP_LAND_COLOUR_VIOLET :фиолетовый STR_CONFIG_SETTING_SCROLLMODE :Перемещение обзора: {STRING} STR_CONFIG_SETTING_SCROLLMODE_HELPTEXT :Способ перемещения по игровому полю -STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :Перемещать с помощью ПКМ, зафиксировав курсор -STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :Перемещать с помощью ПКМ, зафиксировав курсор -STR_CONFIG_SETTING_SCROLLMODE_RMB :Перемещать с помощью ПКМ -STR_CONFIG_SETTING_SCROLLMODE_LMB :Перемещать с помощью ЛКМ +STR_CONFIG_SETTING_SCROLLMODE_DEFAULT :перемещать обзор с помощью ПКМ, зафиксировав курсор +STR_CONFIG_SETTING_SCROLLMODE_RMB_LOCKED :перемещать карту с помощью ПКМ, зафиксировав курсор +STR_CONFIG_SETTING_SCROLLMODE_RMB :перемещать с помощью ПКМ +STR_CONFIG_SETTING_SCROLLMODE_LMB :перемещать с помощью ЛКМ STR_CONFIG_SETTING_SMOOTH_SCROLLING :Плавное перемещение: {STRING} STR_CONFIG_SETTING_SMOOTH_SCROLLING_HELPTEXT :Настройка перемещения обзора в основном окне при щелчке по миникарте или по команде обзора какого-нибудь объекта. Если включено, то обзор смещается плавно; если отключено - то мгновенно. STR_CONFIG_SETTING_MEASURE_TOOLTIP :Показывать замеры при строительстве: {STRING} diff --git a/src/lang/spanish.txt b/src/lang/spanish.txt index 6ce5a7a9d3..d2f0768ae3 100644 --- a/src/lang/spanish.txt +++ b/src/lang/spanish.txt @@ -614,7 +614,7 @@ STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TRANSPORT_COORDINATOR :Coordinador de STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_ROUTE_SUPERVISOR :Supervisor de ruta STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_DIRECTOR :Directivo STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHIEF_EXECUTIVE :Subdirector -STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Director +STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_CHAIRMAN :Consejero delegado STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_PRESIDENT :Presidente STR_COMPANY_LEAGUE_PERFORMANCE_TITLE_TYCOON :Magnate @@ -697,7 +697,7 @@ STR_PLAYLIST_TOOLTIP_CLICK_TO_REMOVE_TRACK :{BLACK}Pulsa so STR_HIGHSCORE_TOP_COMPANIES_WHO_REACHED :{BIG_FONT}{BLACK}Top de empresas que han alcanzado {NUM} STR_HIGHSCORE_TOP_COMPANIES_NETWORK_GAME :{BIG_FONT}{BLACK}Tabla clasificatoria de empresas en {NUM} STR_HIGHSCORE_POSITION :{BIG_FONT}{BLACK}{COMMA}. -STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Hombre de negocios +STR_HIGHSCORE_PERFORMANCE_TITLE_BUSINESSMAN :Persona de negocios STR_HIGHSCORE_PERFORMANCE_TITLE_ENTREPRENEUR :Empresario STR_HIGHSCORE_PERFORMANCE_TITLE_INDUSTRIALIST :Industrial STR_HIGHSCORE_PERFORMANCE_TITLE_CAPITALIST :Capitalista @@ -749,6 +749,7 @@ STR_SMALLMAP_LEGENDA_DOCK :{TINY_FONT}{BLA STR_SMALLMAP_LEGENDA_ROUGH_LAND :{TINY_FONT}{BLACK}Terreno agreste STR_SMALLMAP_LEGENDA_GRASS_LAND :{TINY_FONT}{BLACK}Terreno de prados STR_SMALLMAP_LEGENDA_BARE_LAND :{TINY_FONT}{BLACK}Terreno árido +STR_SMALLMAP_LEGENDA_RAINFOREST :{TINY_FONT}{BLACK}Selva tropical STR_SMALLMAP_LEGENDA_FIELDS :{TINY_FONT}{BLACK}Campos STR_SMALLMAP_LEGENDA_TREES :{TINY_FONT}{BLACK}Árboles STR_SMALLMAP_LEGENDA_ROCKS :{TINY_FONT}{BLACK}Rocas @@ -1003,6 +1004,7 @@ STR_GAME_OPTIONS_RESOLUTION_OTHER :Otras STR_GAME_OPTIONS_GUI_ZOOM_FRAME :{BLACK}Tamaño de la interfaz STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Elige el tamaño de los elementos de la interfaz a usar +STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_AUTO :(detecta automáticamente) STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_2X_ZOOM :Tamaño doble STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaño cuádruple @@ -1010,6 +1012,7 @@ STR_GAME_OPTIONS_GUI_ZOOM_DROPDOWN_4X_ZOOM :Tamaño cuádru STR_GAME_OPTIONS_FONT_ZOOM :{BLACK}Tamaño de letra STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_TOOLTIP :{BLACK}Selecciona el tamaño de letra a utilizar en la interfaz +STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_AUTO :(detecta automáticamente) STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_NORMAL :Normal STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_2X_ZOOM :Tamaño doble STR_GAME_OPTIONS_FONT_ZOOM_DROPDOWN_4X_ZOOM :Tamaño cuádruple @@ -2604,12 +2607,18 @@ STR_FOUND_TOWN_SELECT_LAYOUT_RANDOM :{BLACK}Aleatori # Fund new industry window STR_FUND_INDUSTRY_CAPTION :{WHITE}Fundar nueva industria STR_FUND_INDUSTRY_SELECTION_TOOLTIP :{BLACK}Seleccione la industria apropiada de la lista -STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :Varias industrias al azar +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES :{BLACK}Crear industrias al azar STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_TOOLTIP :{BLACK}Cubre el mapa con industrias colocadas al azar +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_CAPTION :{WHITE}Crear industrias al azar +STR_FUND_INDUSTRY_MANY_RANDOM_INDUSTRIES_QUERY :{YELLOW}¿Seguro que desea crear industrias al azar? STR_FUND_INDUSTRY_INDUSTRY_BUILD_COST :{BLACK}Coste: {YELLOW}{CURRENCY_LONG} STR_FUND_INDUSTRY_PROSPECT_NEW_INDUSTRY :{BLACK}Prospección STR_FUND_INDUSTRY_BUILD_NEW_INDUSTRY :{BLACK}Construir STR_FUND_INDUSTRY_FUND_NEW_INDUSTRY :{BLACK}Fundar +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES :{BLACK}Eliminar todas las industrias +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_TOOLTIP :{BLACK}Eliminar todas las industrias que haya en el mapa +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_CAPTION :{WHITE}Eliminar todas las industrias +STR_FUND_INDUSTRY_REMOVE_ALL_INDUSTRIES_QUERY :{YELLOW}¿Seguro que desea eliminar todas las industrias? # Industry cargoes window STR_INDUSTRY_CARGOES_INDUSTRY_CAPTION :{WHITE}Cadena de industrias para la industria {STRING} @@ -2840,6 +2849,8 @@ STR_SAVELOAD_DETAIL_GRFSTATUS :{SILVER}NewGRF: STR_SAVELOAD_FILTER_TITLE :{BLACK}Patrón de filtrado: STR_SAVELOAD_OVERWRITE_TITLE :{WHITE}Sobrescribir Archivo STR_SAVELOAD_OVERWRITE_WARNING :{YELLOW}¿Está seguro de querer sobrescribir el archivo existente? +STR_SAVELOAD_DIRECTORY :{STRING} (Directorio) +STR_SAVELOAD_PARENT_DIRECTORY :{STRING} (Directorio superior) STR_SAVELOAD_OSKTITLE :{BLACK}Introduce un nombre para el juego guardado diff --git a/src/newgrf_config.cpp b/src/newgrf_config.cpp index 2b6bcb40ce..61d81eee0b 100644 --- a/src/newgrf_config.cpp +++ b/src/newgrf_config.cpp @@ -668,18 +668,14 @@ compatible_grf: /** Helper for scanning for files with GRF as extension */ class GRFFileScanner : FileScanner { - uint next_update; ///< The next (realtime tick) we do update the screen. + std::chrono::steady_clock::time_point next_update; ///< The next moment we do update the screen. uint num_scanned; ///< The number of GRFs we have scanned. std::vector grfs; public: GRFFileScanner() : num_scanned(0) { -#if defined(__GNUC__) || defined(__clang__) - this->next_update = __atomic_load_n(&_realtime_tick, __ATOMIC_RELAXED); -#else - this->next_update = _realtime_tick; -#endif + this->next_update = std::chrono::steady_clock::now(); } bool AddFile(const std::string &filename, size_t basepath_length, const std::string &tar_filename) override; @@ -740,12 +736,10 @@ bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length } this->num_scanned++; -#if defined(__GNUC__) || defined(__clang__) - const uint32 now = __atomic_load_n(&_realtime_tick, __ATOMIC_RELAXED); -#else - const uint32 now = _realtime_tick; -#endif - if (this->next_update <= now) { + const auto now = std::chrono::steady_clock::now(); + if (now >= this->next_update) { + this->next_update = now + std::chrono::milliseconds(MODAL_PROGRESS_REDRAW_TIMEOUT); + _modal_progress_work_mutex.unlock(); _modal_progress_paint_mutex.lock(); @@ -756,8 +750,6 @@ bool GRFFileScanner::AddFile(const std::string &filename, size_t basepath_length _modal_progress_work_mutex.lock(); _modal_progress_paint_mutex.unlock(); - - this->next_update = now + MODAL_PROGRESS_REDRAW_TIMEOUT; } if (!added) {