• Main Page
  • Classes
  • Files
  • File List

UI/EventHandler.h

00001 /*
00002  * EventHandler.h
00003  *
00004  *  Created on: 2010-11-21
00005  *      Author: krejziwan
00006  */
00007 
00008 
00009 #ifndef EVENTHANDLER_H_
00010 #define EVENTHANDLER_H_
00011 
00012 
00013 #include "../Engine/Camera.h"
00014 #include "../Physics/Physics.h"
00015 #include "../Engine/GameState.h"
00016 #include <map>
00017 #include <cstdlib>
00018 
00019 class EventHandler:public INotifiable
00020 {
00021 
00022         typedef void (EventHandler::*func)();
00023         static const int KEYBINDINGS=4;
00024 
00025         std::map<unsigned char, func>* mainMenuBindings()
00026         {
00027                 std::map<unsigned char, func>* keybindings = new std::map<unsigned char, func>();
00028                 keybindings->insert(std::pair<unsigned char, func>('y',&EventHandler::newGame));
00029                 return keybindings;
00030 
00031         };
00032         std::map<unsigned char, func>* pauseBindings()
00033         {
00034                 std::map<unsigned char, func>* keybindings = new std::map<unsigned char, func>();
00035                 keybindings->insert(std::pair<unsigned char, func>('w',&EventHandler::slideforward));
00036                                 keybindings->insert(std::pair<unsigned char, func>('s',&EventHandler::slidebackward));
00037                                 keybindings->insert(std::pair<unsigned char, func>('a',&EventHandler::slideleft));
00038                                 keybindings->insert(std::pair<unsigned char, func>('d',&EventHandler::slideright));
00039                                 keybindings->insert(std::pair<unsigned char, func>('+',&EventHandler::slideup));
00040                                 keybindings->insert(std::pair<unsigned char, func>('-',&EventHandler::slidedown));
00041                                 keybindings->insert(std::pair<unsigned char, func>('Q',&EventHandler::rollleft));
00042                                 keybindings->insert(std::pair<unsigned char, func>('E',&EventHandler::rollright));
00043                                 keybindings->insert(std::pair<unsigned char, func>('A',&EventHandler::yawleft));
00044                                 keybindings->insert(std::pair<unsigned char, func>('D',&EventHandler::yawright));
00045                                 keybindings->insert(std::pair<unsigned char, func>('W',&EventHandler::pitchup));
00046                                 keybindings->insert(std::pair<unsigned char, func>('S',&EventHandler::pitchdown));
00047                 keybindings->insert(std::pair<unsigned char, func>('p',&EventHandler::pause));
00048                 keybindings->insert(std::pair<unsigned char, func>('\x1B',&EventHandler::exit_));
00049                 return keybindings;
00050         };
00051 
00052         std::map<unsigned char, func>* gameBindings()
00053         {
00054                 std::map<unsigned char, func>* keybindings = new std::map<unsigned char, func>();
00055                 keybindings->insert(std::pair<unsigned char, func>('w',&EventHandler::slideforward));
00056                         keybindings->insert(std::pair<unsigned char, func>('s',&EventHandler::slidebackward));
00057                         keybindings->insert(std::pair<unsigned char, func>('a',&EventHandler::slideleft));
00058                         keybindings->insert(std::pair<unsigned char, func>('d',&EventHandler::slideright));
00059                         keybindings->insert(std::pair<unsigned char, func>('+',&EventHandler::slideup));
00060                         keybindings->insert(std::pair<unsigned char, func>('-',&EventHandler::slidedown));
00061                         keybindings->insert(std::pair<unsigned char, func>('Q',&EventHandler::rollleft));
00062                         keybindings->insert(std::pair<unsigned char, func>('E',&EventHandler::rollright));
00063                         keybindings->insert(std::pair<unsigned char, func>('A',&EventHandler::yawleft));
00064                         keybindings->insert(std::pair<unsigned char, func>('D',&EventHandler::yawright));
00065                         keybindings->insert(std::pair<unsigned char, func>('W',&EventHandler::pitchup));
00066                         keybindings->insert(std::pair<unsigned char, func>('S',&EventHandler::pitchdown));
00067                         keybindings->insert(std::pair<unsigned char, func>('h',&EventHandler::hitball));
00068                         keybindings->insert(std::pair<unsigned char, func>('y',&EventHandler::debug));
00069                         keybindings->insert(std::pair<unsigned char, func>('p',&EventHandler::pause));
00070                         keybindings->insert(std::pair<unsigned char, func>('<',&EventHandler::decpower));
00071                         keybindings->insert(std::pair<unsigned char, func>('>',&EventHandler::incpower));
00072 
00073 
00074                 return keybindings;
00075         };
00076 
00077         std::map<unsigned char, func>* animationBindings()
00078                 {
00079                         std::map<unsigned char, func>* keybindings = new std::map<unsigned char, func>();
00080                         keybindings->insert(std::pair<unsigned char, func>('w',&EventHandler::slideforward));
00081                                 keybindings->insert(std::pair<unsigned char, func>('s',&EventHandler::slidebackward));
00082                                 keybindings->insert(std::pair<unsigned char, func>('a',&EventHandler::slideleft));
00083                                 keybindings->insert(std::pair<unsigned char, func>('d',&EventHandler::slideright));
00084                                 keybindings->insert(std::pair<unsigned char, func>('+',&EventHandler::slideup));
00085                                 keybindings->insert(std::pair<unsigned char, func>('-',&EventHandler::slidedown));
00086                                 keybindings->insert(std::pair<unsigned char, func>('Q',&EventHandler::rollleft));
00087                                 keybindings->insert(std::pair<unsigned char, func>('E',&EventHandler::rollright));
00088                                 keybindings->insert(std::pair<unsigned char, func>('A',&EventHandler::yawleft));
00089                                 keybindings->insert(std::pair<unsigned char, func>('D',&EventHandler::yawright));
00090                                 keybindings->insert(std::pair<unsigned char, func>('W',&EventHandler::pitchup));
00091                                 keybindings->insert(std::pair<unsigned char, func>('S',&EventHandler::pitchdown));
00092                                 keybindings->insert(std::pair<unsigned char, func>('p',&EventHandler::pause));
00093 
00094                         return keybindings;
00095                 };
00096 
00097 
00098         Camera * cam;
00099         Physics * physics;
00100         GameState *state;
00101 
00102         real slidespeed;
00103         real rotatespeed;
00104 
00105         void slideforward() {cam->slide(0.0,0.0,-slidespeed);}
00106         void slidebackward() {cam->slide(0.0,0.0,slidespeed);}
00107         void slideleft() {cam->slide(-slidespeed,0.0,0.0);}
00108         void slideright() {cam->slide(slidespeed,0.0,0.0);}
00109         void slideup() {cam->slide(0.0,slidespeed,0.0);}
00110         void slidedown() {cam->slide(0.0,-slidespeed,0.0);}
00111         void rollleft() { cam->roll(-rotatespeed);}
00112         void rollright() {cam->roll(rotatespeed);}
00113         void yawleft() {cam ->rotate(rotatespeed);}
00114         void yawright() { cam->rotate(-rotatespeed);}
00115         void pitchup() { cam->pitch(rotatespeed);}
00116         void pitchdown() { cam->pitch(-rotatespeed);}
00117         void hitball() {
00118                 state->setCurrentState(GameState::ANIMATION);
00119                 Vector direction = cam->getN();
00120                 physics->hitCueBall(direction,1,Vector(0.0,0.0,0.0));
00121 
00122         }
00123         void incpower() {physics->increasePower();}
00124         void decpower() {physics->decreasePower();}
00125         
00126         void debug() {  physics->debug();}
00127         void newGame() { state->setCurrentState(GameState::NEW_GAME); }
00128         void mainMenu() { state->setCurrentState(GameState::MAIN_MENU); }
00129         void exit_() { exit(1);}
00130         void pause()
00131         { switch(state->getCurrentState())
00132                 {
00133                 case GameState::HIT_BALL: state->setCurrentState(GameState::PAUSE_HIT);break;
00134                 case GameState::PAUSE_HIT: state->setCurrentState(GameState::HIT_BALL); break;
00135                 case GameState::PAUSE_ANI: state->setCurrentState(GameState::ANIMATION); break;
00136                 case GameState::ANIMATION: state->setCurrentState(GameState::PAUSE_ANI); break;
00137                 default:
00138                         break;
00139                 }
00140         }
00141 
00142 
00143 
00144         std::map<unsigned char, func>* activeKeyBindings;
00145         std::map<std::string,std::map<unsigned char, func>*> keyBindings;
00146 
00147 public:
00148         EventHandler(Physics *physics=NULL,Camera *cam=NULL, GameState *state=NULL);
00149         virtual ~EventHandler();
00150         void processNotification(ISubject *subject);
00151         void handleKeyboardEvent(unsigned char key, int x, int y);
00152         void handleMouseEvent(int button, int state, int x, int y);
00153 
00154 };
00155 
00156 #endif /* EVENTHANDLER_H_ */

Generated on Sun Dec 5 2010 19:03:33 for Snook3d by  doxygen 1.7.2