Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef INPUTHANDLER_H
- #define INPUTHANDLER_H
- #include "../defines.h"
- enum
- {
- MOUSE_DOWN,
- MOUSE_UP,
- BUTTON_DOWN,
- BUTTON_UP
- };
- class InputHandler
- {
- public:
- InputHandler() {}
- virtual ~InputHandler() {}
- void PassEventHandler(SDL_Event ev)
- {
- SDL_GetMouseState(&x,&y);
- while (SDL_PollEvent(&ev))
- {
- switch (ev.type)
- {
- case SDL_QUIT:
- eFunc();
- break;
- case SDL_KEYDOWN:
- if (ev.key.keysym.sym == SDLK_ESCAPE)
- {
- eFunc();
- }
- else
- {
- Keys[ev.key.keysym.sym] = true;
- if(ev.key.keysym.sym == SDLK_F1)
- {
- ssFunc();
- }
- cbFunc(ev.key.keysym.sym,BUTTON_DOWN,ClassPointer);
- }
- break;
- case SDL_KEYUP:
- Keys[ev.key.keysym.sym] = false;
- cbFunc(ev.key.keysym.sym,BUTTON_UP,ClassPointer);
- break;
- case SDL_MOUSEBUTTONDOWN:
- if (ev.button.button == SDL_BUTTON_LEFT)
- {
- cbFunc(1,MOUSE_DOWN,ClassPointer);
- mbl = true;
- }
- if (ev.button.button == SDL_BUTTON_RIGHT)
- {
- cbFunc(2,MOUSE_DOWN,ClassPointer);
- mbr = true;
- }
- break;
- case SDL_MOUSEBUTTONUP:
- if (ev.button.button == SDL_BUTTON_LEFT)
- {
- cbFunc(1,MOUSE_UP,ClassPointer);
- mbl = false;
- }
- if (ev.button.button == SDL_BUTTON_RIGHT)
- {
- cbFunc(2,MOUSE_UP,ClassPointer);
- mbr = false;
- }
- break;
- case SDL_MOUSEMOTION:
- x = ev.button.x;
- y = ev.button.y;
- break;
- }
- }
- }
- int GetWinMousePosX()
- {
- return x;
- }
- int GetWinMousePosY()
- {
- return y;
- }
- float GetSDLMousePosX()
- {
- int viewport[4];
- double modelview[16], projection[16];
- glGetIntegerv(GL_VIEWPORT, viewport);
- glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
- glGetDoublev(GL_PROJECTION_MATRIX, projection);
- int mx = x;
- int my = viewport[3]-0;
- GLdouble WinX,WinY,WinZ;
- gluProject(0,0,0,modelview, projection, viewport, &WinX,&WinY,&WinZ);
- GLdouble X,Y,Z;
- gluUnProject((double)mx, (double)my,WinZ, modelview, projection, viewport, &X, &Y, &Z);
- float Xf,Yf,Zf;
- Xf = (float)X;
- Yf = (float)Y;
- Zf = (float)Z;
- //std::cout<<"x: "<<X<<" y: "<<Y<<"\n";
- //std::cout<<"iX: "<<x<<" iY "<<y<<"\n";
- return Xf;
- }
- float GetSDLMousePosY()
- {
- int viewport[4];
- double modelview[16], projection[16];
- glGetIntegerv(GL_VIEWPORT, viewport);
- glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
- glGetDoublev(GL_PROJECTION_MATRIX, projection);
- int mx = 0;
- int my = viewport[3]-y;
- GLdouble WinX,WinY,WinZ;
- gluProject(0,0,0,modelview, projection, viewport, &WinX,&WinY,&WinZ);
- GLdouble X,Y,Z;
- gluUnProject((double)mx, (double)my,WinZ, modelview, projection, viewport, &X, &Y, &Z);
- float Xf,Yf,Zf;
- Xf = (float)X;
- Yf = (float)Y;
- Zf = (float)Z;
- //std::cout<<"x: "<<X<<" y: "<<Y<<"\n";
- return Yf;
- }
- bool ButtonDown(int Button)
- {
- return Keys[Button];
- }
- bool MouseDown(char button)
- {
- if(button=='l')
- {
- return mbl;
- }
- if(button=='r')
- {
- return mbr;
- }else{
- return false;
- }
- }
- int RegisterExitCallback(void (*pt2Func)(void))
- {
- if (pt2Func == NULL)
- {
- return 1;
- }
- eFunc = pt2Func;
- return 0;
- }
- int RegisterSSCallback(void (*pt2Func)(void))
- {
- if(pt2Func == NULL)
- {
- return 1;
- }
- ssFunc = pt2Func;
- return 0;
- }
- int RegisterCallback(void (*pt2Func)(int,int,void*),void* pt2Class)
- {
- if (pt2Class != NULL)
- {
- ClassPointer = pt2Class;
- }
- else
- {
- return 1;
- }
- if (pt2Func != NULL)
- {
- cbFunc = pt2Func;
- }
- else
- {
- return 2;
- }
- return 0;
- }
- void (*ssFunc)(void);
- protected:
- private:
- bool Keys[322];
- bool mbl, mbr;
- //bool left, right;
- int x,y;
- void (*cbFunc)(int,int,void*);
- void (*eFunc)(void);
- void* ClassPointer;
- };
- #endif // INPUTHANDLER_H
Advertisement
Add Comment
Please, Sign In to add comment