aboutsummaryrefslogtreecommitdiff
path: root/base/gameDetector.cpp
diff options
context:
space:
mode:
authorMax Horn2003-10-17 12:18:58 +0000
committerMax Horn2003-10-17 12:18:58 +0000
commit116dbee1fc1a7d8d2c22abf886d0b8e8fd93db53 (patch)
tree0960f331e9b7c2d5b59f896b4ab9cc2959417682 /base/gameDetector.cpp
parent79e681282e7c5e84d8d6bbd595bce455ebf4e8f1 (diff)
downloadscummvm-rg350-116dbee1fc1a7d8d2c22abf886d0b8e8fd93db53.tar.gz
scummvm-rg350-116dbee1fc1a7d8d2c22abf886d0b8e8fd93db53.tar.bz2
scummvm-rg350-116dbee1fc1a7d8d2c22abf886d0b8e8fd93db53.zip
factored out the game detection code into the Plugin class; this is the first step towards allowing more powerful, plugin specific detection code; also, moved the Plugin GameSettings APIs to a slightly higher level
svn-id: r10858
Diffstat (limited to 'base/gameDetector.cpp')
-rw-r--r--base/gameDetector.cpp26
1 files changed, 11 insertions, 15 deletions
diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp
index 9c8dd4d8e2..d3a2ecc5a9 100644
--- a/base/gameDetector.cpp
+++ b/base/gameDetector.cpp
@@ -240,41 +240,39 @@ void GameDetector::list_games() {
// 2) List all available (configured) targets, including those with custom
// names, e.g. "monkey-mac", "skycd-demo", ...
const PluginList &plugins = PluginManager::instance().getPlugins();
- const GameSettings *v;
printf("Game Full Title \n"
"---------------- ------------------------------------------------------\n");
PluginList::ConstIterator iter = plugins.begin();
for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
- v = (*iter)->getSupportedGames();
- while (v->gameName && v->description) {
+ GameList list = (*iter)->getSupportedGames();
+ for (GameList::Iterator v = list.begin(); v != list.end(); ++v) {
#if 1
printf("%-17s%-56s\n", v->gameName, v->description);
#else
const char *config = (g_config->has_domain(v->gameName)) ? "Yes" : "";
printf("%-17s%-56s%s\n", v->gameName, v->description, config);
#endif
- v++;
}
}
}
-const GameSettings *GameDetector::findGame(const String &gameName, const Plugin **plugin) const {
+GameSettings GameDetector::findGame(const String &gameName, const Plugin **plugin) {
// Find the GameSettings for this target
- const GameSettings *target;
const PluginList &plugins = PluginManager::instance().getPlugins();
+ GameSettings result = {NULL, NULL, 0, 0, MDT_NONE, 0, NULL};
PluginList::ConstIterator iter = plugins.begin();
for (iter = plugins.begin(); iter != plugins.end(); ++iter) {
- target = (*iter)->findGame(gameName.c_str());
- if (target) {
+ result = (*iter)->findGame(gameName.c_str());
+ if (result.gameName) {
if (plugin)
*plugin = *iter;
- return target;
+ break;
}
}
- return 0;
+ return result;
}
void GameDetector::parseCommandLine(int argc, char **argv) {
@@ -454,7 +452,7 @@ void GameDetector::parseCommandLine(int argc, char **argv) {
// To verify this, check if there is either a game domain (i.e
// a configured target) matching this argument, or if we can
// find any target with that name.
- if (i == (argc - 1) && (ConfMan.hasGameDomain(s) || findGame(s))) {
+ if (i == (argc - 1) && (ConfMan.hasGameDomain(s) || findGame(s).gameName)) {
setTarget(s);
} else {
if (current_option == NULL)
@@ -543,7 +541,6 @@ int GameDetector::parseMusicDriver(const String &str) {
}
bool GameDetector::detectGame() {
- const GameSettings *target;
String realGame;
if (ConfMan.hasKey("gameid"))
@@ -552,10 +549,9 @@ bool GameDetector::detectGame() {
realGame = _targetName;
printf("Looking for %s\n", realGame.c_str());
- target = findGame(realGame, &_plugin);
+ _game = findGame(realGame, &_plugin);
- if (target) {
- _game = *target;
+ if (_game.gameName) {
printf("Trying to start game '%s'\n", _game.description);
return true;
} else {