#pragma once #include #include #include "IHasDefault.h" #include 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 mMouseAssignments; // egér-hozzárendelések std::multimap mKeyAssignments; // billentyű-hozzárendelések MouseDisplacement mMouseDisplacement; // std::set 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 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 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 }; }