73 lines
2.4 KiB
C++
73 lines
2.4 KiB
C++
#pragma once
|
|
|
|
#include <Windows.h>
|
|
#include <map>
|
|
#include "IHasDefault.h"
|
|
#include <set>
|
|
|
|
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_AssignmentData : 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_AssignmentData(); // konstr.
|
|
void loadDefaults() override;
|
|
};
|
|
|
|
struct MouseDisplacement // egér-elmozdulás objektuma
|
|
{
|
|
int dx, dy;
|
|
};
|
|
|
|
class EventHandler {
|
|
private:
|
|
bool mMouseLocked; // lockolvan van az egér?
|
|
|
|
void init(); // osztály inicializálása
|
|
|
|
std::multimap<EventType, CB_AssignmentData> mMouseAssignments; // egér-hozzárendelések
|
|
std::multimap<char, CB_AssignmentData> mKeyAssignments; // billentyû-hozzárendelések
|
|
MouseDisplacement mMouseDisplacement; //
|
|
|
|
std::set<WPARAM> mPressedKeySet; // a lenyomott billentyûket tárolja
|
|
public:
|
|
static constexpr float cCAM_VELOCITY = 0.05f;
|
|
|
|
EventHandler(); // konstr.
|
|
int processEvent(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam); // esemény feldolgozása (0 -> feldolgozva, 1 -> nincs feldolgozva)
|
|
|
|
void regKeyCB(char key, const CB_AssignmentData& cbAData); // billentyûesemények hozzárendelése
|
|
void regKeyCB(char key, CB_EH * pcbFunction, void * pUser, std::initializer_list<EventType> eventTypes); // feliratkozás több eseményre
|
|
void regMouseCB(const CB_AssignmentData& cbAData); // egéresemények hozzárendelése
|
|
void regMouseCB(CB_EH * pcbFunction, void * pUser, std::initializer_list<EventType> eventTypes); // egéresemények hozzárendelése
|
|
MouseDisplacement getMouseDisplacement(); // egér elmozdulásának elkérése
|
|
bool isMouseLocked() const; // lekéri, hogy lockolva van-e az egér
|
|
bool isKeyPressed(WPARAM vkey) const; // lekéri, hogy az adott billentyû le van-e nyomva
|
|
};
|
|
|
|
}
|