[Scummvm-cvs-logs] scummvm master -> eea1ee445fcac7ecc53e31d258aac697d6b242f1

bluegr bluegr at gmail.com
Fri Dec 26 12:15:45 CET 2014


This automated email contains information about 4 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4258750f50 ZVISION: Rename _halveDelay to _doubleFPS, to match its config setting
5a72eea2bb ZVISION: Move some event/rendering code out of the main engine code
e8820d26e7 ZVISION: Fix a warning
eea1ee445f ZVISION: Move more graphics code out of the main engine code


Commit: 4258750f5025e471ba682945e3091fdaa50c7bc9
    https://github.com/scummvm/scummvm/commit/4258750f5025e471ba682945e3091fdaa50c7bc9
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-12-26T12:07:21+02:00

Commit Message:
ZVISION: Rename _halveDelay to _doubleFPS, to match its config setting

Changed paths:
    engines/zvision/zvision.cpp
    engines/zvision/zvision.h



diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index 11e417d..e9a4486 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -96,7 +96,7 @@ ZVision::ZVision(OSystem *syst, const ZVisionGameDescription *gameDesc)
 	  _menu(nullptr),
 	  _searchManager(nullptr),
 	  _textRenderer(nullptr),
-	  _halveDelay(false),
+	  _doubleFPS(false),
 	  _audioId(0),
 	  _frameRenderDelay(2),
 	  _keyboardVelocity(0),
