This week only. Pastebin PRO Accounts Christmas Special! Don't miss out!Want more features on Pastebin? Sign Up, it's FREE!
Guest

InputHandler.h

By: a guest on Jan 21st, 2011  |  syntax: C++  |  size: 4.85 KB  |  views: 40  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #ifndef INPUTHANDLER_H
  2. #define INPUTHANDLER_H
  3.  
  4. #include "../defines.h"
  5. enum
  6. {
  7.     MOUSE_DOWN,
  8.     MOUSE_UP,
  9.     BUTTON_DOWN,
  10.     BUTTON_UP
  11. };
  12. class InputHandler
  13. {
  14. public:
  15.     InputHandler() {}
  16.     virtual ~InputHandler() {}
  17.     void PassEventHandler(SDL_Event ev)
  18.     {
  19.         SDL_GetMouseState(&x,&y);
  20.         while (SDL_PollEvent(&ev))
  21.         {
  22.             switch (ev.type)
  23.             {
  24.             case SDL_QUIT:
  25.                 eFunc();
  26.                 break;
  27.             case SDL_KEYDOWN:
  28.                 if (ev.key.keysym.sym == SDLK_ESCAPE)
  29.                 {
  30.                     eFunc();
  31.                 }
  32.                 else
  33.                 {
  34.                     Keys[ev.key.keysym.sym] = true;
  35.                     if(ev.key.keysym.sym == SDLK_F1)
  36.                     {
  37.                         ssFunc();
  38.                     }
  39.                     cbFunc(ev.key.keysym.sym,BUTTON_DOWN,ClassPointer);
  40.                 }
  41.                 break;
  42.             case SDL_KEYUP:
  43.                 Keys[ev.key.keysym.sym] = false;
  44.                 cbFunc(ev.key.keysym.sym,BUTTON_UP,ClassPointer);
  45.                 break;
  46.             case SDL_MOUSEBUTTONDOWN:
  47.                 if (ev.button.button == SDL_BUTTON_LEFT)
  48.                 {
  49.                     cbFunc(1,MOUSE_DOWN,ClassPointer);
  50.                     mbl = true;
  51.                 }
  52.                 if (ev.button.button == SDL_BUTTON_RIGHT)
  53.                 {
  54.                     cbFunc(2,MOUSE_DOWN,ClassPointer);
  55.                     mbr = true;
  56.                 }
  57.                 break;
  58.             case SDL_MOUSEBUTTONUP:
  59.                 if (ev.button.button == SDL_BUTTON_LEFT)
  60.                 {
  61.                     cbFunc(1,MOUSE_UP,ClassPointer);
  62.                     mbl = false;
  63.                 }
  64.                 if (ev.button.button == SDL_BUTTON_RIGHT)
  65.                 {
  66.                     cbFunc(2,MOUSE_UP,ClassPointer);
  67.                     mbr = false;
  68.                 }
  69.                 break;
  70.                 case SDL_MOUSEMOTION:
  71.                 x = ev.button.x;
  72.                 y = ev.button.y;
  73.                 break;
  74.             }
  75.         }
  76.     }
  77.     int GetWinMousePosX()
  78.     {
  79.         return x;
  80.     }
  81.     int GetWinMousePosY()
  82.     {
  83.         return y;
  84.     }
  85.     float GetSDLMousePosX()
  86.     {
  87.         int viewport[4];
  88.         double modelview[16], projection[16];
  89.  
  90.         glGetIntegerv(GL_VIEWPORT, viewport);
  91.         glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
  92.         glGetDoublev(GL_PROJECTION_MATRIX, projection);
  93.  
  94.         int mx = x;
  95.         int my = viewport[3]-0;
  96.  
  97.         GLdouble WinX,WinY,WinZ;
  98.         gluProject(0,0,0,modelview, projection, viewport, &WinX,&WinY,&WinZ);
  99.  
  100.         GLdouble X,Y,Z;
  101.         gluUnProject((double)mx, (double)my,WinZ, modelview, projection, viewport, &X, &Y, &Z);
  102.  
  103.         float Xf,Yf,Zf;
  104.         Xf = (float)X;
  105.         Yf = (float)Y;
  106.         Zf = (float)Z;
  107.         //std::cout<<"x: "<<X<<" y: "<<Y<<"\n";
  108.         //std::cout<<"iX: "<<x<<" iY "<<y<<"\n";
  109.         return Xf;
  110.     }
  111.     float GetSDLMousePosY()
  112.     {
  113.         int viewport[4];
  114.         double modelview[16], projection[16];
  115.  
  116.         glGetIntegerv(GL_VIEWPORT, viewport);
  117.         glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
  118.         glGetDoublev(GL_PROJECTION_MATRIX, projection);
  119.  
  120.         int mx = 0;
  121.         int my = viewport[3]-y;
  122.  
  123.         GLdouble WinX,WinY,WinZ;
  124.         gluProject(0,0,0,modelview, projection, viewport, &WinX,&WinY,&WinZ);
  125.  
  126.         GLdouble X,Y,Z;
  127.         gluUnProject((double)mx, (double)my,WinZ, modelview, projection, viewport, &X, &Y, &Z);
  128.  
  129.         float Xf,Yf,Zf;
  130.         Xf = (float)X;
  131.         Yf = (float)Y;
  132.         Zf = (float)Z;
  133.  
  134.         //std::cout<<"x: "<<X<<" y: "<<Y<<"\n";
  135.  
  136.         return Yf;
  137.     }
  138.     bool ButtonDown(int Button)
  139.     {
  140.         return Keys[Button];
  141.     }
  142.     bool MouseDown(char button)
  143.     {
  144.         if(button=='l')
  145.         {
  146.             return mbl;
  147.         }
  148.         if(button=='r')
  149.         {
  150.             return mbr;
  151.         }else{
  152.             return false;
  153.         }
  154.     }
  155.     int RegisterExitCallback(void (*pt2Func)(void))
  156.     {
  157.         if (pt2Func == NULL)
  158.         {
  159.             return 1;
  160.         }
  161.         eFunc = pt2Func;
  162.         return 0;
  163.     }
  164.     int RegisterSSCallback(void (*pt2Func)(void))
  165.     {
  166.         if(pt2Func == NULL)
  167.         {
  168.             return 1;
  169.         }
  170.         ssFunc = pt2Func;
  171.         return 0;
  172.     }
  173.     int RegisterCallback(void (*pt2Func)(int,int,void*),void* pt2Class)
  174.     {
  175.         if (pt2Class != NULL)
  176.         {
  177.             ClassPointer = pt2Class;
  178.         }
  179.         else
  180.         {
  181.             return 1;
  182.         }
  183.         if (pt2Func != NULL)
  184.         {
  185.             cbFunc = pt2Func;
  186.         }
  187.         else
  188.         {
  189.             return 2;
  190.         }
  191.         return 0;
  192.     }
  193. void (*ssFunc)(void);
  194. protected:
  195. private:
  196.     bool Keys[322];
  197.     bool mbl, mbr;
  198.     //bool left, right;
  199.     int x,y;
  200.     void (*cbFunc)(int,int,void*);
  201.     void (*eFunc)(void);
  202.  
  203.     void* ClassPointer;
  204. };
  205.  
  206. #endif // INPUTHANDLER_H
clone this paste RAW Paste Data