#pragma once #include "../interfaces/i_application_loop_service.hpp" #include "../interfaces/i_audio_service.hpp" #include "../interfaces/i_crash_recovery_service.hpp" #include "../interfaces/i_input_service.hpp" #include "../interfaces/i_logger.hpp" #include "../interfaces/i_physics_service.hpp" #include "../interfaces/i_render_coordinator_service.hpp" #include "../interfaces/i_scene_service.hpp" #include "../interfaces/i_window_service.hpp" #include "../../events/i_event_bus.hpp" #include namespace sdl3cpp::services::impl { class ApplicationLoopService : public IApplicationLoopService { public: ApplicationLoopService(std::shared_ptr logger, std::shared_ptr windowService, std::shared_ptr eventBus, std::shared_ptr inputService, std::shared_ptr physicsService, std::shared_ptr sceneService, std::shared_ptr renderCoordinatorService, std::shared_ptr audioService, std::shared_ptr crashRecoveryService); ~ApplicationLoopService() override = default; void Run() override; private: void HandleEvents(); void ProcessFrame(float deltaTime, float elapsedTime); std::shared_ptr logger_; std::shared_ptr windowService_; std::shared_ptr eventBus_; std::shared_ptr inputService_; std::shared_ptr physicsService_; std::shared_ptr sceneService_; std::shared_ptr renderCoordinatorService_; std::shared_ptr audioService_; std::shared_ptr crashRecoveryService_; bool running_ = false; double lastMemoryCheckSeconds_ = 0.0; double memoryCheckIntervalSeconds_ = 1.0; }; } // namespace sdl3cpp::services::impl