Rally X
ELEN3009 Project by Justin Wernick and David Schneider
|
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 }