observations-on-the-sublime.../src/events/EventManager.h

56 lines
1.3 KiB
C++

#pragma once
#include "../core/Common.h"
#include <functional>
#include <unordered_map>
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(const EventData&)>;
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<EventType, EventCallback> 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);
};