diff --git a/src/debug/logger.cpp b/src/debug/logger.cpp index 602a7c3..0c9922e 100644 --- a/src/debug/logger.cpp +++ b/src/debug/logger.cpp @@ -71,6 +71,7 @@ void logger::log(const std::string& text) message += "\n"; // Add message to log history + const std::lock_guard history_lock(history_mutex); history += message; // Output message diff --git a/src/debug/logger.hpp b/src/debug/logger.hpp index 3aed487..13905cf 100644 --- a/src/debug/logger.hpp +++ b/src/debug/logger.hpp @@ -24,6 +24,7 @@ #include #include #include +#include namespace debug { @@ -115,6 +116,7 @@ private: std::string success_postfix; std::stack tasks; std::string history; + std::mutex history_mutex; }; inline const std::string& logger::get_history() const diff --git a/src/game/bootloader.cpp b/src/game/bootloader.cpp index ab0f9ba..103846c 100644 --- a/src/game/bootloader.cpp +++ b/src/game/bootloader.cpp @@ -93,6 +93,8 @@ #include #include #include +#include +#include static constexpr double seconds_per_day = 24.0 * 60.0 * 60.0; @@ -992,6 +994,18 @@ void setup_callbacks(game::context* ctx) for (const auto& control: ctx->controls) control.second->update(); + // Update processes + std::for_each + ( + std::execution::par, + ctx->processes.begin(), + ctx->processes.end(), + [t, dt](const auto& process) + { + process.second(t, dt); + } + ); + // Update tweens ctx->time_tween->update(); ctx->surface_sky_pass->update_tweens(); @@ -1001,7 +1015,7 @@ void setup_callbacks(game::context* ctx) // Set time tween time (*ctx->time_tween)[1] = t; - + ctx->timeline->advance(dt); diff --git a/src/game/context.hpp b/src/game/context.hpp index 16f98b5..ef37874 100644 --- a/src/game/context.hpp +++ b/src/game/context.hpp @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include "resources/json.hpp" @@ -216,6 +217,9 @@ struct context input::mapper* input_mapper; input::listener* input_listener; std::unordered_map controls; + + // Parallel processes + std::unordered_map> processes; // Entities entity::registry* entity_registry;