[Scummvm-git-logs] scummvm master -> a1890ede9cc99819f05f5559455b9ed6dacff053

ccawley2011 ccawley2011 at gmail.com
Mon Apr 5 14:33:26 UTC 2021


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

Summary:
a1890ede9c BASE: Avoid calling PluginMan.getEngineFromMetaEngine where possible


Commit: a1890ede9cc99819f05f5559455b9ed6dacff053
    https://github.com/scummvm/scummvm/commit/a1890ede9cc99819f05f5559455b9ed6dacff053
Author: Cameron Cawley (ccawley2011 at gmail.com)
Date: 2021-04-05T15:33:23+01:00

Commit Message:
BASE: Avoid calling PluginMan.getEngineFromMetaEngine where possible

Changed paths:
    backends/platform/ios7/ios7_osys_main.cpp
    base/main.cpp
    engines/ags/ags.cpp
    engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
    engines/cine/metaengine.cpp
    engines/cine/saveload.cpp
    engines/dialogs.cpp
    engines/engine.cpp
    engines/engine.h
    engines/hadesch/hadesch.cpp
    engines/petka/interfaces/save_load.cpp
    engines/twine/menu/menuoptions.cpp
    engines/twine/twine.cpp
    engines/ultima/nuvie/files/nuvie_io_file.cpp
    engines/ultima/ultima8/ultima8.cpp
    engines/wintermute/ext/wme_galaxy.cpp
    engines/wintermute/ext/wme_steam.cpp
    gui/launcher.cpp
    gui/saveload-dialog.cpp
    gui/saveload-dialog.h
    gui/saveload.cpp
    gui/saveload.h


