#pragma once #include "../core/Common.h" #include #include class ParticleManager; enum class EventType { Quit, KeyDown, KeyUp, MouseMove, MouseButtonDown, MouseButtonUp, WindowEvent }; struct EventData { EventType type; SDL_Event sdlEvent; }; class EventManager { public: EventManager(); ~EventManager() = default; // Event handling bool pollEvents(); bool isRunning() const { return running_; } void stop() { running_ = false; } // Event callbacks using EventCallback = std::function; void registerCallback(EventType type, EventCallback callback); void unregisterCallback(EventType type); // Particle management void setParticleManager(ParticleManager* manager); // Event processing void processEvent(const SDL_Event& event); private: bool running_; std::unordered_map callbacks_; ParticleManager* particleManager_; void handleQuitEvent(); void handleKeyEvent(const SDL_Event& event); void handleMouseEvent(const SDL_Event& event); void handleWindowEvent(const SDL_Event& event); void onMouseButtonDown(const EventData& event); void onMouseButtonUp(const EventData& event); void onMouseMove(const EventData& event); };