#pragma once #include #include #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 mMouseAssignments; // egér-hozzárendelések std::multimap 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 }; }