aboutsummaryrefslogtreecommitdiff
path: root/engines/cge/events.cpp
diff options
context:
space:
mode:
authorStrangerke2011-08-01 09:53:15 +0200
committerStrangerke2011-08-01 09:53:15 +0200
commit88f6cc9b234432b068a6bd7e18ed92696dc95176 (patch)
treece946346f964e6cf5a3329f8555e732b1a95e6b1 /engines/cge/events.cpp
parentc053762c6398c7d818d5c7f319877c4b1e712070 (diff)
downloadscummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.gz
scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.bz2
scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.zip
CGE: Clean eventManager
Diffstat (limited to 'engines/cge/events.cpp')
-rw-r--r--engines/cge/events.cpp90
1 files changed, 46 insertions, 44 deletions
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp
index 119390944e..113b64cee8 100644
--- a/engines/cge/events.cpp
+++ b/engines/cge/events.cpp
@@ -33,10 +33,6 @@
namespace CGE {
-CGEEvent Evt[EVT_MAX];
-
-uint16 EvtHead = 0, EvtTail = 0;
-
/*----------------- KEYBOARD interface -----------------*/
const uint16 Keyboard::_code[0x60] = {
@@ -85,8 +81,7 @@ const uint16 Keyboard::_scummVmCodes[0x60] = {
0
};
-Keyboard::Keyboard() {
- _client = NULL;
+Keyboard::Keyboard() : _client(NULL) {
Common::set_to(&_key[0], &_key[0x60], false);
_current = 0;
}
@@ -139,15 +134,20 @@ void Keyboard::newKeyboard(Common::Event &event) {
_current = Keyboard::_code[keycode];
if (_client) {
- CGEEvent &evt = Evt[EvtHead];
- EvtHead = (EvtHead + 1) % EVT_MAX;
+ CGEEvent &evt = _eventManager->getNextEvent();
evt._x = _current; // Keycode
- evt._msk = KEYB; // Event mask
- evt._ptr = _client; // Sprite pointer
+ evt._mask = KEYB; // Event mask
+ evt._spritePtr = _client; // Sprite pointer
}
}
}
+uint16 Keyboard::lastKey() {
+ uint16 cur = _current;
+ _current = 0;
+ return cur;
+}
+
/*----------------- MOUSE interface -----------------*/
Mouse::Mouse(CGEEngine *vm) : Sprite(vm, NULL), _busy(NULL), _hold(NULL), _hx(0), _vm(vm) {
@@ -185,11 +185,6 @@ Mouse::~Mouse() {
}
-//void Mouse::setFun()
-//{
-//}
-
-
void Mouse::on() {
if (_seqPtr && _exist) {
_active = true;
@@ -216,30 +211,29 @@ void Mouse::newMouse(Common::Event &event) {
if (!_active)
return;
- CGEEvent &evt = Evt[EvtHead];
- EvtHead = (EvtHead + 1) % EVT_MAX;
+ CGEEvent &evt = _eventManager->getNextEvent();
evt._x = event.mouse.x;
evt._y = event.mouse.y;
- evt._ptr = spriteAt(evt._x, evt._y);
+ evt._spritePtr = spriteAt(evt._x, evt._y);
switch (event.type) {
case Common::EVENT_MOUSEMOVE:
- evt._msk = ROLL;
+ evt._mask = ROLL;
break;
case Common::EVENT_LBUTTONDOWN:
- evt._msk = L_DN;
+ evt._mask = L_DN;
_buttons |= 1;
break;
case Common::EVENT_LBUTTONUP:
- evt._msk = L_UP;
+ evt._mask = L_UP;
_buttons &= ~1;
break;
case Common::EVENT_RBUTTONDOWN:
- evt._msk = R_DN;
+ evt._mask = R_DN;
_buttons |= 2;
break;
case Common::EVENT_RBUTTONUP:
- evt._msk = R_UP;
+ evt._mask = R_UP;
_buttons &= ~2;
break;
default:
@@ -251,6 +245,8 @@ void Mouse::newMouse(Common::Event &event) {
EventManager::EventManager() {
_quitFlag = false;
+ _eventQueueHead = 0;
+ _eventQueueTail = 0;
}
void EventManager::poll() {
@@ -282,27 +278,27 @@ void EventManager::poll() {
}
void EventManager::handleEvents() {
- while (EvtTail != EvtHead) {
- CGEEvent e = Evt[EvtTail];
- if (e._msk) {
- if (_mouse->_hold && e._ptr != _mouse->_hold)
- _mouse->_hold->touch(e._msk | ATTN, e._x - _mouse->_hold->_x, e._y - _mouse->_hold->_y);
+ while (_eventQueueTail != _eventQueueHead) {
+ CGEEvent e = _eventQueue[_eventQueueTail];
+ if (e._mask) {
+ if (_mouse->_hold && e._spritePtr != _mouse->_hold)
+ _mouse->_hold->touch(e._mask | ATTN, e._x - _mouse->_hold->_x, e._y - _mouse->_hold->_y);
// update mouse cursor position
- if (e._msk & ROLL)
+ if (e._mask & ROLL)
_mouse->gotoxy(e._x, e._y);
// activate current touched SPRITE
- if (e._ptr) {
- if (e._msk & KEYB)
- e._ptr->touch(e._msk, e._x, e._y);
+ if (e._spritePtr) {
+ if (e._mask & KEYB)
+ e._spritePtr->touch(e._mask, e._x, e._y);
else
- e._ptr->touch(e._msk, e._x - e._ptr->_x, e._y - e._ptr->_y);
+ e._spritePtr->touch(e._mask, e._x - e._spritePtr->_x, e._y - e._spritePtr->_y);
} else if (_sys)
- _sys->touch(e._msk, e._x, e._y);
+ _sys->touch(e._mask, e._x, e._y);
- if (e._msk & L_DN) {
- _mouse->_hold = e._ptr;
+ if (e._mask & L_DN) {
+ _mouse->_hold = e._spritePtr;
if (_mouse->_hold) {
_mouse->_hold->_flags._hold = true;
@@ -313,7 +309,7 @@ void EventManager::handleEvents() {
}
}
- if (e._msk & L_UP) {
+ if (e._mask & L_UP) {
if (_mouse->_hold) {
_mouse->_hold->_flags._hold = false;
_mouse->_hold = NULL;
@@ -322,10 +318,10 @@ void EventManager::handleEvents() {
///Touched = e.Ptr;
// discard Text if button released
- if (e._msk & (L_UP | R_UP))
+ if (e._mask & (L_UP | R_UP))
killText();
}
- EvtTail = (EvtTail + 1) % EVT_MAX;
+ _eventQueueTail = (_eventQueueTail + 1) % EVT_MAX;
}
if (_mouse->_hold) {
if (_mouse->_hold->_flags._drag)
@@ -333,14 +329,20 @@ void EventManager::handleEvents() {
}
}
-void EventManager::clrEvt(Sprite *spr) {
+void EventManager::clearEvent(Sprite *spr) {
if (spr) {
uint16 e;
- for (e = EvtTail; e != EvtHead; e = (e + 1) % EVT_MAX)
- if (Evt[e]._ptr == spr)
- Evt[e]._msk = 0;
+ for (e = _eventQueueTail; e != _eventQueueHead; e = (e + 1) % EVT_MAX)
+ if (_eventQueue[e]._spritePtr == spr)
+ _eventQueue[e]._mask = 0;
} else
- EvtTail = EvtHead;
+ _eventQueueTail = _eventQueueHead;
}
+CGEEvent &EventManager::getNextEvent() {
+ CGEEvent &evt = _eventQueue[_eventQueueHead];
+ _eventQueueHead = (_eventQueueHead + 1) % EVT_MAX;
+
+ return evt;
+}
} // End of namespace CGE