68 lines
2.0 KiB
C++
68 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include <Windows.h>
|
|
#include <map>
|
|
#include "IHasDefault.h"
|
|
|
|
namespace eg3d {
|
|
|
|
class EventHandler;
|
|
|
|
// esemény-típusok
|
|
enum EventType { ET_KeyUp, ET_KeyDown, ET_LMouseDown, ET_LMouseUp, ET_RMouseDown, ET_RMouseUp, ET_MouseMove, ET_None };
|
|
|
|
// esemény-callback adat
|
|
struct EventHandlerCBData
|
|
{
|
|
EventHandler * pEH; // eseménykezelõ pointere
|
|
EventType eventType; // lenyomás vagy felengedés
|
|
void * pUser; // egyéb információ
|
|
int data[4]; // egyéb adat
|
|
|
|
HWND hwnd; // ablak fogantyúja
|
|
UINT message; // üzenet
|
|
WPARAM wParam; // ...
|
|
LPARAM lParam; // ...
|
|
};
|
|
|
|
typedef void (CB_EH)(EventHandlerCBData *); // callback-függvény típusa
|
|
|
|
struct CB_AssigmentData : public IHasDefault // hozzárendelési struktúra
|
|
{
|
|
EventType eventType; // esemény típusa, melyhez hozzárendelünk
|
|
CB_EH * pcbFunction; // callback-függvény pointere
|
|
void * pUser; // tetszõleges adat pointere
|
|
|
|
CB_AssigmentData(); // konstr.
|
|
void loadDefaults() override;
|
|
};
|
|
|
|
struct MouseDisplacement // egér-elmozdulás objektuma
|
|
{
|
|
int dx, dy;
|
|
};
|
|
|
|
class EventHandler {
|
|
private:
|
|
float mCamVelocity; // kamera mozgási sebessége
|
|
bool mMouseLocked; // lockolvan van az egér?
|
|
|
|
void init(); // osztály inicializálása
|
|
|
|
std::multimap<EventType, CB_AssigmentData> mMouseAssignments; // egér-hozzárendelések
|
|
std::multimap<char, CB_AssigmentData> mKeyAssigments; // billentyû-hozzárendelések
|
|
MouseDisplacement mMouseDisplacement; //
|
|
public:
|
|
static constexpr float cCAM_VELOCITY = 0.05;
|
|
|
|
EventHandler(); // konstr.
|
|
int processEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); // esemény feldolgozása (0 -> feldolgozva, 1 -> nincs feldolgozva)
|
|
float getCamVelocity() const; // kamera sebességének lekérése
|
|
|
|
void regKeyCB(char key, const CB_AssigmentData& cbAData); // billentyûesemények hozzárendelése
|
|
void regMouseCB(EventType et, const CB_AssigmentData& cbAData); // egéresemények hozzárendelése
|
|
MouseDisplacement getMouseDisplacement(); // egér elmozdulásának elkérése
|
|
};
|
|
|
|
}
|