2025-07-11 02:35:28 +03:30
|
|
|
#include <app/application.hpp>
|
2025-07-26 18:01:27 +03:30
|
|
|
#include <app/system.hpp>
|
2021-07-01 19:25:46 +04:30
|
|
|
|
2025-07-26 18:01:27 +03:30
|
|
|
namespace lt::app {
|
2025-07-11 01:42:56 +03:30
|
|
|
|
2025-07-05 15:36:53 +03:30
|
|
|
void Application::game_loop()
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-26 18:01:27 +03:30
|
|
|
while (true)
|
2025-07-11 00:49:04 +03:30
|
|
|
{
|
2025-07-26 18:01:27 +03:30
|
|
|
for (auto &system : m_systems)
|
2025-07-06 17:23:28 +03:30
|
|
|
{
|
2025-09-22 18:51:51 +03:30
|
|
|
const auto &last_tick = system->get_last_tick_result();
|
|
|
|
|
const auto now = std::chrono::steady_clock::now();
|
|
|
|
|
|
|
|
|
|
system->tick(
|
|
|
|
|
TickInfo {
|
|
|
|
|
.delta_time = now - last_tick.end_time,
|
|
|
|
|
.budget = std::chrono::milliseconds { 10 },
|
|
|
|
|
.start_time = now,
|
|
|
|
|
}
|
|
|
|
|
);
|
2025-07-06 17:23:28 +03:30
|
|
|
}
|
2021-05-23 18:10:11 +04:30
|
|
|
|
2025-07-28 20:45:24 +03:30
|
|
|
for (auto &system : m_systems_to_be_registered)
|
|
|
|
|
{
|
|
|
|
|
m_systems.emplace_back(system)->on_register();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
for (auto &system : m_systems_to_be_unregistered)
|
2025-07-06 16:30:38 +03:30
|
|
|
{
|
2025-07-26 18:01:27 +03:30
|
|
|
m_systems.erase(
|
|
|
|
|
std::remove(m_systems.begin(), m_systems.end(), system),
|
|
|
|
|
m_systems.end()
|
|
|
|
|
);
|
2025-07-06 16:30:38 +03:30
|
|
|
}
|
2021-06-15 09:39:11 +04:30
|
|
|
|
2025-07-26 18:01:27 +03:30
|
|
|
if (m_systems.empty())
|
2025-07-06 16:30:38 +03:30
|
|
|
{
|
2022-03-07 21:57:00 +03:30
|
|
|
return;
|
2025-07-06 16:30:38 +03:30
|
|
|
}
|
|
|
|
|
}
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
|
|
|
|
|
2025-07-26 18:01:27 +03:30
|
|
|
void Application::register_system(Ref<app::ISystem> system)
|
2025-07-11 00:24:44 +03:30
|
|
|
{
|
2025-07-26 18:01:27 +03:30
|
|
|
m_systems.emplace_back(std::move(system));
|
2025-07-11 00:24:44 +03:30
|
|
|
}
|
|
|
|
|
|
2025-07-26 18:01:27 +03:30
|
|
|
void Application::unregister_system(Ref<app::ISystem> system)
|
2022-03-07 21:57:00 +03:30
|
|
|
{
|
2025-07-28 20:45:24 +03:30
|
|
|
m_systems_to_be_unregistered.emplace_back(std::move(system));
|
2022-03-07 21:57:00 +03:30
|
|
|
}
|
|
|
|
|
|
2025-07-26 18:01:27 +03:30
|
|
|
} // namespace lt::app
|