diff --git a/backends/platform/ios7/ios7_osys_main.cpp b/backends/platform/ios7/ios7_osys_main.cpp
index 60e9406243..36def940be 100644
--- a/backends/platform/ios7/ios7_osys_main.cpp
+++ b/backends/platform/ios7/ios7_osys_main.cpp
@@ -243,7 +243,7 @@ void OSystem_iOS7::saveState() {
 		Common::String targetName(ConfMan.getActiveDomainName());
 		int saveSlot = g_engine->getAutosaveSlot();
 		// Make sure we do not overwrite a user save
-		SaveStateDescriptor desc = g_engine->getMetaEngine().querySaveMetaInfos(targetName.c_str(), saveSlot);
+		SaveStateDescriptor desc = g_engine->getMetaEngine()->querySaveMetaInfos(targetName.c_str(), saveSlot);
 		if (desc.getSaveSlot() != -1 && !desc.isAutosave())
 			return;
 
diff --git a/base/main.cpp b/base/main.cpp
index ad987f5063..228c702857 100644
--- a/base/main.cpp
+++ b/base/main.cpp
@@ -152,7 +152,7 @@ void saveLastLaunchedTarget(const Common::String &target) {
 }
 
 // TODO: specify the possible return values here
-static Common::Error runGame(const Plugin *plugin, OSystem &system, const Common::String &edebuglevels) {
+static Common::Error runGame(const Plugin *plugin, const Plugin *enginePlugin, OSystem &system, const Common::String &edebuglevels) {
 	assert(plugin);
 
 	// Determine the game data path, for validation and error messages
@@ -190,17 +190,8 @@ static Common::Error runGame(const Plugin *plugin, OSystem &system, const Common
 		metaEngineDetection.registerDefaultSettings(target);
 	}
 
-	// Right now we have a MetaEngineDetection plugin. We must find the matching
-	// engine plugin to call createInstance and other connecting functions.
-	Plugin *enginePluginToLaunchGame = PluginMan.getEngineFromMetaEngine(plugin);
-
-	if (!enginePluginToLaunchGame) {
-		err = Common::kEnginePluginNotFound;
-		return err;
-	}
-
 	// Create the game's MetaEngine.
-	const MetaEngine &metaEngine = enginePluginToLaunchGame->get<MetaEngine>();
+	MetaEngine &metaEngine = enginePlugin->get<MetaEngine>();
 	err = metaEngine.createInstance(&system, &engine);
 
 	// Check for errors
@@ -225,6 +216,9 @@ static Common::Error runGame(const Plugin *plugin, OSystem &system, const Common
 		return err;
 	}
 
+	// Set up the metaengine
+	engine->setMetaEngine(&metaEngine);
+
 	// Set the window caption to the game name
 	Common::String caption(ConfMan.get("description"));
 
@@ -591,7 +585,7 @@ extern "C" int scummvm_main(int argc, const char * const argv[]) {
 			}
 #endif
 			// Try to run the game
-			Common::Error result = runGame(plugin, system, specialDebug);
+			Common::Error result = runGame(plugin, enginePlugin, system, specialDebug);
 
 #ifdef USE_TTS
 			if (ttsMan != nullptr) {
diff --git a/engines/ags/ags.cpp b/engines/ags/ags.cpp
index dbbd0d729b..09f94dec68 100644
--- a/engines/ags/ags.cpp
+++ b/engines/ags/ags.cpp
@@ -186,7 +186,7 @@ Common::Error AGSEngine::run() {
 }
 
 SaveStateList AGSEngine::listSaves() const {
-	return getMetaEngine().listSaves(_targetName.c_str());
+	return getMetaEngine()->listSaves(_targetName.c_str());
 }
 
 void AGSEngine::setGraphicsMode(size_t w, size_t h) {
diff --git a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
index 9f82977157..e479479009 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
@@ -168,8 +168,8 @@ void AGSGalaxy::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD_EXT(AGSGalaxy::GetCurrentGameLanguage^0, GetCurrentGameLanguage);
 	SCRIPT_METHOD_EXT(AGSGalaxy::Initialize^2, Initialize);
 
-	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
-	Common::AchievementsInfo achievementsInfo = meta.getAchievementsInfo(::AGS::g_vm->getGameId());
+	const MetaEngine *meta = ::AGS::g_vm->getMetaEngine();
+	Common::AchievementsInfo achievementsInfo = meta->getAchievementsInfo(::AGS::g_vm->getGameId());
 	const Common::String target = achievementsInfo.appId;
 	if (!target.empty()) {
 		AchMan.setActiveDomain(Common::GALAXY_ACHIEVEMENTS, target);
@@ -187,8 +187,8 @@ void AGSGalaxy::IsAchievementAchieved(ScriptMethodParams &params) {
 void AGSGalaxy::SetAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
 
-	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
-	Common::AchievementsInfo achievementsInfo = meta.getAchievementsInfo(::AGS::g_vm->getGameId());
+	const MetaEngine *meta = ::AGS::g_vm->getMetaEngine();
+	Common::AchievementsInfo achievementsInfo = meta->getAchievementsInfo(::AGS::g_vm->getGameId());
 
 	Common::String msg = id;
 	for (uint32 i = 0; i < achievementsInfo.descriptions.size(); i++) {
@@ -304,8 +304,8 @@ void AGSSteam::AGS_EngineStartup(IAGSEngine *engine) {
 	SCRIPT_METHOD_EXT(AGSteam::GetCurrentGameLanguage^0, GetCurrentGameLanguage);
 	SCRIPT_METHOD_EXT(AGSteam::FindLeaderboard^1, FindLeaderboard);
 
-	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
-	Common::AchievementsInfo achievementsInfo = meta.getAchievementsInfo(::AGS::g_vm->getGameId());
+	const MetaEngine *meta = ::AGS::g_vm->getMetaEngine();
+	Common::AchievementsInfo achievementsInfo = meta->getAchievementsInfo(::AGS::g_vm->getGameId());
 	const Common::String target = achievementsInfo.appId;
 	if (!target.empty()) {
 		AchMan.setActiveDomain(Common::STEAM_ACHIEVEMENTS, target);
@@ -323,8 +323,8 @@ void AGSSteam::IsAchievementAchieved(ScriptMethodParams &params) {
 void AGSSteam::SetAchievementAchieved(ScriptMethodParams &params) {
 	PARAMS1(char *, id);
 
-	const MetaEngine &meta = ::AGS::g_vm->getMetaEngine();
-	Common::AchievementsInfo achievementsInfo = meta.getAchievementsInfo(::AGS::g_vm->getGameId());
+	const MetaEngine *meta = ::AGS::g_vm->getMetaEngine();
+	Common::AchievementsInfo achievementsInfo = meta->getAchievementsInfo(::AGS::g_vm->getGameId());
 
 	Common::String msg = id;
 	for (uint32 i = 0; i < achievementsInfo.descriptions.size(); i++) {
diff --git a/engines/cine/metaengine.cpp b/engines/cine/metaengine.cpp
index 98245aa175..0bd4c7486a 100644
--- a/engines/cine/metaengine.cpp
+++ b/engines/cine/metaengine.cpp
@@ -325,7 +325,7 @@ Common::Error CineEngine::saveGameState(int slot, const Common::String &desc, bo
 }
 
 Common::String CineEngine::getSaveStateName(int slot) const {
-	return getMetaEngine().getSavegameFile(slot, _targetName.c_str());
+	return getMetaEngine()->getSavegameFile(slot, _targetName.c_str());
 }
 
 bool CineEngine::canLoadGameStateCurrently() {
diff --git a/engines/cine/saveload.cpp b/engines/cine/saveload.cpp
index 8398aff349..9ab8351550 100644
--- a/engines/cine/saveload.cpp
+++ b/engines/cine/saveload.cpp
@@ -1030,7 +1030,7 @@ void CineEngine::makeSave(const Common::String &saveFileName, uint32 playtime,
 		renderer->popSavedBackBuffer(BEFORE_OPENING_MENU);
 	}
 
-	getMetaEngine().appendExtendedSave(fHandle.get(), playtime, desc, isAutosave);
+	getMetaEngine()->appendExtendedSave(fHandle.get(), playtime, desc, isAutosave);
 
 	renderer->restoreSavedBackBuffer(BEFORE_TAKING_THUMBNAIL);
 
diff --git a/engines/dialogs.cpp b/engines/dialogs.cpp
index 9059849d52..a484f77a44 100644
--- a/engines/dialogs.cpp
+++ b/engines/dialogs.cpp
@@ -273,7 +273,7 @@ ConfigDialog::ConfigDialog() :
 	assert(g_engine);
 
 	const Common::String &gameDomain = ConfMan.getActiveDomainName();
-	const MetaEngine &metaEngine = g_engine->getMetaEngine();
+	const MetaEngine *metaEngine = g_engine->getMetaEngine();
 
 	// GUI:  Add tab widget
 	GUI::TabWidget *tab = new GUI::TabWidget(this, "GlobalConfig.TabWidget");
@@ -285,7 +285,7 @@ ConfigDialog::ConfigDialog() :
 	int tabId = tab->addTab(_("Game"), "GlobalConfig_Engine");
 
 	if (g_engine->hasFeature(Engine::kSupportsChangingOptionsDuringRuntime)) {
-		_engineOptions = metaEngine.buildEngineOptionsWidgetDynamic(tab, "GlobalConfig_Engine.Container", gameDomain);
+		_engineOptions = metaEngine->buildEngineOptionsWidgetDynamic(tab, "GlobalConfig_Engine.Container", gameDomain);
 	}
 
 	if (_engineOptions) {
@@ -321,7 +321,7 @@ ConfigDialog::ConfigDialog() :
 	// The Keymap tab
 	//
 
-	Common::KeymapArray keymaps = metaEngine.initKeymaps(gameDomain.c_str());
+	Common::KeymapArray keymaps = metaEngine->initKeymaps(gameDomain.c_str());
 	if (!keymaps.empty()) {
 		tab->addTab(_("Keymaps"), "GlobalConfig_KeyMapper");
 		addKeyMapperControls(tab, "GlobalConfig_KeyMapper.", keymaps, gameDomain);
@@ -343,7 +343,7 @@ ConfigDialog::ConfigDialog() :
 	//
 	// The Achievements tab
 	//
-	Common::AchievementsInfo achievementsInfo = metaEngine.getAchievementsInfo(gameDomain);
+	Common::AchievementsInfo achievementsInfo = metaEngine->getAchievementsInfo(gameDomain);
 	if (achievementsInfo.descriptions.size() > 0) {
 		tab->addTab(_("Achievements"), "GlobalConfig_Achievements");
 		addAchievementsControls(tab, "GlobalConfig_Achievements.", achievementsInfo);
diff --git a/engines/engine.cpp b/engines/engine.cpp
index a4e2526434..b926d475e3 100644
--- a/engines/engine.cpp
+++ b/engines/engine.cpp
@@ -540,7 +540,7 @@ void Engine::saveAutosaveIfEnabled() {
 
 		if (saveFlag) {
 			// First check for an existing savegame in the slot, and if present, if it's an autosave
-			SaveStateDescriptor desc = getMetaEngine().querySaveMetaInfos(
+			SaveStateDescriptor desc = getMetaEngine()->querySaveMetaInfos(
 				_targetName.c_str(), getAutosaveSlot());
 			saveFlag = desc.getSaveSlot() == -1 || desc.isAutosave();
 		}
@@ -774,7 +774,7 @@ Common::Error Engine::saveGameState(int slot, const Common::String &desc, bool i
 
 	Common::Error result = saveGameStream(saveFile, isAutosave);
 	if (result.getCode() == Common::kNoError) {
-		getMetaEngine().appendExtendedSave(saveFile, getTotalPlayTime() / 1000, desc, isAutosave);
+		getMetaEngine()->appendExtendedSave(saveFile, getTotalPlayTime() / 1000, desc, isAutosave);
 
 		saveFile->finalize();
 	}
@@ -888,16 +888,6 @@ MetaEngineDetection &Engine::getMetaEngineDetection() {
 	return plugin->get<MetaEngineDetection>();
 }
 
-MetaEngine &Engine::getMetaEngine() {
-	const Plugin *metaEnginePlugin = EngineMan.findPlugin(ConfMan.get("engineid"));
-	assert(metaEnginePlugin);
-
-	const Plugin *enginePlugin = PluginMan.getEngineFromMetaEngine(metaEnginePlugin);
-	assert(enginePlugin);
-
-	return enginePlugin->get<MetaEngine>();
-}
-
 PauseToken::PauseToken() : _engine(nullptr) {}
 
 PauseToken::PauseToken(Engine *engine) : _engine(engine) {}
diff --git a/engines/engine.h b/engines/engine.h
index ffb82fa74b..3d5963233a 100644
--- a/engines/engine.h
+++ b/engines/engine.h
@@ -174,6 +174,11 @@ protected:
 	const Common::String _targetName;
 
 private:
+	/**
+	 * The associated metaengine
+	 */
+	MetaEngine *_metaEngine;
+
 	/**
 	 * The pause level.
 	 *
@@ -490,7 +495,12 @@ public:
 	/**
 	 * Return the MetaEngine instance used by this engine.
 	 */
-	static MetaEngine &getMetaEngine();
+	inline MetaEngine *getMetaEngine() const { return _metaEngine; }
+
+	/**
+	 * Set the MetaEngine instance used by this engine.
+	 */
+	inline void setMetaEngine(MetaEngine *metaEngine) { _metaEngine = metaEngine; }
 
 	/**
 	 * Pause the engine.
diff --git a/engines/hadesch/hadesch.cpp b/engines/hadesch/hadesch.cpp
index 4d8d3501de..e5be8273a5 100644
--- a/engines/hadesch/hadesch.cpp
+++ b/engines/hadesch/hadesch.cpp
@@ -896,7 +896,7 @@ int HadeschEngine::genSubtitleID() {
 
 int HadeschEngine::firstAvailableSlot() {
 	for (unsigned slot = 3; ; slot++) {
-		SaveStateDescriptor desc = getMetaEngine().querySaveMetaInfos(_targetName.c_str(), slot);
+		SaveStateDescriptor desc = getMetaEngine()->querySaveMetaInfos(_targetName.c_str(), slot);
 		if (desc.getSaveSlot() == -1 && !desc.getWriteProtectedFlag())
 			return slot;
 	}
@@ -909,7 +909,7 @@ void HadeschEngine::quit() {
 bool HadeschEngine::hasAnySaves() {
 	Common::SaveFileManager *saveFileMan = getSaveFileManager();
 	Common::StringArray filenames;
-	Common::String pattern(getMetaEngine().getSavegameFilePattern(_targetName.c_str()));
+	Common::String pattern(getMetaEngine()->getSavegameFilePattern(_targetName.c_str()));
 
 	filenames = saveFileMan->listSavefiles(pattern);
 
@@ -919,7 +919,7 @@ bool HadeschEngine::hasAnySaves() {
 Common::Array<HadeschSaveDescriptor> HadeschEngine::getHadeschSavesList() {
 	Common::SaveFileManager *saveFileMan = getSaveFileManager();
 	Common::StringArray filenames;
-	Common::String pattern(getMetaEngine().getSavegameFilePattern(_targetName.c_str()));
+	Common::String pattern(getMetaEngine()->getSavegameFilePattern(_targetName.c_str()));
 
 	filenames = saveFileMan->listSavefiles(pattern);
 
@@ -947,7 +947,7 @@ Common::Array<HadeschSaveDescriptor> HadeschEngine::getHadeschSavesList() {
 }
 
 void HadeschEngine::deleteSave(int slot) {
-	getMetaEngine().removeSaveState(_targetName.c_str(), slot);
+	getMetaEngine()->removeSaveState(_targetName.c_str(), slot);
 }
 
 void EventHandlerWrapper::operator()() const {
diff --git a/engines/petka/interfaces/save_load.cpp b/engines/petka/interfaces/save_load.cpp
index 238896aba9..d8d58bc50b 100644
--- a/engines/petka/interfaces/save_load.cpp
+++ b/engines/petka/interfaces/save_load.cpp
@@ -72,9 +72,9 @@ void InterfaceSaveLoad::start(int id) {
 
 	Common::ScopedPtr<Graphics::Font> font(Graphics::loadTTFFontFromArchive("FreeSans.ttf", 20));
 
-	MetaEngine &metaEngine = PetkaEngine::getMetaEngine();
+	MetaEngine *metaEngine = g_engine->getMetaEngine();
 	for (int i = 0, j = _page * 6; i < 6; ++i, ++j) {
-		SaveStateDescriptor save = metaEngine.querySaveMetaInfos(g_vm->_desc->gameId, j);
+		SaveStateDescriptor save = metaEngine->querySaveMetaInfos(g_vm->_desc->gameId, j);
 
 		auto surface = save.getThumbnail();
 		if (!surface)
diff --git a/engines/twine/menu/menuoptions.cpp b/engines/twine/menu/menuoptions.cpp
index 28cc74d275..42fcde228e 100644
--- a/engines/twine/menu/menuoptions.cpp
+++ b/engines/twine/menu/menuoptions.cpp
@@ -375,7 +375,7 @@ int MenuOptions::chooseSave(int textIdx, bool showEmptySlots) {
 	MenuSettings saveFiles;
 	saveFiles.addButton(TextId::kReturnMenu);
 
-	const int maxButtons = _engine->getMetaEngine().getMaximumSaveSlot() + 1;
+	const int maxButtons = _engine->getMetaEngine()->getMaximumSaveSlot() + 1;
 	for (const SaveStateDescriptor &savegame : savegames) {
 		saveFiles.addButton(savegame.getDescription().encode().c_str(), savegame.getSaveSlot());
 		if (saveFiles.getButtonCount() >= maxButtons) {
diff --git a/engines/twine/twine.cpp b/engines/twine/twine.cpp
index 6a4f4b6b77..c21a2d62b2 100644
--- a/engines/twine/twine.cpp
+++ b/engines/twine/twine.cpp
@@ -324,7 +324,7 @@ bool TwinEEngine::hasFeature(EngineFeature f) const {
 }
 
 SaveStateList TwinEEngine::getSaveSlots() const {
-	return getMetaEngine().listSaves(_targetName.c_str());
+	return getMetaEngine()->listSaves(_targetName.c_str());
 }
 
 void TwinEEngine::wipeSaveSlot(int slot) {
@@ -1148,8 +1148,8 @@ const char *TwinEEngine::getGameId() const {
 }
 
 bool TwinEEngine::unlockAchievement(const Common::String &id) {
-	const MetaEngine &meta = getMetaEngine();
-	const Common::AchievementsInfo &achievementsInfo = meta.getAchievementsInfo(ConfMan.getActiveDomainName());
+	const MetaEngine *meta = getMetaEngine();
+	const Common::AchievementsInfo &achievementsInfo = meta->getAchievementsInfo(ConfMan.getActiveDomainName());
 
 	Common::String msg = id;
 	for (uint32 i = 0; i < achievementsInfo.descriptions.size(); i++) {
diff --git a/engines/ultima/nuvie/files/nuvie_io_file.cpp b/engines/ultima/nuvie/files/nuvie_io_file.cpp
index 0594994099..7e1e2bff19 100644
--- a/engines/ultima/nuvie/files/nuvie_io_file.cpp
+++ b/engines/ultima/nuvie/files/nuvie_io_file.cpp
@@ -185,7 +185,7 @@ void NuvieIOFileWrite::close() {
 	} else if (_saveFile) {
 		// Writing using savefile interface, so flush out data
 		_saveFile->write(_saveFileData.getData(), _saveFileData.size());
-		g_engine->getMetaEngine().appendExtendedSave(_saveFile, Shared::g_ultima->getTotalPlayTime(), _description, _isAutosave);
+		g_engine->getMetaEngine()->appendExtendedSave(_saveFile, Shared::g_ultima->getTotalPlayTime(), _description, _isAutosave);
 
 		_saveFile->finalize();
 		delete _saveFile;
diff --git a/engines/ultima/ultima8/ultima8.cpp b/engines/ultima/ultima8/ultima8.cpp
index 494bc526dd..a005bba73a 100644
--- a/engines/ultima/ultima8/ultima8.cpp
+++ b/engines/ultima/ultima8/ultima8.cpp
@@ -1079,7 +1079,7 @@ bool Ultima8Engine::newGame(int saveSlot) {
 
 	// First validate we still have a save file for the slot
 	if (saveSlot != -1) {
-		SaveStateDescriptor desc = getMetaEngine().querySaveMetaInfos(_targetName.c_str(), saveSlot);
+		SaveStateDescriptor desc = getMetaEngine()->querySaveMetaInfos(_targetName.c_str(), saveSlot);
 		if (desc.getSaveSlot() != saveSlot)
 			saveSlot = -1;
 	}
diff --git a/engines/wintermute/ext/wme_galaxy.cpp b/engines/wintermute/ext/wme_galaxy.cpp
index 3552547b08..a6ce4f7e9a 100644
--- a/engines/wintermute/ext/wme_galaxy.cpp
+++ b/engines/wintermute/ext/wme_galaxy.cpp
@@ -50,9 +50,9 @@ SXWMEGalaxyAPI::SXWMEGalaxyAPI(BaseGame *inGame, ScStack *stack) : BaseScriptabl
 
 //////////////////////////////////////////////////////////////////////////
 void SXWMEGalaxyAPI::init() {
-	const MetaEngine &meta = ((WintermuteEngine *)g_engine)->getMetaEngine();
+	const MetaEngine *meta = g_engine->getMetaEngine();
 	const Common::String target = BaseEngine::instance().getGameTargetName();
-	_achievementsInfo = meta.getAchievementsInfo(target);
+	_achievementsInfo = meta->getAchievementsInfo(target);
 
 	if (!_achievementsInfo.appId.empty()) {
 		AchMan.setActiveDomain(Common::GALAXY_ACHIEVEMENTS, _achievementsInfo.appId);
diff --git a/engines/wintermute/ext/wme_steam.cpp b/engines/wintermute/ext/wme_steam.cpp
index da718a30a8..0e98aaa0a9 100644
--- a/engines/wintermute/ext/wme_steam.cpp
+++ b/engines/wintermute/ext/wme_steam.cpp
@@ -50,9 +50,9 @@ SXSteamAPI::SXSteamAPI(BaseGame *inGame, ScStack *stack) : BaseScriptable(inGame
 
 //////////////////////////////////////////////////////////////////////////
 void SXSteamAPI::init() {
-	const MetaEngine &meta = ((WintermuteEngine *)g_engine)->getMetaEngine();
+	const MetaEngine *meta = g_engine->getMetaEngine();
 	const Common::String target = BaseEngine::instance().getGameTargetName();
-	_achievementsInfo = meta.getAchievementsInfo(target);
+	_achievementsInfo = meta->getAchievementsInfo(target);
 
 	if (!_achievementsInfo.appId.empty()) {
 		AchMan.setActiveDomain(Common::STEAM_ACHIEVEMENTS, _achievementsInfo.appId);
diff --git a/gui/launcher.cpp b/gui/launcher.cpp
index 6345c14231..28a23d9e27 100644
--- a/gui/launcher.cpp
+++ b/gui/launcher.cpp
@@ -495,10 +495,11 @@ void LauncherDialog::loadGame(int item) {
 	}
 
 	if (enginePlugin) {
+		assert(enginePlugin->getType() == PLUGIN_TYPE_ENGINE);
 		const MetaEngine &metaEngine = enginePlugin->get<MetaEngine>();
 		if (metaEngine.hasFeature(MetaEngine::kSupportsListSaves) &&
 			metaEngine.hasFeature(MetaEngine::kSupportsLoadingDuringStartup)) {
-			int slot = _loadDialog->runModalWithPluginAndTarget(enginePlugin, target);
+			int slot = _loadDialog->runModalWithMetaEngineAndTarget(&metaEngine, target);
 			if (slot >= 0) {
 				ConfMan.setActiveDomain(_domains[item]);
 				ConfMan.setInt("save_slot", slot, Common::ConfigManager::kTransientDomain);
diff --git a/gui/saveload-dialog.cpp b/gui/saveload-dialog.cpp
index b8dd758cc3..289c8a845a 100644
--- a/gui/saveload-dialog.cpp
+++ b/gui/saveload-dialog.cpp
@@ -103,7 +103,7 @@ void SaveLoadCloudSyncProgressDialog::handleTickle() {
 #endif
 
 #ifndef DISABLE_SAVELOADCHOOSER_GRID
-SaveLoadChooserType getRequestedSaveLoadDialog(const MetaEngine &metaEngine) {
+SaveLoadChooserType getRequestedSaveLoadDialog(const MetaEngine *metaEngine) {
 	const Common::String &userConfig = ConfMan.get("gui_saveload_chooser", Common::ConfigManager::kApplicationDomain);
 
 	// Check (and update if necessary) the theme config here. This catches
@@ -114,8 +114,8 @@ SaveLoadChooserType getRequestedSaveLoadDialog(const MetaEngine &metaEngine) {
 	g_gui.checkScreenChange();
 
 	if (g_gui.getWidth() >= 640 && g_gui.getHeight() >= 400
-		&& metaEngine.hasFeature(MetaEngine::kSavesSupportMetaInfo)
-		&& metaEngine.hasFeature(MetaEngine::kSavesSupportThumbnail)
+		&& metaEngine->hasFeature(MetaEngine::kSavesSupportMetaInfo)
+		&& metaEngine->hasFeature(MetaEngine::kSavesSupportThumbnail)
 		&& userConfig.equalsIgnoreCase("grid")) {
 		// In case we are 640x400 or higher, this dialog is not in save mode,
 		// the user requested the grid dialog and the engines supports it we
@@ -268,7 +268,7 @@ void SaveLoadChooserDialog::handleTickle() {
 void SaveLoadChooserDialog::reflowLayout() {
 #ifndef DISABLE_SAVELOADCHOOSER_GRID
 	const SaveLoadChooserType currentType = getType();
-	const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(*_metaEngine);
+	const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(_metaEngine);
 
 	addChooserButtons();
 	if (currentType == kSaveLoadDialogList) {
@@ -1036,7 +1036,7 @@ int SaveLoadChooserGrid::runIntern() {
 	int slot;
 	do {
 		const SaveLoadChooserType currentType = getType();
-		const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(*_metaEngine);
+		const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(_metaEngine);
 
 		// Catch resolution changes when the save name dialog was open.
 		if (currentType != requestedType) {
diff --git a/gui/saveload-dialog.h b/gui/saveload-dialog.h
index f0d986fbb3..fa5b126ba1 100644
--- a/gui/saveload-dialog.h
+++ b/gui/saveload-dialog.h
@@ -65,7 +65,7 @@ enum SaveLoadChooserType {
 	kSaveLoadDialogGrid = 1
 };
 
-SaveLoadChooserType getRequestedSaveLoadDialog(const MetaEngine &metaEngine);
+SaveLoadChooserType getRequestedSaveLoadDialog(const MetaEngine *metaEngine);
 #endif // !DISABLE_SAVELOADCHOOSER_GRID
 
 class SaveLoadChooserDialog : protected Dialog {
diff --git a/gui/saveload.cpp b/gui/saveload.cpp
index 084bbc0f48..8bd4f11c61 100644
--- a/gui/saveload.cpp
+++ b/gui/saveload.cpp
@@ -26,6 +26,7 @@
 #include "gui/saveload.h"
 #include "gui/saveload-dialog.h"
 
+#include "engines/engine.h"
 #include "engines/metaengine.h"
 
 namespace GUI {
@@ -39,7 +40,7 @@ SaveLoadChooser::~SaveLoadChooser() {
 	_impl = nullptr;
 }
 
-void SaveLoadChooser::selectChooser(const MetaEngine &engine) {
+void SaveLoadChooser::selectChooser(const MetaEngine *engine) {
 #ifndef DISABLE_SAVELOADCHOOSER_GRID
 	const SaveLoadChooserType requestedType = getRequestedSaveLoadDialog(engine);
 	if (!_impl || _impl->getType() != requestedType) {
@@ -76,25 +77,14 @@ Common::String SaveLoadChooser::createDefaultSaveDescription(const int slot) con
 }
 
 int SaveLoadChooser::runModalWithCurrentTarget() {
-	const Plugin *plugin = EngineMan.findPlugin(ConfMan.get("engineid"));
-	const Plugin *enginePlugin = nullptr;
-	if (!plugin) {
-		error("SaveLoadChooser::runModalWithCurrentTarget(): Cannot find plugin");
-	} else {
-		enginePlugin = PluginMan.getEngineFromMetaEngine(plugin);
-
-		if (!enginePlugin) {
-			error("SaveLoadChooser::runModalWithCurrentTarget(): Couldn't match a Engine from the MetaEngine. \
-				You will not be able to see savefiles until you have the necessary plugins.");
-		}
-	}
-	return runModalWithPluginAndTarget(enginePlugin, ConfMan.getActiveDomainName());
-}
+	if (!g_engine)
+		error("No engine is currently active");
 
-int SaveLoadChooser::runModalWithPluginAndTarget(const Plugin *plugin, const String &target) {
-	assert(plugin->getType() == PLUGIN_TYPE_ENGINE);
+	return runModalWithMetaEngineAndTarget(g_engine->getMetaEngine(), ConfMan.getActiveDomainName());
+}
 
-	selectChooser(plugin->get<MetaEngine>());
+int SaveLoadChooser::runModalWithMetaEngineAndTarget(const MetaEngine *engine, const String &target) {
+	selectChooser(engine);
 	if (!_impl)
 		return -1;
 
@@ -109,10 +99,10 @@ int SaveLoadChooser::runModalWithPluginAndTarget(const Plugin *plugin, const Str
 
 	int ret;
 	do {
-		ret = _impl->run(target, &plugin->get<MetaEngine>());
+		ret = _impl->run(target, engine);
 #ifndef DISABLE_SAVELOADCHOOSER_GRID
 		if (ret == kSwitchSaveLoadDialog) {
-			selectChooser(plugin->get<MetaEngine>());
+			selectChooser(engine);
 		}
 #endif // !DISABLE_SAVELOADCHOOSER_GRID
 	} while (ret < -1);
diff --git a/gui/saveload.h b/gui/saveload.h
index 3a976863d5..c4a72ff68b 100644
--- a/gui/saveload.h
+++ b/gui/saveload.h
@@ -40,7 +40,7 @@ protected:
 	const U32String _buttonLabel;
 	const bool _saveMode;
 
-	void selectChooser(const MetaEngine &engine);
+	void selectChooser(const MetaEngine *engine);
 public:
 	SaveLoadChooser(const U32String &title, const U32String &buttonLabel, bool saveMode);
 	~SaveLoadChooser();
@@ -52,7 +52,7 @@ public:
 	 * @return The selcted save slot. -1 in case none is selected.
 	 */
 	int runModalWithCurrentTarget();
-	int runModalWithPluginAndTarget(const Plugin *plugin, const String &target);
+	int runModalWithMetaEngineAndTarget(const MetaEngine *engine, const String &target);
 
 	const Common::U32String &getResultString() const;
 




More information about the Scummvm-git-logs mailing list