grafika-latest-working/EventHandler.h

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
};
}