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

lolbot-iichan lolbot_iichan at mail.ru
Tue Jun 15 21:25:17 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:
dfd6b6a9a4 COMMON: moved AchievementDescriptionList into Common namespace


Commit: dfd6b6a9a4725687123baf1f5eaade05fea1408e
    https://github.com/scummvm/scummvm/commit/dfd6b6a9a4725687123baf1f5eaade05fea1408e
Author: Martin Gerhardy (martin.gerhardy at gmail.com)
Date: 2021-06-16T00:25:14+03:00

Commit Message:
COMMON: moved AchievementDescriptionList into Common namespace

getAchievementsInfo is also moved into the MetaEngine to reduce code duplication

Changed paths:
    common/achievements.h
    engines/ags/achievements_tables.h
    engines/ags/metaengine.cpp
    engines/ags/metaengine.h
    engines/metaengine.cpp
    engines/metaengine.h
    engines/twine/achievements_tables.h
    engines/twine/metaengine.cpp
    engines/wintermute/achievements_tables.h
    engines/wintermute/metaengine.cpp


diff --git a/common/achievements.h b/common/achievements.h
index 0c9c5f5287..5860d84e52 100644
--- a/common/achievements.h
+++ b/common/achievements.h
@@ -79,6 +79,21 @@ struct AchievementsInfo {
 	AchievementsInfo() { platform = Common::UNK_ACHIEVEMENTS; }
 };
 
+/**
+ * The meta engine returns an array of achievement descriptions
+ *
+ * @note This array (if not @c nullptr) must end on a terminating entry
+ * @sa ACHIEVEMENT_DESC_TABLE_END_MARKER
+ */
+struct AchievementDescriptionList {
+	const char *gameId;
+	Common::AchievementsPlatform platform;
+	const char *appId;
+};
+
+#define ACHIEVEMENT_DESC_TABLE_END_MARKER \
+	{ nullptr, Common::AchievementsPlatform::UNK_ACHIEVEMENTS, nullptr }
+
 /**
  * Class for manipulating the achievements.
  *
@@ -177,7 +192,7 @@ public:
 	float getAverageRateStatFloat(const String &id) const;
 
 	/**
-	 * Update an average rate statistic (float). 
+	 * Update an average rate statistic (float).
 	 *
 	 * @param[in] id	Internal ID of the achievement.
 	 * @param[in] count Value to which the statistic count is increased.
diff --git a/engines/ags/achievements_tables.h b/engines/ags/achievements_tables.h
index 2fd3c85424..5bfaeb9d03 100644
--- a/engines/ags/achievements_tables.h
+++ b/engines/ags/achievements_tables.h
@@ -23,15 +23,11 @@
 #ifndef AGS_ACHIEVEMENTS_H
 #define AGS_ACHIEVEMENTS_H
 
-namespace AGS {
+#include "common/achievements.h"
 
-struct AchievementDescriptionList {
-	const char *gameId;
-	Common::AchievementsPlatform platform;
-	const char *appId;
-};
+namespace AGS {
 
-static const AchievementDescriptionList achievementDescriptionList[] = {
+static const Common::AchievementDescriptionList achievementDescriptionList[] = {
 	{"adateinthepark", Common::STEAM_ACHIEVEMENTS, "468530"},
 	{"alemmo", Common::STEAM_ACHIEVEMENTS, "296850"},
 	{"alum", Common::STEAM_ACHIEVEMENTS, "338420"},
@@ -94,7 +90,7 @@ static const AchievementDescriptionList achievementDescriptionList[] = {
 	{"whispersofamachine", Common::STEAM_ACHIEVEMENTS, "631570"},
 	{"zniwadventure", Common::STEAM_ACHIEVEMENTS, "904750"},
 
-	{0, Common::UNK_ACHIEVEMENTS, 0}
+	ACHIEVEMENT_DESC_TABLE_END_MARKER
 };
 
 } // End of namespace AGS
diff --git a/engines/ags/metaengine.cpp b/engines/ags/metaengine.cpp
index 77999080a3..8d4e5a0eb1 100644
--- a/engines/ags/metaengine.cpp
+++ b/engines/ags/metaengine.cpp
@@ -153,27 +153,8 @@ SaveStateDescriptor AGSMetaEngine::querySaveMetaInfos(const char *target, int sl
 	return SaveStateDescriptor();
 }
 
-const Common::AchievementsInfo AGSMetaEngine::getAchievementsInfo(const Common::String &target) const {
-	Common::String gameId = ConfMan.get("gameid", target);
-
-	Common::AchievementsPlatform platform = Common::UNK_ACHIEVEMENTS;
-	Common::String extra = ConfMan.get("extra", target);
-	if (extra.contains("GOG")) {
-		platform = Common::GALAXY_ACHIEVEMENTS;
-	} else if (extra.contains("Steam")) {
-		platform = Common::STEAM_ACHIEVEMENTS;
-	}
-
-	// "(gameId, platform) -> result" search
-	Common::AchievementsInfo result;
-	for (const AGS::AchievementDescriptionList *i = AGS::achievementDescriptionList; i->gameId; i++) {
-		if (i->gameId == gameId && i->platform == platform) {
-			result.platform = i->platform;
-			result.appId = i->appId;
-			break;
-		}
-	}
-	return result;
+const Common::AchievementDescriptionList* AGSMetaEngine::getAchievementDescriptionList() const {
+	return AGS::achievementDescriptionList;
 }
 
 #if PLUGIN_ENABLED_DYNAMIC(AGS)
diff --git a/engines/ags/metaengine.h b/engines/ags/metaengine.h
index fd5ca6e4b2..dabebe4885 100644
--- a/engines/ags/metaengine.h
+++ b/engines/ags/metaengine.h
@@ -23,6 +23,7 @@
 #ifndef AGS_METAENGINE_H
 #define AGS_METAENGINE_H
 
+#include "common/achievements.h"
 #include "engines/advancedDetector.h"
 
 class AGSMetaEngine : public AdvancedMetaEngine {
@@ -71,16 +72,7 @@ public:
 	 */
 	SaveStateDescriptor querySaveMetaInfos(const char *target, int slot) const override;
 
