aboutsummaryrefslogtreecommitdiff
path: root/engines/mutationofjb/mutationofjb.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mutationofjb/mutationofjb.cpp')
-rw-r--r--engines/mutationofjb/mutationofjb.cpp164
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();
}