1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
#include "KeyboardHandler.h"
KeyboardHandler::KeyboardHandler(Maze::Direction currentFacing)
:_up(false),
_down(false),
_left(false),
_right(false),
_smokescreen(false),
_previousFacing(currentFacing)
{
_keyboardEvents = al_create_event_queue();
al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
}
KeyboardHandler::KeyboardHandler(const KeyboardHandler& ref)
:_up(ref._up),
_down(ref._down),
_left(ref._left),
_right(ref._right),
_smokescreen(ref._smokescreen),
_previousFacing(ref._previousFacing)
{
_keyboardEvents = al_create_event_queue();
al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
}
KeyboardHandler& KeyboardHandler::operator=(const KeyboardHandler& rhs)
{
_up = rhs._up;
_down = rhs._down;
_left = rhs._left;
_right = rhs._right;
_smokescreen = rhs._smokescreen;
_previousFacing = rhs._previousFacing;
if (_keyboardEvents!=rhs._keyboardEvents) al_destroy_event_queue(_keyboardEvents);
_keyboardEvents = al_create_event_queue();
al_register_event_source(_keyboardEvents, al_get_keyboard_event_source());
return *this;
}
KeyboardHandler::~KeyboardHandler()
{
al_destroy_event_queue(_keyboardEvents);
}
void KeyboardHandler::updateFlags()
{
ALLEGRO_EVENT event;
while (al_get_next_event(_keyboardEvents, &event))
{
if (event.type==ALLEGRO_EVENT_KEY_DOWN)
{
switch (event.keyboard.keycode)
{
case UP_KEY:
_up = true;
break;
case DOWN_KEY:
_down = true;
break;
case LEFT_KEY:
_left = true;
break;
case RIGHT_KEY:
_right = true;
break;
case SMOKESCREEN_KEY:
_smokescreen = true;
break;
}
}
else if (event.type==ALLEGRO_EVENT_KEY_UP)
{
switch (event.keyboard.keycode)
{
case UP_KEY:
_up = false;
break;
case DOWN_KEY:
_down = false;
break;
case LEFT_KEY:
_left = false;
break;
case RIGHT_KEY:
_right = false;
break;
case SMOKESCREEN_KEY:
_smokescreen = false;
break;
}
}
}
}
Maze::Direction KeyboardHandler::getFacing()
{
updateFlags();
if (_up) _previousFacing = Maze::UP;
else if (_down) _previousFacing = Maze::DOWN;
else if (_left) _previousFacing = Maze::LEFT;
else if (_right) _previousFacing = Maze::RIGHT;
return _previousFacing;
}
bool KeyboardHandler::getSmokescreen()
{
return _smokescreen;
}
|