From c7fa8e7d1024e4447a7396b5099870d01b775746 Mon Sep 17 00:00:00 2001 From: Einar Johan Trøan Sømåen Date: Fri, 27 Jul 2012 19:35:20 +0200 Subject: WINTERMUTE: Move settings-files to save-dir (gzipped xml now) --- engines/wintermute/ad/ad_game.cpp | 2 +- engines/wintermute/ad/ad_game.h | 2 +- engines/wintermute/base/base_game.cpp | 7 ++- engines/wintermute/base/base_game.h | 2 +- engines/wintermute/base/base_registry.cpp | 31 ++++++----- .../base/gfx/osystem/base_render_osystem.cpp | 25 +-------- engines/wintermute/platform_osystem.cpp | 42 +++------------ engines/wintermute/platform_osystem.h | 2 - engines/wintermute/system/sys_class_registry.cpp | 4 +- engines/wintermute/utils/path_util.cpp | 63 ---------------------- engines/wintermute/utils/path_util.h | 5 -- engines/wintermute/wintermute.cpp | 4 +- 12 files changed, 38 insertions(+), 151 deletions(-) (limited to 'engines/wintermute') diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp index 66ec582f21..b922123e38 100644 --- a/engines/wintermute/ad/ad_game.cpp +++ b/engines/wintermute/ad/ad_game.cpp @@ -66,7 +66,7 @@ namespace WinterMute { IMPLEMENT_PERSISTENT(AdGame, true) ////////////////////////////////////////////////////////////////////////// -AdGame::AdGame(): BaseGame() { +AdGame::AdGame(const Common::String &gameId): BaseGame(gameId) { _responseBox = NULL; _inventoryBox = NULL; diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h index ef671b0a64..7f76b959d4 100644 --- a/engines/wintermute/ad/ad_game.h +++ b/engines/wintermute/ad/ad_game.h @@ -118,7 +118,7 @@ public: bool addObject(AdObject *object); AdScene *_scene; bool initLoop(); - AdGame(); + AdGame(const Common::String &gameId); virtual ~AdGame(); BaseArray _objects; diff --git a/engines/wintermute/base/base_game.cpp b/engines/wintermute/base/base_game.cpp index 8fd2b193b1..3e6cb6e043 100644 --- a/engines/wintermute/base/base_game.cpp +++ b/engines/wintermute/base/base_game.cpp @@ -80,7 +80,7 @@ IMPLEMENT_PERSISTENT(BaseGame, true) ////////////////////////////////////////////////////////////////////// -BaseGame::BaseGame(): BaseObject(this) { +BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId) { _shuttingDown = false; _state = GAME_RUNNING; @@ -259,6 +259,7 @@ BaseGame::BaseGame(): BaseObject(this) { _autoSaveSlot = 999; _cursorHidden = false; + // Block kept as a reminder that the engine CAN run in constrained/touch-mode /*#ifdef __IPHONEOS__ _touchInterface = true; _constrainedMemory = true; // TODO differentiate old and new iOS devices @@ -331,7 +332,7 @@ BaseGame::~BaseGame() { _stringTable = NULL; DEBUG_DebugDisable(); - BasePlatform::outputDebugString("--- shutting down normally ---\n"); + debugC(kWinterMuteDebugLog, "--- shutting down normally ---\n"); } @@ -2249,6 +2250,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack ////////////////////////////////////////////////////////////////////////// else if (strcmp(name, "ShowStatusLine") == 0) { stack->correctParams(0); + // Block kept to show intention of opcode. /*#ifdef __IPHONEOS__ IOS_ShowStatusLine(TRUE); #endif*/ @@ -2262,6 +2264,7 @@ bool BaseGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack ////////////////////////////////////////////////////////////////////////// else if (strcmp(name, "HideStatusLine") == 0) { stack->correctParams(0); + // Block kept to show intention of opcode. /*#ifdef __IPHONEOS__ IOS_ShowStatusLine(FALSE); #endif*/ diff --git a/engines/wintermute/base/base_game.h b/engines/wintermute/base/base_game.h index d4a4c0e682..76881eefd7 100644 --- a/engines/wintermute/base/base_game.h +++ b/engines/wintermute/base/base_game.h @@ -147,7 +147,7 @@ public: SXMath *_mathClass; BaseSurfaceStorage *_surfaceStorage; BaseFontStorage *_fontStorage; - BaseGame(); + BaseGame(const Common::String &gameId); virtual ~BaseGame(); void DEBUG_DebugDisable(); diff --git a/engines/wintermute/base/base_registry.cpp b/engines/wintermute/base/base_registry.cpp index 441d00c05b..02f1da7322 100644 --- a/engines/wintermute/base/base_registry.cpp +++ b/engines/wintermute/base/base_registry.cpp @@ -32,6 +32,8 @@ #include "engines/wintermute/utils/path_util.h" #include "engines/wintermute/utils/string_util.h" #include "engines/wintermute/utils/utils.h" +#include "engines/wintermute/wintermute.h" +#include "common/savefile.h" #include "common/config-manager.h" #include "common/file.h" @@ -173,16 +175,14 @@ char *BaseRegistry::getIniName() { ////////////////////////////////////////////////////////////////////////// void BaseRegistry::loadValues(bool local) { - if (local) { - loadXml("settings.xml", _localValues); - } else { - loadXml(PathUtil::combine(_gameRef->getDataDir(), "settings.xml"), _values); - } + Common::String filename = Common::String(_gameRef->getGameId()) + "-settings.xml"; + loadXml(filename, _values); } ////////////////////////////////////////////////////////////////////////// void BaseRegistry::saveValues() { - saveXml(PathUtil::combine(_gameRef->getDataDir(), "settings.xml"), _values); + Common::String filename = Common::String(_gameRef->getGameId()) + "-settings.xml"; + saveXml(filename, _values); } ////////////////////////////////////////////////////////////////////////// @@ -212,10 +212,15 @@ AnsiString BaseRegistry::getValue(PathValueMap &values, const AnsiString path, c ////////////////////////////////////////////////////////////////////////// void BaseRegistry::loadXml(const AnsiString fileName, PathValueMap &values) { - TiXmlDocument doc(fileName.c_str()); - if (!doc.LoadFile()) { + Common::SeekableReadStream *stream = g_wintermute->getSaveFileMan()->openForLoading(fileName); + if (!stream) { return; } + char *data = new char[stream->size()]; + stream->read(data, stream->size()); + TiXmlDocument doc; + doc.Parse(data); + delete data; TiXmlElement *rootElem = doc.RootElement(); if (!rootElem || Common::String(rootElem->Value()) != "Settings") { // TODO: Avoid this strcmp-use. (Hack for now, since we might drop TinyXML all together) @@ -260,14 +265,14 @@ void BaseRegistry::saveXml(const AnsiString fileName, PathValueMap &values) { TiXmlPrinter printer; doc.Accept(&printer); - Common::DumpFile stream; - stream.open(fileName.c_str()); + Common::WriteStream *stream = g_wintermute->getSaveFileMan()->openForSaving(fileName); - if (!stream.isOpen()) { + if (!stream) { return; } else { - stream.write(printer.CStr(), printer.Size()); - stream.close(); + stream->write(printer.CStr(), printer.Size()); + stream->finalize(); + delete stream; } } diff --git a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp index 90dda1af72..58839d5ffe 100644 --- a/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp +++ b/engines/wintermute/base/gfx/osystem/base_render_osystem.cpp @@ -124,33 +124,10 @@ bool BaseRenderOSystem::initRenderer(int width, int height, bool windowed) { _realWidth = width; _realHeight = height; + //TODO: Tiny resolution-displays might want to do some resolution-selection logic here - // find suitable resolution - /*#ifdef __IPHONEOS__ - _realWidth = 480; - _realHeight = 320; - - int numModes = SDL_GetNumDisplayModes(0); - for (int i = 0; i < numModes; i++) { - SDL_DisplayMode mode; - SDL_GetDisplayMode(0, i, &mode); - - if (mode.w > mode.h) { - _realWidth = mode.w; - _realHeight = mode.h; - break; - } - } - #else*/ _realWidth = _gameRef->_registry->readInt("Debug", "ForceResWidth", _width); _realHeight = _gameRef->_registry->readInt("Debug", "ForceResHeight", _height); -//#endif - - /* - _realWidth = 480; - _realHeight = 320; - */ - float origAspect = (float)_width / (float)_height; float realAspect = (float)_realWidth / (float)_realHeight; diff --git a/engines/wintermute/platform_osystem.cpp b/engines/wintermute/platform_osystem.cpp index 32d53e3a50..b2a0b976d4 100644 --- a/engines/wintermute/platform_osystem.cpp +++ b/engines/wintermute/platform_osystem.cpp @@ -81,21 +81,7 @@ void BasePlatform::handleEvent(Common::Event *event) { case Common::EVENT_WHEELDOWN: if (_gameRef) _gameRef->handleMouseWheel(event->mouse.y); break; - /*#ifdef __IPHONEOS__ - { - BaseRenderOSystem *renderer = static_cast(_gameRef->_renderer); - POINT p; - GetCursorPos(&p); - _gameRef->SetActiveObject(renderer->GetObjectAt(p.x, p.y)); - - if (_gameRef->_activeObject != NULL && strcmp(_gameRef->_activeObject->getClassName(), "UIButton") == 0) { - UIButton *btn = static_cast(_gameRef->_activeObject); - if (btn->_visible && !btn->_disable) btn->_press = true; - } - } - #endif*/ - -//TODO +//TODO: Handle MouseWheel /* case SDL_MOUSEWHEEL: if (_gameRef) _gameRef->handleMouseWheel(event->wheel.y); break; @@ -114,10 +100,8 @@ void BasePlatform::handleEvent(Common::Event *event) { break; case SDL_WINDOWEVENT_FOCUS_LOST: case SDL_WINDOWEVENT_MINIMIZED: - #ifndef __IPHONEOS__ if (_gameRef) _gameRef->OnActivate(false, false); SDL_ShowCursor(SDL_ENABLE); - #endif break; case SDL_WINDOWEVENT_CLOSE: @@ -128,15 +112,15 @@ void BasePlatform::handleEvent(Common::Event *event) { */ case Common::EVENT_QUIT: case Common::EVENT_RTL: -/*#ifdef __IPHONEOS__ - if (_gameRef) { - _gameRef->AutoSaveOnExit(); - _gameRef->_quitting = true; - } -#else*/ +// Block kept in case we want to support autoSaveOnExit. +//#ifdef __IPHONEOS__ +// if (_gameRef) { +// _gameRef->AutoSaveOnExit(); +// _gameRef->_quitting = true; +// } +//#else*/ if (_gameRef) _gameRef->onWindowClose(); //#endif - break; default: // TODO: Do we care about any other events? @@ -148,16 +132,6 @@ void BasePlatform::handleEvent(Common::Event *event) { ////////////////////////////////////////////////////////////////////////// // Win32 API bindings -////////////////////////////////////////////////////////////////////////// -void BasePlatform::outputDebugString(const char *lpOutputString) { -/* -#ifdef __WIN32__ - ::OutputDebugString(lpOutputString); -#endif -*/ -} - - ////////////////////////////////////////////////////////////////////////// bool BasePlatform::getCursorPos(Point32 *lpPoint) { BaseRenderOSystem *renderer = static_cast(_gameRef->_renderer); diff --git a/engines/wintermute/platform_osystem.h b/engines/wintermute/platform_osystem.h index 14b8c959a8..53462724bd 100644 --- a/engines/wintermute/platform_osystem.h +++ b/engines/wintermute/platform_osystem.h @@ -45,8 +45,6 @@ public: static AnsiString getPlatformName(); // Win32 API bindings - static void outputDebugString(const char *lpOutputString); - //static uint32 getTime(); static bool getCursorPos(Point32 *lpPoint); static bool setCursorPos(int x, int y); static bool showWindow(int nCmdShow); diff --git a/engines/wintermute/system/sys_class_registry.cpp b/engines/wintermute/system/sys_class_registry.cpp index 47910af4e8..09e43529e3 100644 --- a/engines/wintermute/system/sys_class_registry.cpp +++ b/engines/wintermute/system/sys_class_registry.cpp @@ -82,9 +82,7 @@ bool SystemClassRegistry::unregisterClass(SystemClass *classObj) { } if (classObj->getNumInstances() != 0) { - char str[MAX_PATH_LENGTH]; - sprintf(str, "Memory leak@class %-20s: %d instance(s) left\n", classObj->getName().c_str(), classObj->getNumInstances()); - BasePlatform::outputDebugString(str); + debugC(WinterMute::kWinterMuteDebugSaveGame, "Memory leak@class %-20s: %d instance(s) left\n", classObj->getName().c_str(), classObj->getNumInstances()); } _classes.erase(it); diff --git a/engines/wintermute/utils/path_util.cpp b/engines/wintermute/utils/path_util.cpp index 4e36c3e316..db1b479dab 100644 --- a/engines/wintermute/utils/path_util.cpp +++ b/engines/wintermute/utils/path_util.cpp @@ -67,101 +67,38 @@ AnsiString PathUtil::combine(const AnsiString &path1, const AnsiString &path2) { ////////////////////////////////////////////////////////////////////////// AnsiString PathUtil::getDirectoryName(const AnsiString &path) { AnsiString newPath = unifySeparators(path); - - //size_t pos = newPath.find_last_of(L'/'); Common::String filename = getFileName(path); return Common::String(path.c_str(), path.size() - filename.size()); - //if (pos == AnsiString::npos) return ""; - //else return newPath.substr(0, pos + 1); } ////////////////////////////////////////////////////////////////////////// AnsiString PathUtil::getFileName(const AnsiString &path) { AnsiString newPath = unifySeparators(path); - - //size_t pos = newPath.find_last_of(L'/'); TODO REMOVE. Common::String lastPart = Common::lastPathComponent(newPath, '/'); if (lastPart[lastPart.size() - 1 ] != '/') { return lastPart; } else { return path; } - //if (pos == AnsiString::npos) return path; - //else return newPath.substr(pos + 1); } ////////////////////////////////////////////////////////////////////////// AnsiString PathUtil::getFileNameWithoutExtension(const AnsiString &path) { AnsiString fileName = getFileName(path); - - //size_t pos = fileName.find_last_of('.'); //TODO REMOVE! // TODO: Prettify this. AnsiString extension = Common::lastPathComponent(fileName, '.'); for (uint32 i = 0; i < extension.size() + 1; i++) { fileName.deleteLastChar(); } -// Common::String filename = Common::String(fileName.c_str(), fileName.size() - extension.size() + 1); return fileName; - //if (pos == AnsiString::npos) return fileName; - //else return fileName.substr(0, pos); } ////////////////////////////////////////////////////////////////////////// AnsiString PathUtil::getExtension(const AnsiString &path) { AnsiString fileName = getFileName(path); - - //size_t pos = fileName.find_last_of('.'); return Common::lastPathComponent(path, '.'); - //if (pos == AnsiString::npos) return ""; - //else return fileName.substr(pos); } - -////////////////////////////////////////////////////////////////////////// -AnsiString PathUtil::getSafeLogFileName() { - AnsiString logFileName = getUserDirectory(); - - /*#ifdef __WIN32__ - char moduleName[MAX_PATH_LENGTH]; - ::GetModuleFileName(NULL, moduleName, MAX_PATH_LENGTH); - - AnsiString fileName = GetFileNameWithoutExtension(moduleName) + ".log"; - fileName = Combine("/Wintermute Engine/Logs/", fileName); - logFileName = Combine(logFileName, fileName); - - #else*/ - // !PORTME - logFileName = combine(logFileName, "/Wintermute Engine/wme.log"); -//#endif - - createDirectory(getDirectoryName(logFileName)); - return logFileName; -} - -////////////////////////////////////////////////////////////////////////// -bool PathUtil::createDirectory(const AnsiString &path) { - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool PathUtil::matchesMask(const AnsiString &fileName, const AnsiString &mask) { - return false; -} - -////////////////////////////////////////////////////////////////////////// -bool PathUtil::fileExists(const AnsiString &fileName) { - warning("PathUtil::FileExists(%s)", fileName.c_str()); - - Common::File stream; - - stream.open(fileName.c_str()); - bool ret = stream.isOpen(); - stream.close(); - - return ret; -} - - ////////////////////////////////////////////////////////////////////////// AnsiString PathUtil::getUserDirectory() { // TODO: Get rid of warning("PathUtil::GetUserDirectory - stubbed"); diff --git a/engines/wintermute/utils/path_util.h b/engines/wintermute/utils/path_util.h index a52b4baaf9..9b3e988805 100644 --- a/engines/wintermute/utils/path_util.h +++ b/engines/wintermute/utils/path_util.h @@ -42,12 +42,7 @@ public: static AnsiString getFileName(const AnsiString &path); static AnsiString getFileNameWithoutExtension(const AnsiString &path); static AnsiString getExtension(const AnsiString &path); - static bool createDirectory(const AnsiString &path); - static bool matchesMask(const AnsiString &fileName, const AnsiString &mask); - static bool fileExists(const AnsiString &fileName); - - static AnsiString getSafeLogFileName(); static AnsiString getUserDirectory(); }; diff --git a/engines/wintermute/wintermute.cpp b/engines/wintermute/wintermute.cpp index 8bf83cc0f6..8e782a2444 100644 --- a/engines/wintermute/wintermute.cpp +++ b/engines/wintermute/wintermute.cpp @@ -52,7 +52,7 @@ WinterMuteEngine::WinterMuteEngine() : Engine(g_system) { _classReg = new SystemClassRegistry(); _classReg->registerClasses(); - _game = new AdGame(); + _game = new AdGame(""); _rnd = NULL; } @@ -158,7 +158,7 @@ int WinterMuteEngine::init() { _classReg = new SystemClassRegistry(); _classReg->registerClasses(); - _game = new AdGame; + _game = new AdGame(_targetName); if (!_game) return 1; BasePlatform::initialize(_game, 0, NULL); -- cgit v1.2.3