diff options
author | Strangerke | 2011-08-01 09:53:15 +0200 |
---|---|---|
committer | Strangerke | 2011-08-01 09:53:15 +0200 |
commit | 88f6cc9b234432b068a6bd7e18ed92696dc95176 (patch) | |
tree | ce946346f964e6cf5a3329f8555e732b1a95e6b1 /engines | |
parent | c053762c6398c7d818d5c7f319877c4b1e712070 (diff) | |
download | scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.gz scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.bz2 scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.zip |
CGE: Clean eventManager
Diffstat (limited to 'engines')
-rw-r--r-- | engines/cge/cge_main.cpp | 2 | ||||
-rw-r--r-- | engines/cge/events.cpp | 90 | ||||
-rw-r--r-- | engines/cge/events.h | 20 | ||||
-rw-r--r-- | engines/cge/snail.cpp | 2 |
4 files changed, 59 insertions, 55 deletions
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp index 302a25a3d5..1198946a41 100644 --- a/engines/cge/cge_main.cpp +++ b/engines/cge/cge_main.cpp @@ -1696,7 +1696,7 @@ bool CGEEngine::showTitle(const char *name) { if (_eventManager->_quitFlag) return false; } - if (_keyboard->last() == Enter && *_usrFnam) + if (_keyboard->lastKey() == Enter && *_usrFnam) userOk = true; } //Mouse.Off(); 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 diff --git a/engines/cge/events.h b/engines/cge/events.h index 3b4ff2092f..b213caed3c 100644 --- a/engines/cge/events.h +++ b/engines/cge/events.h @@ -44,20 +44,16 @@ namespace CGE { class Keyboard { private: bool getKey(Common::Event &event, int &cgeCode); + uint16 _current; public: static const uint16 _code[0x60]; static const uint16 _scummVmCodes[0x60]; - uint16 _current; Sprite *_client; bool _key[0x60]; void newKeyboard(Common::Event &event); - uint16 last() { - uint16 cur = _current; - _current = 0; - return cur; - } + uint16 lastKey(); Sprite *setClient(Sprite *spr); Keyboard(); @@ -78,10 +74,10 @@ public: extern Talk *_talk; struct CGEEvent { - uint16 _msk; + uint16 _mask; uint16 _x; uint16 _y; - Sprite *_ptr; + Sprite *_spritePtr; }; @@ -109,13 +105,19 @@ private: class EventManager { private: Common::Event _event; + CGEEvent _eventQueue[EVT_MAX]; + uint16 _eventQueueHead; + uint16 _eventQueueTail; + void handleEvents(); public: bool _quitFlag; EventManager(); void poll(); - static void clrEvt(Sprite *spr = NULL); + void clearEvent(Sprite *spr); + + CGEEvent &getNextEvent(); }; } // End of namespace CGE diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp index e188f76650..aece48a933 100644 --- a/engines/cge/snail.cpp +++ b/engines/cge/snail.cpp @@ -771,7 +771,7 @@ void CGEEngine::snKill(Sprite *spr) { Sprite *nx = spr->_next; hide1(spr); _vga->_showQ->remove(spr); - EventManager::clrEvt(spr); + _eventManager->clearEvent(spr); if (spr->_flags._kill) delete spr; else { |