From 3d857333c88a608a9001586813cb7e9bf314c42e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 2 Sep 2022 18:14:35 +0100 Subject: [PATCH] Reduce delays with company bankrupcty/sale processing at high day lengths --- src/company_cmd.cpp | 16 ++++++++++------ src/landscape.cpp | 2 -- src/openttd.cpp | 3 +++ 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/company_cmd.cpp b/src/company_cmd.cpp index c5548805c0..d558be37d1 100644 --- a/src/company_cmd.cpp +++ b/src/company_cmd.cpp @@ -737,14 +737,20 @@ static void HandleBankruptcyTakeover(Company *c) } /** Called every tick for updating some company info. */ -void OnTick_Companies() +void OnTick_Companies(bool main_tick) { if (_game_mode == GM_EDITOR) return; - Company *c = Company::GetIfValid(_cur_company_tick_index); - if (c != nullptr) { + if (main_tick) { + Company *c = Company::GetIfValid(_cur_company_tick_index); + if (c != nullptr) { + if (c->bankrupt_asked != 0) HandleBankruptcyTakeover(c); + } + _cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES; + } + for (Company *c : Company::Iterate()) { if (c->name_1 != 0) GenerateCompanyName(c); - if (c->bankrupt_asked != 0) HandleBankruptcyTakeover(c); + if (c->bankrupt_asked != 0 && c->bankrupt_timeout == 0) HandleBankruptcyTakeover(c); } if (_next_competitor_start == 0) { @@ -762,8 +768,6 @@ void OnTick_Companies() if (_networking) break; } while (AI::GetStartNextTime() == 0); } - - _cur_company_tick_index = (_cur_company_tick_index + 1) % MAX_COMPANIES; } /** diff --git a/src/landscape.cpp b/src/landscape.cpp index b99d416a04..6defd42241 100644 --- a/src/landscape.cpp +++ b/src/landscape.cpp @@ -1660,7 +1660,6 @@ void OnTick_Trees(); void OnTick_Station(); void OnTick_Industry(); -void OnTick_Companies(); void OnTick_LinkGraph(); void CallLandscapeTick() @@ -1674,6 +1673,5 @@ void CallLandscapeTick() OnTick_Industry(); } - OnTick_Companies(); OnTick_LinkGraph(); } diff --git a/src/openttd.cpp b/src/openttd.cpp index 1a2d6d6bae..5958e772a2 100644 --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -109,6 +109,7 @@ void MusicLoop(); void ResetMusic(); void CallWindowGameTickEvent(); bool HandleBootstrap(); +void OnTick_Companies(bool main_tick); extern void ShowOSErrorBox(const char *buf, bool system); extern std::string _config_file; @@ -1938,6 +1939,7 @@ void StateGameLoop() if (_tick_skip_counter < _settings_game.economy.day_length_factor) { AnimateAnimatedTiles(); CallVehicleTicks(); + OnTick_Companies(false); } else { _tick_skip_counter = 0; IncreaseDate(); @@ -1945,6 +1947,7 @@ void StateGameLoop() RunTileLoop(); CallVehicleTicks(); CallLandscapeTick(); + OnTick_Companies(true); } BasePersistentStorageArray::SwitchMode(PSM_LEAVE_GAMELOOP);