diff options
author | uruk | 2014-06-07 20:33:52 +0200 |
---|---|---|
committer | uruk | 2014-06-07 20:33:52 +0200 |
commit | bb216eba2f8f9fd04a4e338393e37723b1328390 (patch) | |
tree | 3055c91eeed3b0f4b2b976885866c7dc7a53f194 | |
parent | acb81c5e74ac2b54fc9b430d439389fb82233069 (diff) | |
download | scummvm-rg350-bb216eba2f8f9fd04a4e338393e37723b1328390.tar.gz scummvm-rg350-bb216eba2f8f9fd04a4e338393e37723b1328390.tar.bz2 scummvm-rg350-bb216eba2f8f9fd04a4e338393e37723b1328390.zip |
CGE2: Implement System::touch().
-rw-r--r-- | engines/cge2/cge2.h | 1 | ||||
-rw-r--r-- | engines/cge2/cge2_main.cpp | 56 | ||||
-rw-r--r-- | engines/cge2/cge2_main.h | 2 | ||||
-rw-r--r-- | engines/cge2/events.cpp | 2 |
4 files changed, 57 insertions, 4 deletions
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h index d049339dee..f25df58740 100644 --- a/engines/cge2/cge2.h +++ b/engines/cge2/cge2.h @@ -73,6 +73,7 @@ class Font; #define kInfoX 160 #define kInfoY -11 #define kInfoW 180 +#define kPocketsWidth 59 enum CallbackType { kNullCB = 0, kQGame, kMiniStep, kXScene, kSoundSetVolume diff --git a/engines/cge2/cge2_main.cpp b/engines/cge2/cge2_main.cpp index a5456477c8..065e905810 100644 --- a/engines/cge2/cge2_main.cpp +++ b/engines/cge2/cge2_main.cpp @@ -41,8 +41,60 @@ System::System(CGE2Engine *vm) : Sprite(vm), _vm(vm) { warning("STUB: System::System()"); } -void System::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) { - warning("STUB: System::touch()"); +void System::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) { + if (mask & kEventKeyb) { + if (keyCode == Common::KEYCODE_ESCAPE) { + // The original was calling keyClick() + // The sound is uselessly annoying and noisy, so it has been removed + _vm->killText(); + if (_vm->_startupMode == 1) { + _vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL); + return; + } + } + } else { + if (_vm->_startupMode) + return; + int selectedScene = 0; + _vm->_infoLine->setText(nullptr); + + if (mask & kMouseLeftUp) { + if (pos.y >= 0) { // world + if (!_vm->_talk && pos.y < _vm->_mouseTop) + _vm->_heroTab[_vm->_sex]->_ptr->walkTo(pos); + } else { // panel + if (_vm->_commandHandler->idle()) { + int sex = pos.x < kPocketsWidth; + if (sex || pos.x >= kScrWidth - kPocketsWidth) { + _vm->switchHero(sex); + if (_vm->_sex == sex) { + int dx = kPocketsWidth >> 1, + dy = 1 - (kPanHeight >> 1); + Sprite *s; + if (!sex) + pos.x -= kScrWidth - kPocketsWidth; + dx -= pos.x; + dy -= pos.y; + if (dx * dx + dy * dy > 10 * 10) { + int n = 0; + if (1 - pos.y >= (kPanHeight >> 1)) + n += 2; + if (pos.x >= (kPocketsWidth >> 1)) + ++n; + s = _vm->_heroTab[_vm->_sex]->_pocket[n]; + if (_vm->_blinkSprite) + _vm->_blinkSprite->_flags._hide = false; + if (_vm->_blinkSprite == s) + _vm->_blinkSprite = nullptr; + else + _vm->_blinkSprite = s; + } + } + } + } + } + } + } } void System::tick() { diff --git a/engines/cge2/cge2_main.h b/engines/cge2/cge2_main.h index 272cdf79d5..a0bd780ab1 100644 --- a/engines/cge2/cge2_main.h +++ b/engines/cge2/cge2_main.h @@ -56,7 +56,7 @@ public: System(CGE2Engine *vm); - virtual void touch(uint16 mask, int x, int y, Common::KeyCode keyCode); + virtual void touch(uint16 mask, V2D pos, Common::KeyCode keyCode); void tick(); private: CGE2Engine *_vm; diff --git a/engines/cge2/events.cpp b/engines/cge2/events.cpp index 75da3fac40..a143c77a7d 100644 --- a/engines/cge2/events.cpp +++ b/engines/cge2/events.cpp @@ -196,7 +196,7 @@ void EventManager::handleEvents() { else e._spritePtr->touch(e._mask, e._x - e._spritePtr->_pos2D.x, e._y - e._spritePtr->_pos2D.y, e._keyCode); } else if (_vm->_sys) - _vm->_sys->touch(e._mask, e._x, e._y, e._keyCode); + _vm->_sys->touch(e._mask, V2D(_vm, e._x, e._y), e._keyCode); if (e._mask & kMouseLeftDown) { _vm->_mouse->_hold = e._spritePtr; |