From 01f55eb73424a8ca068219e94341d40ef8f3f1a5 Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sat, 12 Aug 2023 16:02:11 +0200 Subject: [PATCH] Codechange: introduce week/quarter triggers for TimerGameCalendar (#11189) This simplifies code that triggers on these periods. --- src/network/network_server.cpp | 19 +++++++++++++++++-- src/timer/timer_game_calendar.cpp | 12 ++++++++++++ src/timer/timer_game_calendar.h | 2 ++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/src/network/network_server.cpp b/src/network/network_server.cpp index ad87c21835..24c6537530 100644 --- a/src/network/network_server.cpp +++ b/src/network/network_server.cpp @@ -1822,6 +1822,15 @@ static IntervalTimer _network_yearly({TimerGameCalendar::YEAR NetworkAdminUpdate(ADMIN_FREQUENCY_ANUALLY); }); +/** Quarterly "callback". Called whenever the quarter changes. */ +static IntervalTimer _network_quarterly({TimerGameCalendar::QUARTER, TimerGameCalendar::Priority::NONE}, [](auto) +{ + if (!_network_server) return; + + NetworkAutoCleanCompanies(); + NetworkAdminUpdate(ADMIN_FREQUENCY_QUARTERLY); +}); + /** Monthly "callback". Called whenever the month changes. */ static IntervalTimer _network_monthly({TimerGameCalendar::MONTH, TimerGameCalendar::Priority::NONE}, [](auto) { @@ -1829,7 +1838,14 @@ static IntervalTimer _network_monthly({TimerGameCalendar::MON NetworkAutoCleanCompanies(); NetworkAdminUpdate(ADMIN_FREQUENCY_MONTHLY); - if ((TimerGameCalendar::month % 3) == 0) NetworkAdminUpdate(ADMIN_FREQUENCY_QUARTERLY); +}); + +/** Weekly "callback". Called whenever the week changes. */ +static IntervalTimer _network_weekly({TimerGameCalendar::WEEK, TimerGameCalendar::Priority::NONE}, [](auto) +{ + if (!_network_server) return; + + NetworkAdminUpdate(ADMIN_FREQUENCY_WEEKLY); }); /** Daily "callback". Called whenever the date changes. */ @@ -1838,7 +1854,6 @@ static IntervalTimer _network_daily({TimerGameCalendar::DAY, if (!_network_server) return; NetworkAdminUpdate(ADMIN_FREQUENCY_DAILY); - if ((TimerGameCalendar::date % 7) == 3) NetworkAdminUpdate(ADMIN_FREQUENCY_WEEKLY); }); /** diff --git a/src/timer/timer_game_calendar.cpp b/src/timer/timer_game_calendar.cpp index f7e5707354..8174f9a1b4 100644 --- a/src/timer/timer_game_calendar.cpp +++ b/src/timer/timer_game_calendar.cpp @@ -215,10 +215,22 @@ void TimerManager::Elapsed(TimerGameCalendar::TElapsed delta) timer->Elapsed(TimerGameCalendar::DAY); } + if ((TimerGameCalendar::date % 7) == 3) { + for (auto timer : timers) { + timer->Elapsed(TimerGameCalendar::WEEK); + } + } + if (new_month) { for (auto timer : timers) { timer->Elapsed(TimerGameCalendar::MONTH); } + + if ((TimerGameCalendar::month % 3) == 0) { + for (auto timer : timers) { + timer->Elapsed(TimerGameCalendar::QUARTER); + } + } } if (new_year) { diff --git a/src/timer/timer_game_calendar.h b/src/timer/timer_game_calendar.h index b1e8448daf..ddb8a62342 100644 --- a/src/timer/timer_game_calendar.h +++ b/src/timer/timer_game_calendar.h @@ -34,7 +34,9 @@ class TimerGameCalendar { public: enum Trigger { DAY, + WEEK, MONTH, + QUARTER, YEAR, }; enum Priority {