[Scummvm-cvs-logs] SF.net SVN: scummvm:[51746] scummvm/branches/gsoc2010-plugins

toneman1138 at users.sourceforge.net toneman1138 at users.sourceforge.net
Thu Aug 5 02:26:47 CEST 2010


Revision: 51746
          http://scummvm.svn.sourceforge.net/scummvm/?rev=51746&view=rev
Author:   toneman1138
Date:     2010-08-05 00:26:46 +0000 (Thu, 05 Aug 2010)

Log Message:
-----------
added intermediary function 'findGameOnePlugAtATime' and switched load game and run game code to use it. Added checks for DYNAMIC_MODULES defines to the checks for NEW_PLUGIN_DESIGN_FIRST_REFINEMENT

Modified Paths:
--------------
    scummvm/branches/gsoc2010-plugins/base/main.cpp
    scummvm/branches/gsoc2010-plugins/base/plugins.cpp
    scummvm/branches/gsoc2010-plugins/engines/metaengine.h
    scummvm/branches/gsoc2010-plugins/gui/launcher.cpp

Modified: scummvm/branches/gsoc2010-plugins/base/main.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/base/main.cpp	2010-08-04 22:45:10 UTC (rev 51745)
+++ scummvm/branches/gsoc2010-plugins/base/main.cpp	2010-08-05 00:26:46 UTC (rev 51746)
@@ -103,8 +103,12 @@
 	// Query the plugins and find one that will handle the specified gameid
 	printf("User picked target '%s' (gameid '%s')...\n", ConfMan.getActiveDomainName().c_str(), gameid.c_str());
 	printf("  Looking for a plugin supporting this gameid... ");
-	
+
+#if defined(NEW_PLUGIN_DESIGN_FIRST_REFINEMENT) && defined(DYNAMIC_MODULES)
+	GameDescriptor game = EngineMan.findGameOnePlugAtATime(gameid, &plugin);
+#else
 	GameDescriptor game = EngineMan.findGame(gameid, &plugin);
+#endif
 	
 	if (plugin == 0) {
 		printf("failed\n");
@@ -336,7 +340,7 @@
 		settings.erase("debugflags");
 	}
 
-#ifdef NEW_PLUGIN_DESIGN_FIRST_REFINEMENT //note: I'm going to refactor this name later :P
+#if defined(NEW_PLUGIN_DESIGN_FIRST_REFINEMENT) && defined(DYNAMIC_MODULES) //note: I'm going to refactor this name later :P
 	// Don't load the plugins initially in this case.
 #else
 	// Load the plugins.

Modified: scummvm/branches/gsoc2010-plugins/base/plugins.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/base/plugins.cpp	2010-08-04 22:45:10 UTC (rev 51745)
+++ scummvm/branches/gsoc2010-plugins/base/plugins.cpp	2010-08-05 00:26:46 UTC (rev 51746)
@@ -400,6 +400,18 @@
 
 DECLARE_SINGLETON(EngineManager)
 
+GameDescriptor EngineManager::findGameOnePlugAtATime(const Common::String &gameName, const EnginePlugin **plugin) const {
+	GameDescriptor result;
+	PluginManager::instance().loadFirstPlugin();
+	do {
+		result = findGame(gameName, plugin); 
+		if (!result.gameid().empty()) {
+			break;
+		}
+	} while (PluginManager::instance().loadNextPlugin());
+	return result;
+}
+
 GameDescriptor EngineManager::findGame(const Common::String &gameName, const EnginePlugin **plugin) const {
 	// Find the GameDescriptor for this target
 	const EnginePlugin::List &plugins = getPlugins();
@@ -410,10 +422,6 @@
 
 	EnginePlugin::List::const_iterator iter;
 	
-#ifdef NEW_PLUGIN_DESIGN_FIRST_REFINEMENT
-	PluginManager::instance().loadFirstPlugin();
-	do {
-#endif
 		for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
 			result = (**iter)->findGame(gameName.c_str());
 			if (!result.gameid().empty()) {
@@ -422,9 +430,6 @@
 				return result;
 			}
 		}
-#ifdef NEW_PLUGIN_DESIGN_FIRST_REFINEMENT
-	} while(PluginManager::instance().loadNextPlugin());
-#endif
 	return result;
 }
 
@@ -432,7 +437,8 @@
 	GameList candidates;
 	EnginePlugin::List plugins;
 	EnginePlugin::List::const_iterator iter;
-#ifdef NEW_PLUGIN_DESIGN_FIRST_REFINEMENT
+#if defined(NEW_PLUGIN_DESIGN_FIRST_REFINEMENT) && defined(DYNAMIC_MODULES)
+	PluginManager::instance().unloadPlugins();
 	PluginManager::instance().loadFirstPlugin();
 	do {
 #endif
@@ -442,7 +448,7 @@
 		for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
 			candidates.push_back((**iter)->detectGames(fslist));
 		}
-#ifdef NEW_PLUGIN_DESIGN_FIRST_REFINEMENT
+#if defined(NEW_PLUGIN_DESIGN_FIRST_REFINEMENT) && defined(DYNAMIC_MODULES)
 	} while (PluginManager::instance().loadNextPlugin());
 #endif
 	return candidates;

Modified: scummvm/branches/gsoc2010-plugins/engines/metaengine.h
===================================================================
--- scummvm/branches/gsoc2010-plugins/engines/metaengine.h	2010-08-04 22:45:10 UTC (rev 51745)
+++ scummvm/branches/gsoc2010-plugins/engines/metaengine.h	2010-08-05 00:26:46 UTC (rev 51746)
@@ -231,6 +231,7 @@
 	friend class Common::Singleton<SingletonBaseType>;
 
 public:
+	GameDescriptor findGameOnePlugAtATime(const Common::String &gameName, const EnginePlugin **plugin = NULL) const;
 	GameDescriptor findGame(const Common::String &gameName, const EnginePlugin **plugin = NULL) const;
 	GameList detectGames(const Common::FSList &fslist) const;
 	const EnginePlugin::List &getPlugins() const;

Modified: scummvm/branches/gsoc2010-plugins/gui/launcher.cpp
===================================================================
--- scummvm/branches/gsoc2010-plugins/gui/launcher.cpp	2010-08-04 22:45:10 UTC (rev 51745)
+++ scummvm/branches/gsoc2010-plugins/gui/launcher.cpp	2010-08-05 00:26:46 UTC (rev 51746)
@@ -708,7 +708,7 @@
 			// ...so let's determine a list of candidates, games that
 			// could be contained in the specified directory.
 			GameList candidates(EngineMan.detectGames(files));
-
+			
 			int idx;
 			if (candidates.empty()) {
 				// No game was found in the specified directory
@@ -849,7 +849,12 @@
 		gameId = _domains[item];
 
 	const EnginePlugin *plugin = 0;
+	
+#if defined(NEW_PLUGIN_DESIGN_FIRST_REFINEMENT) && defined(DYNAMIC_MODULES)
+	EngineMan.findGameOnePlugAtATime(gameId, &plugin);
+#else
 	EngineMan.findGame(gameId, &plugin);
+#endif
 
 	String target = _domains[item];
 	target.toLowercase();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list