diff options
Diffstat (limited to 'engines/mutationofjb/mutationofjb.cpp')
-rw-r--r-- | engines/mutationofjb/mutationofjb.cpp | 164 |
1 files changed, 13 insertions, 151 deletions
diff --git a/engines/mutationofjb/mutationofjb.cpp b/engines/mutationofjb/mutationofjb.cpp index ed4608b330..ea99b328e2 100644 --- a/engines/mutationofjb/mutationofjb.cpp +++ b/engines/mutationofjb/mutationofjb.cpp @@ -37,18 +37,21 @@ #include "mutationofjb/mutationofjb.h" #include "mutationofjb/game.h" #include "mutationofjb/gamedata.h" +#include "mutationofjb/gamescreen.h" #include "mutationofjb/debug.h" #include "mutationofjb/room.h" namespace MutationOfJB { -MutationOfJBEngine::MutationOfJBEngine(OSystem *syst) +MutationOfJBEngine::MutationOfJBEngine(OSystem *syst, const ADGameDescription *gameDesc) : Engine(syst), + _gameDesc(gameDesc), _console(nullptr), _screen(nullptr), _game(nullptr), _mapObjectId(0), - _cursorState(CURSOR_IDLE) { + _cursorState(CURSOR_IDLE), + _currentScreen(nullptr) { const Common::FSNode gameDataDir(ConfMan.get("path")); SearchMan.addSubDirectoryMatching(gameDataDir, "data"); @@ -110,22 +113,6 @@ void MutationOfJBEngine::setCursorState(CursorState cursorState) { updateCursorPalette(); } -void MutationOfJBEngine::updateCursor() { - if (_cursorState == CURSOR_OFF) { - return; - } - - if (_game->isCurrentSceneMap()) { - if (_cursorState != CURSOR_IDLE) { - _cursorState = CURSOR_IDLE; - updateCursorPalette(); - } - } else { - const Common::Point point = _eventMan->getMousePos(); - updateCursorHitTest(point.x, point.y); - } -} - bool MutationOfJBEngine::hasFeature(Engine::EngineFeature f) const { if (f == kSupportsLoadingDuringRuntime || f == kSupportsSavingDuringRuntime) { return true; @@ -179,114 +166,8 @@ Common::Error MutationOfJBEngine::saveGameState(int slot, const Common::String & return Common::kNoError; } -void MutationOfJBEngine::handleNormalScene(const Common::Event &event) { - Scene *const scene = _game->getGameData().getCurrentScene(); - - switch (event.type) { - case Common::EVENT_LBUTTONDOWN: { - const int16 x = event.mouse.x; - const int16 y = event.mouse.y; - - if (Door *const door = scene->findDoor(x, y)) { - if (!_game->startActionSection(_game->getCurrentAction(), door->_name) && _game->getCurrentAction() == ActionInfo::Walk && door->_destSceneId != 0) { - _game->changeScene(door->_destSceneId, _game->getGameData()._partB); - } - } else if (Static *const stat = scene->findStatic(x, y)) { - _game->startActionSection(_game->getCurrentAction(), stat->_name); - } - break; - } - case Common::EVENT_MOUSEMOVE: { - const int16 x = event.mouse.x; - const int16 y = event.mouse.y; - - if (_cursorState != CURSOR_OFF) { - updateCursorHitTest(x, y); - } - break; - } - default: - break; - } - _game->getGameScreen().handleEvent(event); -} - -void MutationOfJBEngine::handleMapScene(const Common::Event &event) { - Scene *const scene = _game->getGameData().getCurrentScene(); - - switch (event.type) { - case Common::EVENT_LBUTTONDOWN: { - const int16 x = event.mouse.x; - const int16 y = event.mouse.y; - - int index = 0; - if (Bitmap *const bitmap = scene->findBitmap(x, y, &index)) { - Static *const stat = scene->getStatic(index); - if (stat && stat->_active == 1) { - _game->startActionSection(ActionInfo::Walk, stat->_name); - } - } - break; - } - case Common::EVENT_MOUSEMOVE: { - const int16 x = event.mouse.x; - const int16 y = event.mouse.y; - - int index = 0; - bool found = false; - if (Bitmap *const bitmap = scene->findBitmap(x, y, &index)) { - Static *const stat = scene->getStatic(index); - if (stat && stat->_active == 1) { - Object *const object = scene->getObject(index); - if (object) { - found = true; - if (index != _mapObjectId) { - if (_mapObjectId) { - _game->getRoom().drawObjectAnimation(_mapObjectId, 1); - _mapObjectId = 0; - } - - _mapObjectId = index; - _game->getRoom().drawObjectAnimation(_mapObjectId, 0); - } - } - } - } - - if (!found && _mapObjectId != 0) { - _game->getRoom().drawObjectAnimation(_mapObjectId, 1); - _mapObjectId = 0; - } - break; - } - default: - break; - } -} - -void MutationOfJBEngine::updateCursorHitTest(int16 x, int16 y) { - Scene *const scene = _game->getGameData().getCurrentScene(); - if (!scene) { - return; - } - - bool entityHit = false; - if (Door *const door = scene->findDoor(x, y)) { - if (door->_destSceneId != 0) { - entityHit = true; - } - } else if (Static *const stat = scene->findStatic(x, y)) { - entityHit = true; - } - bool cursorPaletteChange = false; - if ((_cursorState == CURSOR_ACTIVE && !entityHit) || (_cursorState == CURSOR_IDLE && entityHit)) { - cursorPaletteChange = true; - } - _cursorState = entityHit ? CURSOR_ACTIVE : CURSOR_IDLE; - if (cursorPaletteChange) { - updateCursorPalette(); - } - +const ADGameDescription *MutationOfJBEngine::getGameDescription() const { + return _gameDesc; } Common::Error MutationOfJBEngine::run() { @@ -295,6 +176,7 @@ Common::Error MutationOfJBEngine::run() { _console = new Console(this); _screen = new Graphics::Screen(); _game = new Game(this); + _currentScreen = &_game->getGameScreen(); setupCursor(); @@ -320,39 +202,19 @@ Common::Error MutationOfJBEngine::run() { } break; } - case Common::EVENT_KEYUP: { - switch (event.kbd.ascii) { - case 'g': - _game->setCurrentAction(ActionInfo::Walk); - break; - case 'r': - _game->setCurrentAction(ActionInfo::Talk); - break; - case 's': - _game->setCurrentAction(ActionInfo::Look); - break; - case 'b': - _game->setCurrentAction(ActionInfo::Use); - break; - case 'n': - _game->setCurrentAction(ActionInfo::PickUp); - break; - } - break; - } default: break; } - if (!_game->isCurrentSceneMap()) { - handleNormalScene(event); - } else { - handleMapScene(event); - } + if (_currentScreen) + _currentScreen->handleEvent(event); } _console->onFrame(); _game->update(); + if (_currentScreen) + _currentScreen->update(); + _system->delayMillis(10); _screen->update(); } |