aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2011-08-01 09:53:15 +0200
committerStrangerke2011-08-01 09:53:15 +0200
commit88f6cc9b234432b068a6bd7e18ed92696dc95176 (patch)
treece946346f964e6cf5a3329f8555e732b1a95e6b1
parentc053762c6398c7d818d5c7f319877c4b1e712070 (diff)
downloadscummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.gz
scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.tar.bz2
scummvm-rg350-88f6cc9b234432b068a6bd7e18ed92696dc95176.zip
CGE: Clean eventManager
-rw-r--r--engines/cge/cge_main.cpp2
-rw-r--r--engines/cge/events.cpp90
-rw-r--r--engines/cge/events.h20
-rw-r--r--engines/cge/snail.cpp2
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 {