Rally X
ELEN3009 Project by Justin Wernick and David Schneider
source/presentation/KeyboardHandler.cpp
Go to the documentation of this file.
00001 #include "KeyboardHandler.h"
00002 
00003 KeyboardHandler::KeyboardHandler(Maze::Direction currentFacing)
00004     :_up(false),
00005     _down(false),
00006     _left(false),
00007     _right(false),
00008     _smokescreen(false),
00009     _previousFacing(currentFacing)
00010 {
00011     _keyboardEvents = al_create_event_queue();
00012     al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
00013 }
00014 
00015 KeyboardHandler::KeyboardHandler(const KeyboardHandler& ref)
00016     :_up(ref._up),
00017     _down(ref._down),
00018     _left(ref._left),
00019     _right(ref._right),
00020     _smokescreen(ref._smokescreen),
00021     _previousFacing(ref._previousFacing)
00022 {
00023     _keyboardEvents = al_create_event_queue();
00024     al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
00025 }
00026 
00027 KeyboardHandler& KeyboardHandler::operator=(const KeyboardHandler& rhs)
00028 {
00029     _up = rhs._up;
00030     _down = rhs._down;
00031     _left = rhs._left;
00032     _right = rhs._right;
00033     _smokescreen = rhs._smokescreen;
00034     _previousFacing = rhs._previousFacing;
00035 
00036     if (_keyboardEvents!=rhs._keyboardEvents) al_destroy_event_queue(_keyboardEvents);
00037 
00038     _keyboardEvents = al_create_event_queue();
00039     al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
00040 
00041     return *this;
00042 }
00043 
00044 KeyboardHandler::~KeyboardHandler()
00045 {
00046     al_destroy_event_queue(_keyboardEvents);
00047 }
00048 
00049 void KeyboardHandler::updateFlags()
00050 {
00051     ALLEGRO_EVENT event;
00052     while (al_get_next_event(_keyboardEvents, &event))
00053     {
00054         if (event.type==ALLEGRO_EVENT_KEY_DOWN)
00055         {
00056             switch (event.keyboard.keycode)
00057             {
00058                 case UP_KEY:
00059                     _up = true;
00060                     break;
00061                 case DOWN_KEY:
00062                     _down = true;
00063                     break;
00064                 case LEFT_KEY:
00065                     _left = true;
00066                     break;
00067                 case RIGHT_KEY:
00068                     _right = true;
00069                     break;
00070                 case SMOKESCREEN_KEY:
00071                     _smokescreen = true;
00072                     break;
00073             }
00074         }
00075         else if (event.type==ALLEGRO_EVENT_KEY_UP)
00076         {
00077             switch (event.keyboard.keycode)
00078             {
00079                 case UP_KEY:
00080                     _up = false;
00081                     break;
00082                 case DOWN_KEY:
00083                     _down = false;
00084                     break;
00085                 case LEFT_KEY:
00086                     _left = false;
00087                     break;
00088                 case RIGHT_KEY:
00089                     _right = false;
00090                     break;
00091                 case SMOKESCREEN_KEY:
00092                     _smokescreen = false;
00093                     break;
00094             }
00095         }
00096     }
00097 }
00098 
00099 Maze::Direction KeyboardHandler::getFacing()
00100 {
00101     updateFlags();
00102 
00103     if (_up) _previousFacing = Maze::UP;
00104     else if (_down) _previousFacing = Maze::DOWN;
00105     else if (_left) _previousFacing = Maze::LEFT;
00106     else if (_right) _previousFacing = Maze::RIGHT;
00107 
00108     return _previousFacing;
00109 }
00110 
00111 bool KeyboardHandler::getSmokescreen()
00112 {
00113     return _smokescreen;
00114 }
 All Classes Files Functions Variables Typedefs Enumerations Enumerator