56 lines
1.3 KiB
C++
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);
|
|
};
|