@@ -213,7 +213,7 @@ void ZVision::initialize() {
 
 	// Create debugger console. It requires GFX to be initialized
 	_console = new Console(this);
-	_halveDelay = ConfMan.getBool("doublefps");
+	_doubleFPS = ConfMan.getBool("doublefps");
 }
 
 Common::Error ZVision::run() {
@@ -255,7 +255,7 @@ Common::Error ZVision::run() {
 		// Ensure non-negative
 		delay = delay < 0 ? 0 : delay;
 
-		if (_halveDelay) {
+		if (_doubleFPS) {
 			delay >>= 1;
 		}
 
@@ -291,7 +291,7 @@ bool ZVision::askQuestion(const Common::String &str) {
 			}
 		}
 		_system->updateScreen();
-		if (_halveDelay)
+		if (_doubleFPS)
 			_system->delayMillis(33);
 		else
 			_system->delayMillis(66);
@@ -319,7 +319,7 @@ void ZVision::delayedMessage(const Common::String &str, uint16 milsecs) {
 				break;
 		}
 		_system->updateScreen();
-		if (_halveDelay)
+		if (_doubleFPS)
 			_system->delayMillis(33);
 		else
 			_system->delayMillis(66);
@@ -365,7 +365,7 @@ bool ZVision::canRender() {
 void ZVision::updateRotation() {
 	int16 _velocity = _mouseVelocity + _keyboardVelocity;
 
-	if (_halveDelay)
+	if (_doubleFPS)
 		_velocity /= 2;
 
 	if (_velocity) {
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index e9b8ca4..d3beae5 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -121,7 +121,7 @@ private:
 	int _frameRenderDelay;
 	int16 _mouseVelocity;
 	int16 _keyboardVelocity;
-	bool _halveDelay;
+	bool _doubleFPS;
 	bool _videoIsPlaying;
 
 	uint8 _cheatBuffer[KEYBUF_SIZE];


Commit: 5a72eea2bb102bafb6da112ea90ad1f4af11e1f2
    https://github.com/scummvm/scummvm/commit/5a72eea2bb102bafb6da112ea90ad1f4af11e1f2
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-12-26T12:41:36+02:00

Commit Message:
ZVISION: Move some event/rendering code out of the main engine code

Changed paths:
    engines/zvision/core/events.cpp
    engines/zvision/graphics/render_manager.cpp
    engines/zvision/graphics/render_manager.h
    engines/zvision/scripting/controls/save_control.cpp
    engines/zvision/zvision.cpp
    engines/zvision/zvision.h



diff --git a/engines/zvision/core/events.cpp b/engines/zvision/core/events.cpp
index 227cf21..70fd425 100644
--- a/engines/zvision/core/events.cpp
+++ b/engines/zvision/core/events.cpp
@@ -39,6 +39,33 @@
 
 namespace ZVision {
 
+void ZVision::pushKeyToCheatBuf(uint8 key) {
+	for (int i = 0; i < KEYBUF_SIZE - 1; i++)
+		_cheatBuffer[i] = _cheatBuffer[i + 1];
+
+	_cheatBuffer[KEYBUF_SIZE - 1] = key;
+}
+
+bool ZVision::checkCode(const char *code) {
+	int codeLen = strlen(code);
+
+	if (codeLen > KEYBUF_SIZE)
+		return false;
+
+	for (int i = 0; i < codeLen; i++)
+		if (code[i] != _cheatBuffer[KEYBUF_SIZE - codeLen + i] && code[i] != '?')
+			return false;
+
+	return true;
+}
+
+uint8 ZVision::getBufferedKey(uint8 pos) {
+	if (pos >= KEYBUF_SIZE)
+		return 0;
+	else
+		return _cheatBuffer[KEYBUF_SIZE - pos - 1];
+}
+
 void ZVision::shortKeys(Common::Event event) {
 	if (event.kbd.hasFlags(Common::KBD_CTRL)) {
 		switch (event.kbd.keycode) {
@@ -70,11 +97,11 @@ void ZVision::cheatCodes(uint8 key) {
 	if (getGameId() == GID_GRANDINQUISITOR) {
 		if (checkCode("IMNOTDEAF")) {
 			// Unknown cheat
-			showDebugMsg(Common::String::format("IMNOTDEAF cheat or debug, not implemented"));
+			_renderManager->showDebugMsg(Common::String::format("IMNOTDEAF cheat or debug, not implemented"));
 		}
 
 		if (checkCode("3100OPB")) {
-			showDebugMsg(Common::String::format("Current location: %c%c%c%c",
+			_renderManager->showDebugMsg(Common::String::format("Current location: %c%c%c%c",
 			                                    _scriptManager->getStateValue(StateKey_World),
 			                                    _scriptManager->getStateValue(StateKey_Room),
 			                                    _scriptManager->getStateValue(StateKey_Node),
@@ -101,7 +128,7 @@ void ZVision::cheatCodes(uint8 key) {
 		}
 
 		if (checkCode("77MASSAVE")) {
-			showDebugMsg(Common::String::format("Current location: %c%c%c%c",
+			_renderManager->showDebugMsg(Common::String::format("Current location: %c%c%c%c",
 			                                    _scriptManager->getStateValue(StateKey_World),
 			                                    _scriptManager->getStateValue(StateKey_Room),
 			                                    _scriptManager->getStateValue(StateKey_Node),
@@ -131,13 +158,13 @@ void ZVision::cheatCodes(uint8 key) {
 	}
 
 	if (checkCode("FRAME"))
-		showDebugMsg(Common::String::format("FPS: ???, not implemented"));
+		_renderManager->showDebugMsg(Common::String::format("FPS: ???, not implemented"));
 
 	if (checkCode("XYZZY"))
 		_scriptManager->setStateValue(StateKey_DebugCheats, 1 - _scriptManager->getStateValue(StateKey_DebugCheats));
 
 	if (checkCode("COMPUTERARCH"))
-		showDebugMsg(Common::String::format("COMPUTERARCH: var-viewer not implemented"));
+		_renderManager->showDebugMsg(Common::String::format("COMPUTERARCH: var-viewer not implemented"));
 
 	if (_scriptManager->getStateValue(StateKey_DebugCheats) == 1)
 		if (checkCode("GO????"))
diff --git a/engines/zvision/graphics/render_manager.cpp b/engines/zvision/graphics/render_manager.cpp
index 07ed6d2..35e3b89 100644
--- a/engines/zvision/graphics/render_manager.cpp
+++ b/engines/zvision/graphics/render_manager.cpp
@@ -39,7 +39,7 @@
 
 namespace ZVision {
 
-RenderManager::RenderManager(ZVision *engine, uint32 windowWidth, uint32 windowHeight, const Common::Rect workingWindow, const Graphics::PixelFormat pixelFormat)
+RenderManager::RenderManager(ZVision *engine, uint32 windowWidth, uint32 windowHeight, const Common::Rect workingWindow, const Graphics::PixelFormat pixelFormat, bool doubleFPS)
 	: _engine(engine),
 	  _system(engine->_system),
 	  _workingWidth(workingWindow.width()),
@@ -51,7 +51,8 @@ RenderManager::RenderManager(ZVision *engine, uint32 windowWidth, uint32 windowH
 	  _backgroundWidth(0),
 	  _backgroundHeight(0),
 	  _backgroundOffset(0),
-	  _renderTable(_workingWidth, _workingHeight) {
+	  _renderTable(_workingWidth, _workingHeight),
+	  _doubleFPS(doubleFPS) {
 
 	_backgroundSurface.create(_workingWidth, _workingHeight, _pixelFormat);
 	_effectSurface.create(_workingWidth, _workingHeight, _pixelFormat);
@@ -1013,4 +1014,81 @@ void RenderManager::bkgFill(uint8 r, uint8 g, uint8 b) {
 }
 #endif
 
+void RenderManager::timedMessage(const Common::String &str, uint16 milsecs) {
+	uint16 msgid = createSubArea();
+	updateSubArea(msgid, str);
+	processSubs(0);
+	renderSceneToScreen();
+	deleteSubArea(msgid, milsecs);
+}
+
+bool RenderManager::askQuestion(const Common::String &str) {
+	uint16 msgid = createSubArea();
+	updateSubArea(msgid, str);
+	processSubs(0);
+	renderSceneToScreen();
+	_engine->stopClock();
+
+	int result = 0;
+
+	while (result == 0) {
+		Common::Event evnt;
+		while (_engine->getEventManager()->pollEvent(evnt)) {
+			if (evnt.type == Common::EVENT_KEYDOWN) {
+				switch (evnt.kbd.keycode) {
+				case Common::KEYCODE_y:
+					result = 2;
+					break;
+				case Common::KEYCODE_n:
+					result = 1;
+					break;
+				default:
+					break;
+				}
+			}
+		}
+		_system->updateScreen();
+		if (_doubleFPS)
+			_system->delayMillis(33);
+		else
+			_system->delayMillis(66);
+	}
+	deleteSubArea(msgid);
+	_engine->startClock();
+	return result == 2;
+}
+
+void RenderManager::delayedMessage(const Common::String &str, uint16 milsecs) {
+	uint16 msgid = createSubArea();
+	updateSubArea(msgid, str);
+	processSubs(0);
+	renderSceneToScreen();
+	_engine->stopClock();
+
+	uint32 stopTime = _system->getMillis() + milsecs;
+	while (_system->getMillis() < stopTime) {
+		Common::Event evnt;
+		while (_engine->getEventManager()->pollEvent(evnt)) {
+			if (evnt.type == Common::EVENT_KEYDOWN &&
+			        (evnt.kbd.keycode == Common::KEYCODE_SPACE ||
+			         evnt.kbd.keycode == Common::KEYCODE_RETURN ||
+			         evnt.kbd.keycode == Common::KEYCODE_ESCAPE))
+				break;
+		}
+		_system->updateScreen();
+		if (_doubleFPS)
+			_system->delayMillis(33);
+		else
+			_system->delayMillis(66);
+	}
+	deleteSubArea(msgid);
+	_engine->startClock();
+}
+
+void RenderManager::showDebugMsg(const Common::String &msg, int16 delay) {
+	uint16 msgid = createSubArea();
+	updateSubArea(msgid, msg);
+	deleteSubArea(msgid, delay);
+}
+
 } // End of namespace ZVision
diff --git a/engines/zvision/graphics/render_manager.h b/engines/zvision/graphics/render_manager.h
index d67ae29..dbaa8fd 100644
--- a/engines/zvision/graphics/render_manager.h
+++ b/engines/zvision/graphics/render_manager.h
@@ -48,7 +48,7 @@ namespace ZVision {
 
 class RenderManager {
 public:
-	RenderManager(ZVision *engine, uint32 windowWidth, uint32 windowHeight, const Common::Rect workingWindow, const Graphics::PixelFormat pixelFormat);
+	RenderManager(ZVision *engine, uint32 windowWidth, uint32 windowHeight, const Common::Rect workingWindow, const Graphics::PixelFormat pixelFormat, bool doubleFPS);
 	~RenderManager();
 
 private:
@@ -137,6 +137,7 @@ private:
 	// Visual effects list
 	EffectsList _effects;
 
+	bool _doubleFPS;
 	
 public:
 	void initialize();
@@ -334,6 +335,11 @@ public:
 	// Fill background surface by color
 	void bkgFill(uint8 r, uint8 g, uint8 b);
 #endif
+
+	bool askQuestion(const Common::String &str);
+	void delayedMessage(const Common::String &str, uint16 milsecs);
+	void timedMessage(const Common::String &str, uint16 milsecs);
+	void showDebugMsg(const Common::String &msg, int16 delay = 3000);
 };
 
 } // End of namespace ZVision
diff --git a/engines/zvision/scripting/controls/save_control.cpp b/engines/zvision/scripting/controls/save_control.cpp
index 3a4dc47..6cedddf 100644
--- a/engines/zvision/scripting/controls/save_control.cpp
+++ b/engines/zvision/scripting/controls/save_control.cpp
@@ -30,6 +30,7 @@
 #include "zvision/text/string_manager.h"
 
 #include "zvision/file/save_manager.h"
+#include "zvision/graphics/render_manager.h"
 
 #include "common/str.h"
 #include "common/stream.h"
@@ -97,18 +98,18 @@ bool SaveControl::process(uint32 deltaTimeInMillis) {
 					if (inp->getText().size() > 0) {
 						bool toSave = true;
 						if (iter->exist)
-							if (!_engine->askQuestion(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVEEXIST)))
+							if (!_engine->getRenderManager()->askQuestion(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVEEXIST)))
 								toSave = false;
 
 						if (toSave) {
 							// FIXME: At this point, the screen shows the save control, so the save game thumbnails will always
 							// show the save control
 							_engine->getSaveManager()->saveGameBuffered(iter->saveId, inp->getText());
-							_engine->delayedMessage(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVED), 2000);
+							_engine->getRenderManager()->delayedMessage(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVED), 2000);
 							_engine->getScriptManager()->changeLocation(_engine->getScriptManager()->getLastMenuLocation());
 						}
 					} else {
-						_engine->timedMessage(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVEEMPTY), 2000);
+						_engine->getRenderManager()->timedMessage(_engine->getStringManager()->getTextLine(StringManager::ZVISION_STR_SAVEEMPTY), 2000);
 					}
 				} else {
 					_engine->getSaveManager()->loadGame(iter->saveId);
diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index e9a4486..575a7af 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -190,7 +190,7 @@ void ZVision::initialize() {
 
 	// Create managers
 	_scriptManager = new ScriptManager(this);
-	_renderManager = new RenderManager(this, WINDOW_WIDTH, WINDOW_HEIGHT, _workingWindow, _resourcePixelFormat);
+	_renderManager = new RenderManager(this, WINDOW_WIDTH, WINDOW_HEIGHT, _workingWindow, _resourcePixelFormat, _doubleFPS);
 	_saveManager = new SaveManager(this);
 	_stringManager = new StringManager(this);
 	_cursorManager = new CursorManager(this, _resourcePixelFormat);
@@ -265,77 +265,6 @@ Common::Error ZVision::run() {
 	return Common::kNoError;
 }
 
-bool ZVision::askQuestion(const Common::String &str) {
-	uint16 msgid = _renderManager->createSubArea();
-	_renderManager->updateSubArea(msgid, str);
-	_renderManager->processSubs(0);
-	_renderManager->renderSceneToScreen();
-	_clock.stop();
-
-	int result = 0;
-
-	while (result == 0) {
-		Common::Event evnt;
-		while (_eventMan->pollEvent(evnt)) {
-			if (evnt.type == Common::EVENT_KEYDOWN) {
-				switch (evnt.kbd.keycode) {
-				case Common::KEYCODE_y:
-					result = 2;
-					break;
-				case Common::KEYCODE_n:
-					result = 1;
-					break;
-				default:
-					break;
-				}
-			}
-		}
-		_system->updateScreen();
-		if (_doubleFPS)
-			_system->delayMillis(33);
-		else
-			_system->delayMillis(66);
-	}
-	_renderManager->deleteSubArea(msgid);
-	_clock.start();
-	return result == 2;
-}
-
-void ZVision::delayedMessage(const Common::String &str, uint16 milsecs) {
-	uint16 msgid = _renderManager->createSubArea();
-	_renderManager->updateSubArea(msgid, str);
-	_renderManager->processSubs(0);
-	_renderManager->renderSceneToScreen();
-	_clock.stop();
-
-	uint32 stopTime = _system->getMillis() + milsecs;
-	while (_system->getMillis() < stopTime) {
-		Common::Event evnt;
-		while (_eventMan->pollEvent(evnt)) {
-			if (evnt.type == Common::EVENT_KEYDOWN &&
-			        (evnt.kbd.keycode == Common::KEYCODE_SPACE ||
-			         evnt.kbd.keycode == Common::KEYCODE_RETURN ||
-			         evnt.kbd.keycode == Common::KEYCODE_ESCAPE))
-				break;
-		}
-		_system->updateScreen();
-		if (_doubleFPS)
-			_system->delayMillis(33);
-		else
-			_system->delayMillis(66);
-	}
-	_renderManager->deleteSubArea(msgid);
-	_clock.start();
-}
-
-void ZVision::timedMessage(const Common::String &str, uint16 milsecs) {
-	uint16 msgid = _renderManager->createSubArea();
-	_renderManager->updateSubArea(msgid, str);
-	_renderManager->processSubs(0);
-	_renderManager->renderSceneToScreen();
-	_renderManager->deleteSubArea(msgid, milsecs);
-}
-
 void ZVision::pauseEngineIntern(bool pause) {
 	_mixer->pauseAll(pause);
 
@@ -506,44 +435,11 @@ uint16 ZVision::getMenuBarEnable() {
 }
 
 bool ZVision::ifQuit() {
-	if (askQuestion(_stringManager->getTextLine(StringManager::ZVISION_STR_EXITPROMT))) {
+	if (_renderManager->askQuestion(_stringManager->getTextLine(StringManager::ZVISION_STR_EXITPROMT))) {
 		quitGame();
 		return true;
 	}
 	return false;
 }
 
-void ZVision::pushKeyToCheatBuf(uint8 key) {
-	for (int i = 0; i < KEYBUF_SIZE - 1; i++)
-		_cheatBuffer[i] = _cheatBuffer[i + 1];
-
-	_cheatBuffer[KEYBUF_SIZE - 1] = key;
-}
-
-bool ZVision::checkCode(const char *code) {
-	int codeLen = strlen(code);
-
-	if (codeLen > KEYBUF_SIZE)
-		return false;
-
-	for (int i = 0; i < codeLen; i++)
-		if (code[i] != _cheatBuffer[KEYBUF_SIZE - codeLen + i] && code[i] != '?')
-			return false;
-
-	return true;
-}
-
-uint8 ZVision::getBufferedKey(uint8 pos) {
-	if (pos >= KEYBUF_SIZE)
-		return 0;
-	else
-		return _cheatBuffer[KEYBUF_SIZE - pos - 1];
-}
-
-void ZVision::showDebugMsg(const Common::String &msg, int16 delay) {
-	uint16 msgid = _renderManager->createSubArea();
-	_renderManager->updateSubArea(msgid, msg);
-	_renderManager->deleteSubArea(msgid, delay);
-}
-
 } // End of namespace ZVision
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index d3beae5..848b278 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -164,6 +164,14 @@ public:
 
 	uint8 getZvisionKey(Common::KeyCode scummKeyCode);
 
+	void startClock() {
+		_clock.start();
+	}
+
+	void stopClock() {
+		_clock.stop();
+	}
+
 	/**
 	 * Play a video until it is finished. This is a blocking call. It will call
 	 * _clock.stop() when the video starts and _clock.start() when the video finishes.
@@ -181,10 +189,6 @@ public:
 	Common::String generateSaveFileName(uint slot);
 	Common::String generateAutoSaveFileName();
 
-	bool askQuestion(const Common::String &str);
-	void delayedMessage(const Common::String &str, uint16 milsecs);
-	void timedMessage(const Common::String &str, uint16 milsecs);
-
 	void setRenderDelay(uint);
 	bool canRender();
 
@@ -197,7 +201,6 @@ public:
 	bool ifQuit();
 
 	void checkBorders();
-	void showDebugMsg(const Common::String &msg, int16 delay = 3000);
 
 	// Engine features
 	bool hasFeature(EngineFeature f) const;


Commit: e8820d26e7d673f96c416f93dd16811107e94cb4
    https://github.com/scummvm/scummvm/commit/e8820d26e7d673f96c416f93dd16811107e94cb4
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-12-26T12:42:01+02:00

Commit Message:
ZVISION: Fix a warning

Changed paths:
    engines/zvision/scripting/controls/input_control.cpp



diff --git a/engines/zvision/scripting/controls/input_control.cpp b/engines/zvision/scripting/controls/input_control.cpp
index e1e6e6e..4abc0c9 100644
--- a/engines/zvision/scripting/controls/input_control.cpp
+++ b/engines/zvision/scripting/controls/input_control.cpp
@@ -223,7 +223,7 @@ bool InputControl::process(uint32 deltaTimeInMillis) {
 		if (needDraw) {
 			_animation->seekToFrame(_frame);
 			const Graphics::Surface *srf = _animation->decodeNextFrame();
-			uint32 xx = _textRectangle.left + _txtWidth;
+			int16 xx = _textRectangle.left + _txtWidth;
 			if (xx >= _textRectangle.left + (_textRectangle.width() - (int16)_animation->getWidth()))
 				xx = _textRectangle.left + _textRectangle.width() - (int16)_animation->getWidth();
 			_engine->getRenderManager()->blitSurfaceToBkg(*srf, xx, _textRectangle.top);


Commit: eea1ee445fcac7ecc53e31d258aac697d6b242f1
    https://github.com/scummvm/scummvm/commit/eea1ee445fcac7ecc53e31d258aac697d6b242f1
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2014-12-26T13:14:24+02:00

Commit Message:
ZVISION: Move more graphics code out of the main engine code

Changed paths:
    engines/zvision/core/events.cpp
    engines/zvision/graphics/render_manager.cpp
    engines/zvision/graphics/render_manager.h
    engines/zvision/scripting/actions.cpp
    engines/zvision/scripting/script_manager.cpp
    engines/zvision/zvision.cpp
    engines/zvision/zvision.h



diff --git a/engines/zvision/core/events.cpp b/engines/zvision/core/events.cpp
index 70fd425..5f29a68 100644
--- a/engines/zvision/core/events.cpp
+++ b/engines/zvision/core/events.cpp
@@ -30,6 +30,7 @@
 #include "zvision/scripting/script_manager.h"
 #include "zvision/scripting/menu.h"
 #include "zvision/sound/zork_raw.h"
+#include "zvision/text/string_manager.h"
 
 #include "common/events.h"
 #include "common/system.h"
@@ -70,19 +71,19 @@ void ZVision::shortKeys(Common::Event event) {
 	if (event.kbd.hasFlags(Common::KBD_CTRL)) {
 		switch (event.kbd.keycode) {
 		case Common::KEYCODE_s:
-			if (getMenuBarEnable() & kMenubarSave)
+			if (_menu->getEnable() & kMenubarSave)
 				_scriptManager->changeLocation('g', 'j', 's', 'e', 0);
 			break;
 		case Common::KEYCODE_r:
-			if (getMenuBarEnable() & kMenubarRestore)
+			if (_menu->getEnable() & kMenubarRestore)
 				_scriptManager->changeLocation('g', 'j', 'r', 'e', 0);
 			break;
 		case Common::KEYCODE_p:
-			if (getMenuBarEnable() & kMenubarSettings)
+			if (_menu->getEnable() & kMenubarSettings)
 				_scriptManager->changeLocation('g', 'j', 'p', 'e', 0);
 			break;
 		case Common::KEYCODE_q:
-			if (getMenuBarEnable() & kMenubarExit)
+			if (_menu->getEnable() & kMenubarExit)
 				ifQuit();
 			break;
 		default:
@@ -482,4 +483,12 @@ uint8 ZVision::getZvisionKey(Common::KeyCode scummKeyCode) {
 	return 0;
 }
 
+bool ZVision::ifQuit() {
+	if (_renderManager->askQuestion(_stringManager->getTextLine(StringManager::ZVISION_STR_EXITPROMT))) {
+		quitGame();
+		return true;
+	}
+	return false;
+}
+
 } // End of namespace ZVision
diff --git a/engines/zvision/graphics/render_manager.cpp b/engines/zvision/graphics/render_manager.cpp
index 35e3b89..0a48ae6 100644
--- a/engines/zvision/graphics/render_manager.cpp
+++ b/engines/zvision/graphics/render_manager.cpp
@@ -1091,4 +1091,137 @@ void RenderManager::showDebugMsg(const Common::String &msg, int16 delay) {
 	deleteSubArea(msgid, delay);
 }
 
+void RenderManager::updateRotation() {
+	int16 _velocity = _engine->getMouseVelocity() + _engine->getKeyboardVelocity();
+	ScriptManager *scriptManager = _engine->getScriptManager();
+
+	if (_doubleFPS)
+		_velocity /= 2;
+
+	if (_velocity) {
+		RenderTable::RenderState renderState = _renderTable.getRenderState();
+		if (renderState == RenderTable::PANORAMA) {
+			int16 startPosition = scriptManager->getStateValue(StateKey_ViewPos);
+
+			int16 newPosition = startPosition + (_renderTable.getPanoramaReverse() ? -_velocity : _velocity);
+
+			int16 zeroPoint = _renderTable.getPanoramaZeroPoint();
+			if (startPosition >= zeroPoint && newPosition < zeroPoint)
+				scriptManager->setStateValue(StateKey_Rounds, scriptManager->getStateValue(StateKey_Rounds) - 1);
+			if (startPosition <= zeroPoint && newPosition > zeroPoint)
+				scriptManager->setStateValue(StateKey_Rounds, scriptManager->getStateValue(StateKey_Rounds) + 1);
+
+			int16 screenWidth = getBkgSize().x;
+			if (screenWidth)
+				newPosition %= screenWidth;
+
+			if (newPosition < 0)
+				newPosition += screenWidth;
+
+			setBackgroundPosition(newPosition);
+		} else if (renderState == RenderTable::TILT) {
+			int16 startPosition = scriptManager->getStateValue(StateKey_ViewPos);
+
+			int16 newPosition = startPosition + _velocity;
+
+			int16 screenHeight = getBkgSize().y;
+			int16 tiltGap = _renderTable.getTiltGap();
+
+			if (newPosition >= (screenHeight - tiltGap))
+				newPosition = screenHeight - tiltGap;
+			if (newPosition <= tiltGap)
+				newPosition = tiltGap;
+
+			setBackgroundPosition(newPosition);
+		}
+	}
+}
+
+void RenderManager::checkBorders() {
+	RenderTable::RenderState renderState = _renderTable.getRenderState();
+	if (renderState == RenderTable::PANORAMA) {
+		int16 startPosition = _engine->getScriptManager()->getStateValue(StateKey_ViewPos);
+
+		int16 newPosition = startPosition;
+
+		int16 screenWidth = getBkgSize().x;
+
+		if (screenWidth)
+			newPosition %= screenWidth;
+
+		if (newPosition < 0)
+			newPosition += screenWidth;
+
+		if (startPosition != newPosition)
+			setBackgroundPosition(newPosition);
+	} else if (renderState == RenderTable::TILT) {
+		int16 startPosition = _engine->getScriptManager()->getStateValue(StateKey_ViewPos);
+
+		int16 newPosition = startPosition;
+
+		int16 screenHeight = getBkgSize().y;
+		int16 tiltGap = _renderTable.getTiltGap();
+
+		if (newPosition >= (screenHeight - tiltGap))
+			newPosition = screenHeight - tiltGap;
+		if (newPosition <= tiltGap)
+			newPosition = tiltGap;
+
+		if (startPosition != newPosition)
+			setBackgroundPosition(newPosition);
+	}
+}
+
+void RenderManager::rotateTo(int16 _toPos, int16 _time) {
+	if (_renderTable.getRenderState() != RenderTable::PANORAMA)
+		return;
+
+	if (_time == 0)
+		_time = 1;
+
+	int32 maxX = getBkgSize().x;
+	int32 curX = getCurrentBackgroundOffset();
+	int32 dx = 0;
+
+	if (curX == _toPos)
+		return;
+
+	if (curX > _toPos) {
+		if (curX - _toPos > maxX / 2)
+			dx = (_toPos + (maxX - curX)) / _time;
+		else
+			dx = -(curX - _toPos) / _time;
+	} else {
+		if (_toPos - curX > maxX / 2)
+			dx = -((maxX - _toPos) + curX) / _time;
+		else
+			dx = (_toPos - curX) / _time;
+	}
+
+	_engine->stopClock();
+
+	for (int16 i = 0; i <= _time; i++) {
+		if (i == _time)
+			curX = _toPos;
+		else
+			curX += dx;
+
+		if (curX < 0)
+			curX = maxX - curX;
+		else if (curX >= maxX)
+			curX %= maxX;
+
+		setBackgroundPosition(curX);
+
+		prepareBackground();
+		renderSceneToScreen();
+
+		_system->updateScreen();
+
+		_system->delayMillis(500 / _time);
+	}
+
+	_engine->startClock();
+}
+
 } // End of namespace ZVision
diff --git a/engines/zvision/graphics/render_manager.h b/engines/zvision/graphics/render_manager.h
index dbaa8fd..30e5145 100644
--- a/engines/zvision/graphics/render_manager.h
+++ b/engines/zvision/graphics/render_manager.h
@@ -340,6 +340,10 @@ public:
 	void delayedMessage(const Common::String &str, uint16 milsecs);
 	void timedMessage(const Common::String &str, uint16 milsecs);
 	void showDebugMsg(const Common::String &msg, int16 delay = 3000);
+
+	void checkBorders();
+	void rotateTo(int16 to, int16 time);
+	void updateRotation();
 };
 
 } // End of namespace ZVision
diff --git a/engines/zvision/scripting/actions.cpp b/engines/zvision/scripting/actions.cpp
index c26a93f..7c3463b 100644
--- a/engines/zvision/scripting/actions.cpp
+++ b/engines/zvision/scripting/actions.cpp
@@ -30,6 +30,7 @@
 #include "zvision/sound/zork_raw.h"
 #include "zvision/video/zork_avi_decoder.h"
 #include "zvision/file/save_manager.h"
+#include "zvision/scripting/menu.h"
 #include "zvision/scripting/sidefx/timer_node.h"
 #include "zvision/scripting/sidefx/music_node.h"
 #include "zvision/scripting/sidefx/syncsound_node.h"
@@ -439,7 +440,7 @@ ActionMenuBarEnable::ActionMenuBarEnable(ZVision *engine, int32 slotkey, const C
 }
 
 bool ActionMenuBarEnable::execute() {
-	_engine->menuBarEnable(_menus);
+	_engine->getMenuHandler()->setEnable(_menus);
 	return true;
 }
 
@@ -819,7 +820,7 @@ ActionRotateTo::ActionRotateTo(ZVision *engine, int32 slotkey, const Common::Str
 }
 
 bool ActionRotateTo::execute() {
-	_engine->rotateTo(_toPos, _time);
+	_engine->getRenderManager()->rotateTo(_toPos, _time);
 
 	return true;
 }
diff --git a/engines/zvision/scripting/script_manager.cpp b/engines/zvision/scripting/script_manager.cpp
index 2a4aa5f..1a2b836 100644
--- a/engines/zvision/scripting/script_manager.cpp
+++ b/engines/zvision/scripting/script_manager.cpp
@@ -29,6 +29,7 @@
 #include "zvision/graphics/cursors/cursor_manager.h"
 #include "zvision/file/save_manager.h"
 #include "zvision/scripting/actions.h"
+#include "zvision/scripting/menu.h"
 #include "zvision/scripting/sidefx/timer_node.h"
 
 #include "common/algorithm.h"
@@ -583,7 +584,7 @@ void ScriptManager::ChangeLocationReal() {
 	_referenceTable.clear();
 	addPuzzlesToReferenceTable(universe);
 
-	_engine->menuBarEnable(0xFFFF);
+	_engine->getMenuHandler()->setEnable(0xFFFF);
 
 	if (_nextLocation.world != _currentLocation.world) {
 		cleanScriptScope(nodeview);
@@ -652,7 +653,7 @@ void ScriptManager::ChangeLocationReal() {
 		execScope(nodeview);
 	}
 
-	_engine->checkBorders();
+	_engine->getRenderManager()->checkBorders();
 }
 
 void ScriptManager::serialize(Common::WriteStream *stream) {
diff --git a/engines/zvision/zvision.cpp b/engines/zvision/zvision.cpp
index 575a7af..bd215f4 100644
--- a/engines/zvision/zvision.cpp
+++ b/engines/zvision/zvision.cpp
@@ -232,7 +232,7 @@ Common::Error ZVision::run() {
 		_cursorManager->setItemID(_scriptManager->getStateValue(StateKey_InventoryItem));
 
 		processEvents();
-		updateRotation();
+		_renderManager->updateRotation();
 
 		_scriptManager->update(deltaTime);
 		_menu->process(deltaTime);
@@ -244,7 +244,7 @@ Common::Error ZVision::run() {
 		_renderManager->renderSceneToScreen();
 
 		// Update the screen
-		if (_frameRenderDelay <= 0) {
+		if (canRender()) {
 			_system->updateScreen();
 		} else {
 			_frameRenderDelay--;
@@ -291,155 +291,4 @@ bool ZVision::canRender() {
 	return _frameRenderDelay <= 0;
 }
 
-void ZVision::updateRotation() {
-	int16 _velocity = _mouseVelocity + _keyboardVelocity;
-
-	if (_doubleFPS)
-		_velocity /= 2;
-
-	if (_velocity) {
-		RenderTable::RenderState renderState = _renderManager->getRenderTable()->getRenderState();
-		if (renderState == RenderTable::PANORAMA) {
-			int16 startPosition = _scriptManager->getStateValue(StateKey_ViewPos);
-
-			int16 newPosition = startPosition + (_renderManager->getRenderTable()->getPanoramaReverse() ? -_velocity : _velocity);
-
-			int16 zeroPoint = _renderManager->getRenderTable()->getPanoramaZeroPoint();
-			if (startPosition >= zeroPoint && newPosition < zeroPoint)
-				_scriptManager->setStateValue(StateKey_Rounds, _scriptManager->getStateValue(StateKey_Rounds) - 1);
-			if (startPosition <= zeroPoint && newPosition > zeroPoint)
-				_scriptManager->setStateValue(StateKey_Rounds, _scriptManager->getStateValue(StateKey_Rounds) + 1);
-
-			int16 screenWidth = _renderManager->getBkgSize().x;
-			if (screenWidth)
-				newPosition %= screenWidth;
-
-			if (newPosition < 0)
-				newPosition += screenWidth;
-
-			_renderManager->setBackgroundPosition(newPosition);
-		} else if (renderState == RenderTable::TILT) {
-			int16 startPosition = _scriptManager->getStateValue(StateKey_ViewPos);
-
-			int16 newPosition = startPosition + _velocity;
-
-			int16 screenHeight = _renderManager->getBkgSize().y;
-			int16 tiltGap = _renderManager->getRenderTable()->getTiltGap();
-
-			if (newPosition >= (screenHeight - tiltGap))
-				newPosition = screenHeight - tiltGap;
-			if (newPosition <= tiltGap)
-				newPosition = tiltGap;
-
-			_renderManager->setBackgroundPosition(newPosition);
-		}
-	}
-}
-
-void ZVision::checkBorders() {
-	RenderTable::RenderState renderState = _renderManager->getRenderTable()->getRenderState();
-	if (renderState == RenderTable::PANORAMA) {
-		int16 startPosition = _scriptManager->getStateValue(StateKey_ViewPos);
-
-		int16 newPosition = startPosition;
-
-		int16 screenWidth = _renderManager->getBkgSize().x;
-
-		if (screenWidth)
-			newPosition %= screenWidth;
-
-		if (newPosition < 0)
-			newPosition += screenWidth;
-
-		if (startPosition != newPosition)
-			_renderManager->setBackgroundPosition(newPosition);
-	} else if (renderState == RenderTable::TILT) {
-		int16 startPosition = _scriptManager->getStateValue(StateKey_ViewPos);
-
-		int16 newPosition = startPosition;
-
-		int16 screenHeight = _renderManager->getBkgSize().y;
-		int16 tiltGap = _renderManager->getRenderTable()->getTiltGap();
-
-		if (newPosition >= (screenHeight - tiltGap))
-			newPosition = screenHeight - tiltGap;
-		if (newPosition <= tiltGap)
-			newPosition = tiltGap;
-
-		if (startPosition != newPosition)
-			_renderManager->setBackgroundPosition(newPosition);
-	}
-}
-
-void ZVision::rotateTo(int16 _toPos, int16 _time) {
-	if (_renderManager->getRenderTable()->getRenderState() != RenderTable::PANORAMA)
-		return;
-
-	if (_time == 0)
-		_time = 1;
-
-	int32 maxX = _renderManager->getBkgSize().x;
-	int32 curX = _renderManager->getCurrentBackgroundOffset();
-	int32 dx = 0;
-
-	if (curX == _toPos)
-		return;
-
-	if (curX > _toPos) {
-		if (curX - _toPos > maxX / 2)
-			dx = (_toPos + (maxX - curX)) / _time;
-		else
-			dx = -(curX - _toPos) / _time;
-	} else {
-		if (_toPos - curX > maxX / 2)
-			dx = -((maxX - _toPos) + curX) / _time;
-		else
-			dx = (_toPos - curX) / _time;
-	}
-
-	_clock.stop();
-
-	for (int16 i = 0; i <= _time; i++) {
-		if (i == _time)
-			curX = _toPos;
-		else
-			curX += dx;
-
-		if (curX < 0)
-			curX = maxX - curX;
-		else if (curX >= maxX)
-			curX %= maxX;
-
-		_renderManager->setBackgroundPosition(curX);
-
-		_renderManager->prepareBackground();
-		_renderManager->renderSceneToScreen();
-
-		_system->updateScreen();
-
-		_system->delayMillis(500 / _time);
-	}
-
-	_clock.start();
-}
-
-void ZVision::menuBarEnable(uint16 menus) {
-	if (_menu)
-		_menu->setEnable(menus);
-}
-
-uint16 ZVision::getMenuBarEnable() {
-	if (_menu)
-		return _menu->getEnable();
-	return 0;
-}
-
-bool ZVision::ifQuit() {
-	if (_renderManager->askQuestion(_stringManager->getTextLine(StringManager::ZVISION_STR_EXITPROMT))) {
-		quitGame();
-		return true;
-	}
-	return false;
-}
-
 } // End of namespace ZVision
diff --git a/engines/zvision/zvision.h b/engines/zvision/zvision.h
index 848b278..dc1ac1b 100644
--- a/engines/zvision/zvision.h
+++ b/engines/zvision/zvision.h
@@ -155,12 +155,21 @@ public:
 	MidiManager *getMidiManager() const {
 		return _midiManager;
 	}
+	MenuHandler *getMenuHandler() const {
+		return _menu;
+	}
 	Common::RandomSource *getRandomSource() const {
 		return _rnd;
 	}
 	ZVisionGameId getGameId() const {
 		return _gameDescription->gameId;
 	}
+	int16 getKeyboardVelocity() const {
+		return _keyboardVelocity;
+	}
+	int16 getMouseVelocity() const {
+		return _mouseVelocity;
+	}
 
 	uint8 getZvisionKey(Common::KeyCode scummKeyCode);
 
@@ -184,8 +193,6 @@ public:
 	void playVideo(Video::VideoDecoder &videoDecoder, const Common::Rect &destRect = Common::Rect(0, 0, 0, 0), bool skippable = true, Subtitle *sub = NULL);
 	Video::VideoDecoder *loadAnimation(const Common::String &fileName);
 
-	void rotateTo(int16 to, int16 time);
-
 	Common::String generateSaveFileName(uint slot);
 	Common::String generateAutoSaveFileName();
 
@@ -195,13 +202,8 @@ public:
 	void loadSettings();
 	void saveSettings();
 
-	void menuBarEnable(uint16 menus);
-	uint16 getMenuBarEnable();
-
 	bool ifQuit();
 
-	void checkBorders();
-
 	// Engine features
 	bool hasFeature(EngineFeature f) const;
 	bool canLoadGameStateCurrently();
@@ -218,7 +220,6 @@ private:
 	void processEvents();
 
 	void onMouseMove(const Common::Point &pos);
-	void updateRotation();
 
 	void registerDefaultSettings();
 	void shortKeys(Common::Event);






More information about the Scummvm-git-logs mailing list