Skip to content

Commit

Permalink
ACCESS: Clean up keyboard control
Browse files Browse the repository at this point in the history
  • Loading branch information
dreammaster committed Dec 13, 2014
1 parent 84d77b7 commit 67b3304
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 25 deletions.
4 changes: 2 additions & 2 deletions engines/access/access.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,7 @@ void AccessEngine::speakText(ASurface *s, const Common::String &msg) {
_events->debounceLeft();
_sndSubFile += soundsLeft;
break;
} else if (_events->_keypresses.size() != 0) {
} else if (_events->isKeyPending()) {
_sndSubFile += soundsLeft;
break;
} else {
Expand Down Expand Up @@ -272,7 +272,7 @@ void AccessEngine::speakText(ASurface *s, const Common::String &msg) {
_events->debounceLeft();
_sndSubFile += soundsLeft;
break;
} else if (_events->_keypresses.size() != 0) {
} else if (_events->isKeyPending()) {
_sndSubFile += soundsLeft;
break;
} else {
Expand Down
6 changes: 2 additions & 4 deletions engines/access/amazon/amazon_game.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -489,8 +489,7 @@ void AmazonEngine::startChapter(int chapter) {
_sound->freeSounds();

// Wait loop
while (!shouldQuit() && !_events->_leftButton && !_events->_rightButton
&& _events->_keypresses.size() == 0 && _timers[20]._flag) {
while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
_events->pollEvents();
g_system->delayMillis(10);
}
Expand Down Expand Up @@ -531,8 +530,7 @@ void AmazonEngine::startChapter(int chapter) {
_timers[20]._flag++;

// Wait loop
while (!shouldQuit() && !_events->_leftButton && !_events->_rightButton
&& _events->_keypresses.size() == 0 && _timers[20]._flag) {
while (!shouldQuit() && !_events->isKeyMousePressed() && _timers[20]._flag) {
_events->pollEvents();
g_system->delayMillis(10);
}
Expand Down
5 changes: 1 addition & 4 deletions engines/access/amazon/amazon_logic.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,12 +158,9 @@ void CampScene::mWhileDoOpen() {

events.pollEventsAndWait();

if (events._leftButton || events._rightButton || events._keypresses.size() > 0) {
if (_vm->_events->isKeyMousePressed()) {
_skipStart = true;
_vm->_midi->newMusic(10, 1);

events.debounceLeft();
events.zeroKeys();
break;
}

Expand Down
28 changes: 18 additions & 10 deletions engines/access/events.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ EventsManager::EventsManager(AccessEngine *vm): _vm(vm) {
_mouseCol = _mouseRow = 0;
_cursorExitFlag = false;
_vbCount = 0;
_keyCode = Common::KEYCODE_INVALID;
}

EventsManager::~EventsManager() {
Expand Down Expand Up @@ -141,7 +142,7 @@ void EventsManager::pollEvents(bool skipTimers) {
_vm->_debugger->attach();
_vm->_debugger->onFrame();
} else {
_keypresses.push(event.kbd);
keyControl(event.kbd.keycode);
}
return;
case Common::EVENT_KEYUP:
Expand Down Expand Up @@ -181,6 +182,11 @@ void EventsManager::pollEvents(bool skipTimers) {
}
}

void EventsManager::keyControl(Common::KeyCode keycode) {
_keyCode = keycode;
// TODO: Keypress handling
}

void EventsManager::pollEventsAndWait() {
pollEvents();
g_system->delayMillis(10);
Expand Down Expand Up @@ -219,18 +225,23 @@ void EventsManager::delay(int time) {
}

void EventsManager::zeroKeys() {
_keypresses.clear();
_keyCode = Common::KEYCODE_INVALID;
}

bool EventsManager::getKey(Common::KeyState &key) {
if (_keypresses.empty()) {
if (_keyCode == Common::KEYCODE_INVALID) {
return false;
} else {
key = _keypresses.pop();
key = _keyCode;
_keyCode = Common::KEYCODE_INVALID;
return true;
}
}

bool EventsManager::isKeyPending() const {
return _keyCode != Common::KEYCODE_INVALID;
}

void EventsManager::debounceLeft() {
while (_leftButton && !_vm->shouldQuit()) {
pollEvents();
Expand All @@ -240,17 +251,14 @@ void EventsManager::debounceLeft() {

void EventsManager::clearEvents() {
_leftButton = _rightButton = false;
_keypresses.clear();
zeroKeys();
}

void EventsManager::waitKeyMouse() {
while (!_vm->shouldQuit() && !_leftButton && _keypresses.size() == 0) {
while (!_vm->shouldQuit() && isKeyMousePressed()) {
pollEvents(true);
g_system->delayMillis(10);
}

zeroKeys();
debounceLeft();
}

Common::Point EventsManager::calcRawMouse() {
Expand Down Expand Up @@ -278,7 +286,7 @@ int EventsManager::checkMouseBox1(Common::Array<Common::Rect> &rects) {
}

bool EventsManager::isKeyMousePressed() {
bool result = _leftButton || _rightButton || _keypresses.size() > 0;
bool result = _leftButton || _rightButton || isKeyPending();
debounceLeft();
zeroKeys();

Expand Down
6 changes: 5 additions & 1 deletion engines/access/events.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,11 @@ class EventsManager {
AccessEngine *_vm;
uint32 _frameCounter;
uint32 _priorFrameTime;
Common::KeyCode _keyCode;

Graphics::Surface _invCursor;
void nextFrame(bool skipTimers);
void keyControl(Common::KeyCode keycode);
public:
CursorType _cursorId;
CursorType _normalMouse;
Expand All @@ -58,7 +61,6 @@ class EventsManager {
int _mouseCol, _mouseRow;
bool _cursorExitFlag;
int _vbCount;
Common::FixedStack<Common::KeyState> _keypresses;
public:
/**
* Constructor
Expand Down Expand Up @@ -113,6 +115,8 @@ class EventsManager {

bool getKey(Common::KeyState &key);

bool isKeyPending() const;

void delay(int time);

void debounceLeft();
Expand Down
7 changes: 3 additions & 4 deletions engines/access/scripts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@ void Scripts::cmdCheckTimer() {
if (_endFlag)
return;

if ((idx == 9) && (_vm->_events->_keypresses.size() > 0)) {
if ((idx == 9) && _vm->_events->isKeyPending()) {
_vm->_events->zeroKeys();
_vm->_timers[9]._timer = 0;
_vm->_timers[9]._flag = 0;
Expand Down Expand Up @@ -724,10 +724,9 @@ void Scripts::cmdWait() {
_vm->_timers[3]._timer = time;
_vm->_timers[3]._initTm = time;
_vm->_timers[3]._flag++;
_vm->_events->_keypresses.clear();
_vm->_events->zeroKeys();

while (!_vm->shouldQuit() && _vm->_events->_keypresses.empty() &&
!_vm->_events->_leftButton && !_vm->_events->_rightButton &&
while (!_vm->shouldQuit() && !_vm->_events->isKeyMousePressed() &&
_vm->_timers[3]._flag) {
_vm->_midi->midiRepeat();
charLoop();
Expand Down

0 comments on commit 67b3304

Please sign in to comment.