-	/**
-	 * Return a list of achievement descriptions for the specified target.
-	 *
-	 * The default implementation returns an empty list.
-	 *
-	 * @param target  Name of a config manager target.
-	 *
-	 * @return A list of achievement descriptions for an engine plugin and target.
-	 */
-	const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const override;
+	const Common::AchievementDescriptionList* getAchievementDescriptionList() const override;
 };
 
 #endif
diff --git a/engines/metaengine.cpp b/engines/metaengine.cpp
index 03202ebbf5..bb30860b94 100644
--- a/engines/metaengine.cpp
+++ b/engines/metaengine.cpp
@@ -128,6 +128,34 @@ Common::KeymapArray MetaEngine::initKeymaps(const char *target) const {
 	return Keymap::arrayOf(engineKeyMap);
 }
 
+const Common::AchievementsInfo MetaEngine::getAchievementsInfo(const Common::String &target) const {
+	const Common::AchievementDescriptionList* achievementDescriptionList = getAchievementDescriptionList();
+	if (achievementDescriptionList == nullptr) {
+		return Common::AchievementsInfo();
+	}
+
+	Common::String gameId = ConfMan.get("gameid", target);
+
+	Common::AchievementsPlatform platform = Common::UNK_ACHIEVEMENTS;
+	Common::String extra = ConfMan.get("extra", target);
+	if (extra.contains("GOG")) {
+		platform = Common::GALAXY_ACHIEVEMENTS;
+	} else if (extra.contains("Steam")) {
+		platform = Common::STEAM_ACHIEVEMENTS;
+	}
+
+	// "(gameId, platform) -> result" search
+	Common::AchievementsInfo result;
+	for (const Common::AchievementDescriptionList *i = achievementDescriptionList; i->gameId; i++) {
+		if (i->gameId == gameId && i->platform == platform) {
+			result.platform = i->platform;
+			result.appId = i->appId;
+			break;
+		}
+	}
+	return result;
+}
+
 bool MetaEngine::hasFeature(MetaEngineFeature f) const {
 	return
 		(f == kSupportsListSaves) ||
diff --git a/engines/metaengine.h b/engines/metaengine.h
index 7cfbfe0487..21040f4093 100644
--- a/engines/metaengine.h
+++ b/engines/metaengine.h
@@ -495,14 +495,21 @@ public:
 	/**
 	 * Return a list of achievement descriptions for the specified target.
 	 *
-	 * The default implementation returns an empty list.
-	 *
 	 * @param target  Name of a config manager target.
 	 *
 	 * @return A list of achievement descriptions for an engine plugin and target.
 	 */
-	virtual const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const {
-		return Common::AchievementsInfo();
+	virtual const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const;
+
+	/**
+	 * Return the achievement descriptions.
+	 *
+	 * @note The default implementation returns @c nullptr
+	 *
+	 * @return a list of achievement descriptions for an engine.
+	 */
+	virtual const Common::AchievementDescriptionList* getAchievementDescriptionList() const {
+		return nullptr;
 	}
 
 	/**
diff --git a/engines/twine/achievements_tables.h b/engines/twine/achievements_tables.h
index 80317c79e3..ff63a60532 100644
--- a/engines/twine/achievements_tables.h
+++ b/engines/twine/achievements_tables.h
@@ -27,16 +27,10 @@
 
 namespace TwinE {
 
-struct AchievementDescriptionList {
-	const char *gameId;
-	Common::AchievementsPlatform platform;
-	const char *appId;
-};
-
-static const AchievementDescriptionList achievementDescriptionList[] = {
+static const Common::AchievementDescriptionList achievementDescriptionList[] = {
 	{"lba", Common::STEAM_ACHIEVEMENTS, "397330"},
 
-	{0, Common::UNK_ACHIEVEMENTS, 0}
+	ACHIEVEMENT_DESC_TABLE_END_MARKER
 };
 
 } // namespace TwinE
diff --git a/engines/twine/metaengine.cpp b/engines/twine/metaengine.cpp
index eaea5cd56d..a5fd077dcb 100644
--- a/engines/twine/metaengine.cpp
+++ b/engines/twine/metaengine.cpp
@@ -62,7 +62,9 @@ public:
 
 	const ExtraGuiOptions getExtraGuiOptions(const Common::String &target) const override;
 
-	const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const override;
+	const Common::AchievementDescriptionList* getAchievementDescriptionList() const override {
+		return TwinE::achievementDescriptionList;
+	}
 
 	void getSavegameThumbnail(Graphics::Surface &thumb) override;
 };
@@ -182,27 +184,6 @@ const ExtraGuiOptions TwinEMetaEngine::getExtraGuiOptions(const Common::String &
 	return options;
 }
 
-const Common::AchievementsInfo TwinEMetaEngine::getAchievementsInfo(const Common::String &target) const {
-	Common::String gameId = ConfMan.get("gameid", target);
-
-	Common::AchievementsPlatform platform = Common::UNK_ACHIEVEMENTS;
-	Common::String extra = ConfMan.get("extra", target);
-	if (extra.contains("Steam")) {
-		platform = Common::STEAM_ACHIEVEMENTS;
-	}
-
-	// "(gameId, platform) -> result" search
-	Common::AchievementsInfo result;
-	for (const TwinE::AchievementDescriptionList *i = TwinE::achievementDescriptionList; i->gameId; ++i) {
-		if (i->gameId == gameId && i->platform == platform) {
-			result.platform = i->platform;
-			result.appId = i->appId;
-			break;
-		}
-	}
-	return result;
-}
-
 void TwinEMetaEngine::getSavegameThumbnail(Graphics::Surface &thumb) {
 	thumb.copyFrom(((TwinEEngine*)g_engine)->workVideoBuffer);
 }
diff --git a/engines/wintermute/achievements_tables.h b/engines/wintermute/achievements_tables.h
index 8365295b98..a85f1ead7c 100644
--- a/engines/wintermute/achievements_tables.h
+++ b/engines/wintermute/achievements_tables.h
@@ -20,15 +20,14 @@
  *
  */
 
-namespace Wintermute {
+#ifndef WINTERMUTE_ACHIEVEMENTS_H
+#define WINTERMUTE_ACHIEVEMENTS_H
 
-struct AchievementDescriptionList {
-	const char *gameId;
-	Common::AchievementsPlatform platform;
-	const char *appId;
-};
+#include "common/achievements.h"
 
-static const AchievementDescriptionList achievementDescriptionList[] = {
+namespace Wintermute {
+
+static const Common::AchievementDescriptionList achievementDescriptionList[] = {
 	{"alphapolaris", Common::STEAM_ACHIEVEMENTS, "405780"},
 	{"carolreed10", Common::STEAM_ACHIEVEMENTS, "337130"},
 	{"carolreed11", Common::STEAM_ACHIEVEMENTS, "340370"},
@@ -47,7 +46,9 @@ static const AchievementDescriptionList achievementDescriptionList[] = {
 	{"sotv2", Common::STEAM_ACHIEVEMENTS, "378630"},
 	{"thelostcrowngha", Common::STEAM_ACHIEVEMENTS, "291710"},
 
-	{0, Common::UNK_ACHIEVEMENTS, 0}
+	ACHIEVEMENT_DESC_TABLE_END_MARKER
 };
 
 } // End of namespace Wintermute
+
+#endif
diff --git a/engines/wintermute/metaengine.cpp b/engines/wintermute/metaengine.cpp
index 6e635cebb5..5e48d4a29f 100644
--- a/engines/wintermute/metaengine.cpp
+++ b/engines/wintermute/metaengine.cpp
@@ -131,24 +131,8 @@ public:
 		return retVal;
 	}
 
-	const Common::AchievementsInfo getAchievementsInfo(const Common::String &target) const override {
-		Common::String gameId = ConfMan.get("gameid", target);
-
-		Common::AchievementsPlatform platform = Common::STEAM_ACHIEVEMENTS;
-		if (ConfMan.get("extra", target).contains("GOG")) {
-			platform = Common::GALAXY_ACHIEVEMENTS;
-		}
-
-		// "(gameId, platform) -> result" search
-		Common::AchievementsInfo result;
-		for (const AchievementDescriptionList *i = achievementDescriptionList; i->gameId; i++) {
-			if (i->gameId == gameId && i->platform == platform) {
-				result.platform = i->platform;
-				result.appId = i->appId;
-				break;
-			}
-		}
-		return result;
+	const Common::AchievementDescriptionList* getAchievementDescriptionList() const override {
+		return Wintermute::achievementDescriptionList;
 	}
 
 	Common::KeymapArray initKeymaps(const char *target) const override {




More information about the Scummvm-git-logs mailing list