Files
SDL3CPlusPlus/src/services/impl/application_loop_service.hpp

51 lines
2.1 KiB
C++

#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 <memory>
namespace sdl3cpp::services::impl {
class ApplicationLoopService : public IApplicationLoopService {
public:
ApplicationLoopService(std::shared_ptr<ILogger> logger,
std::shared_ptr<IWindowService> windowService,
std::shared_ptr<events::IEventBus> eventBus,
std::shared_ptr<IInputService> inputService,
std::shared_ptr<IPhysicsService> physicsService,
std::shared_ptr<ISceneService> sceneService,
std::shared_ptr<IRenderCoordinatorService> renderCoordinatorService,
std::shared_ptr<IAudioService> audioService,
std::shared_ptr<ICrashRecoveryService> crashRecoveryService);
~ApplicationLoopService() override = default;
void Run() override;
private:
void HandleEvents();
void ProcessFrame(float deltaTime, float elapsedTime);
std::shared_ptr<ILogger> logger_;
std::shared_ptr<IWindowService> windowService_;
std::shared_ptr<events::IEventBus> eventBus_;
std::shared_ptr<IInputService> inputService_;
std::shared_ptr<IPhysicsService> physicsService_;
std::shared_ptr<ISceneService> sceneService_;
std::shared_ptr<IRenderCoordinatorService> renderCoordinatorService_;
std::shared_ptr<IAudioService> audioService_;
std::shared_ptr<ICrashRecoveryService> crashRecoveryService_;
bool running_ = false;
double lastMemoryCheckSeconds_ = 0.0;
double memoryCheckIntervalSeconds_ = 1.0;
};
} // namespace sdl3cpp::services::impl