diff options
author | Robert Špalek | 2009-10-03 22:07:18 +0000 |
---|---|---|
committer | Robert Špalek | 2009-10-03 22:07:18 +0000 |
commit | 3035ca2fd3e5457aedb30dfc002c6bb1303fbbf4 (patch) | |
tree | 141fec42cbfc4a0446d48e3091afc0d945dd8916 /engines/draci | |
parent | c0773975f54dd862fa7d68df900236ea63a6b509 (diff) | |
download | scummvm-rg350-3035ca2fd3e5457aedb30dfc002c6bb1303fbbf4.tar.gz scummvm-rg350-3035ca2fd3e5457aedb30dfc002c6bb1303fbbf4.tar.bz2 scummvm-rg350-3035ca2fd3e5457aedb30dfc002c6bb1303fbbf4.zip |
Let Ctrl-Left click behave like Right lick in Dragon History.
Also, started implementing Advanced Engine Features:
- pause support
- RTL support
svn-id: r44575
Diffstat (limited to 'engines/draci')
-rw-r--r-- | engines/draci/detection.cpp | 3 | ||||
-rw-r--r-- | engines/draci/draci.cpp | 66 | ||||
-rw-r--r-- | engines/draci/draci.h | 10 | ||||
-rw-r--r-- | engines/draci/mouse.cpp | 10 | ||||
-rw-r--r-- | engines/draci/mouse.h | 5 |
5 files changed, 77 insertions, 17 deletions
diff --git a/engines/draci/detection.cpp b/engines/draci/detection.cpp index 37e1af6a85..3fe37ead53 100644 --- a/engines/draci/detection.cpp +++ b/engines/draci/detection.cpp @@ -115,7 +115,8 @@ bool DraciMetaEngine::hasFeature(MetaEngineFeature f) const { } bool Draci::DraciEngine::hasFeature(EngineFeature f) const { - return false; + return (f == kSupportsSubtitleOptions) || + (f == kSupportsRTL); } bool DraciMetaEngine::createInstance(OSystem *syst, Engine **engine, const ADGameDescription *desc) const { diff --git a/engines/draci/draci.cpp b/engines/draci/draci.cpp index aaf24430ff..14deb60603 100644 --- a/engines/draci/draci.cpp +++ b/engines/draci/draci.cpp @@ -173,21 +173,24 @@ int DraciEngine::init() { return Common::kNoError; } -bool DraciEngine::handleEvents() { +void DraciEngine::handleEvents() { Common::Event event; - bool quit = false; while (_eventMan->pollEvent(event)) { switch (event.type) { case Common::EVENT_QUIT: + case Common::EVENT_RTL: _game->setQuit(true); break; case Common::EVENT_KEYDOWN: - if (event.kbd.keycode == Common::KEYCODE_RIGHT) { + switch (event.kbd.keycode) { + case Common::KEYCODE_RIGHT: _game->scheduleEnteringRoomUsingGate(_game->nextRoomNum(), 0); - } else if (event.kbd.keycode == Common::KEYCODE_LEFT) { + break; + case Common::KEYCODE_LEFT: _game->scheduleEnteringRoomUsingGate(_game->prevRoomNum(), 0); - } else if (event.kbd.keycode == Common::KEYCODE_ESCAPE) { + break; + case Common::KEYCODE_ESCAPE: { const int escRoom = _game->getRoomNum() != _game->getMapRoom() ? _game->getEscRoom() : _game->getPreviousRoomNum(); @@ -202,16 +205,20 @@ bool DraciEngine::handleEvents() { // End any currently running GPL programs _script->endCurrentProgram(); } - } else if (event.kbd.keycode == Common::KEYCODE_m) { + break; + } + case Common::KEYCODE_m: if (_game->getLoopStatus() == kStatusOrdinary) { const int new_room = _game->getRoomNum() != _game->getMapRoom() ? _game->getMapRoom() : _game->getPreviousRoomNum(); _game->scheduleEnteringRoomUsingGate(new_room, 0); } - } else if (event.kbd.keycode == Common::KEYCODE_w) { + break; + case Common::KEYCODE_w: // Show walking map toggle _showWalkingMap = !_showWalkingMap; - } else if (event.kbd.keycode == Common::KEYCODE_i) { + break; + case Common::KEYCODE_i: if (_game->getLoopStatus() == kStatusInventory && _game->getLoopSubstatus() == kSubstatusOrdinary) { _game->inventoryDone(); @@ -219,6 +226,31 @@ bool DraciEngine::handleEvents() { _game->getLoopSubstatus() == kSubstatusOrdinary) { _game->inventoryInit(); } + break; + case Common::KEYCODE_LCTRL: + debugC(6, kDraciGeneralDebugLevel, "Left Ctrl down"); + _mouse->downModifier(0); + break; + case Common::KEYCODE_RCTRL: + debugC(6, kDraciGeneralDebugLevel, "Right Ctrl down"); + _mouse->downModifier(1); + break; + default: + break; + } + break; + case Common::EVENT_KEYUP: + switch (event.kbd.keycode) { + case Common::KEYCODE_LCTRL: + debugC(6, kDraciGeneralDebugLevel, "Left Ctrl up"); + _mouse->upModifier(0); + break; + case Common::KEYCODE_RCTRL: + debugC(6, kDraciGeneralDebugLevel, "Right Ctrl up"); + _mouse->upModifier(1); + break; + default: + break; } break; default: @@ -234,9 +266,8 @@ bool DraciEngine::handleEvents() { } else if (!_showWalkingMap && _anims->getAnimation(kWalkingMapOverlay)->isPlaying()) { _anims->stop(kWalkingMapOverlay); } - - return quit; } + DraciEngine::~DraciEngine() { // Dispose your resources here @@ -275,4 +306,19 @@ Common::Error DraciEngine::run() { return Common::kNoError; } +void DraciEngine::pauseEngineIntern(bool pause) { + Engine::pauseEngineIntern(pause); + if (pause) { + _anims->pauseAnimations(); + } else { + _anims->unpauseAnimations(); + } +} + +void DraciEngine::syncSoundSettings() { + Engine::syncSoundSettings(); + + // TODO: update our volumes +} + } // End of namespace Draci diff --git a/engines/draci/draci.h b/engines/draci/draci.h index 926742732b..7876025b9d 100644 --- a/engines/draci/draci.h +++ b/engines/draci/draci.h @@ -43,14 +43,16 @@ namespace Draci { class DraciEngine : public Engine { public: DraciEngine(OSystem *syst, const ADGameDescription *gameDesc); - ~DraciEngine(); + virtual ~DraciEngine(); int init(); - Common::Error run(); + virtual Common::Error run(); - bool hasFeature(Engine::EngineFeature f) const; + virtual bool hasFeature(Engine::EngineFeature f) const; + virtual void pauseEngineIntern(bool pause); + virtual void syncSoundSettings(); - bool handleEvents(); + void handleEvents(); Screen *_screen; Mouse *_mouse; diff --git a/engines/draci/mouse.cpp b/engines/draci/mouse.cpp index f5eb2bbf4d..69943faa3c 100644 --- a/engines/draci/mouse.cpp +++ b/engines/draci/mouse.cpp @@ -34,6 +34,7 @@ Mouse::Mouse(DraciEngine *vm) { _y = 0; _lButton = false; _rButton = false; + _modifierState = 0; _cursorType = kNormalCursor; _vm = vm; } @@ -41,8 +42,13 @@ Mouse::Mouse(DraciEngine *vm) { void Mouse::handleEvent(Common::Event event) { switch (event.type) { case Common::EVENT_LBUTTONDOWN: - debugC(6, kDraciGeneralDebugLevel, "Left button down (x: %u y: %u)", _x, _y); - _lButton = true; + if (!(_modifierState & 3)) { + debugC(6, kDraciGeneralDebugLevel, "Left button down (x: %u y: %u)", _x, _y); + _lButton = true; + } else { // any Ctrl pressed + debugC(6, kDraciGeneralDebugLevel, "Ctrl-Left button down (x: %u y: %u)", _x, _y); + _rButton = true; + } break; case Common::EVENT_LBUTTONUP: diff --git a/engines/draci/mouse.h b/engines/draci/mouse.h index 629a7634d5..82a577b9d6 100644 --- a/engines/draci/mouse.h +++ b/engines/draci/mouse.h @@ -62,12 +62,17 @@ public: void lButtonSet(bool state) { _lButton = state; } void rButtonSet(bool state) { _rButton = state; } + // Updates the current state of modifiers. The indexes are: 0=left Ctrl, 1=right Ctrl. + void downModifier(int index) { _modifierState |= 1 << index; } + void upModifier(int index) { _modifierState &= ~(1 << index); } + uint16 getPosX() const { return _x; } uint16 getPosY() const { return _y; } private: uint16 _x, _y; bool _lButton, _rButton; + int _modifierState; CursorType _cursorType; DraciEngine *_vm; }; |