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

lolbot-iichan lolbot_iichan at mail.ru
Sat May 29 19:40:08 UTC 2021


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

Summary:
65a8943624 ACHIEVEMENTS: add average rate statistics API
12bfe5de04 AGS: Use AchMan for int statistics
cf6c790c31 AGS: Use AchMan for float statistics


Commit: 65a8943624d0af79bf2b23818387770cb546b97a
    https://github.com/scummvm/scummvm/commit/65a8943624d0af79bf2b23818387770cb546b97a
Author: lb_ii (lolbot_iichan at mail.ru)
Date: 2021-05-29T22:40:05+03:00

Commit Message:
ACHIEVEMENTS: add average rate statistics API

Changed paths:
    common/achievements.cpp
    common/achievements.h


diff --git a/common/achievements.cpp b/common/achievements.cpp
index b44dfaa06b..19f1045a40 100644
--- a/common/achievements.cpp
+++ b/common/achievements.cpp
@@ -137,28 +137,66 @@ bool AchievementsManager::clearAchievement(const String &id) {
 }
 
 
-bool AchievementsManager::setStatFloat(const String &id, float value) {
+bool AchievementsManager::setStatFloatEx(const String &id, float value, const String &section) {
 	if (!isReady()) {
 		return false;
 	}
 
 	String tmp = Common::String::format("%8.8f", value);
-	_iniFile->setKey(id, "statistics", tmp);
+	_iniFile->setKey(id, section, tmp);
 	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
 
 
-float AchievementsManager::getStatFloat(const String &id) {
+float AchievementsManager::getStatFloatEx(const String &id, const String &section) {
 	if (!isReady()) {
 		return 0.0;
 	}
 
 	String tmp;
-	_iniFile->getKey(id, "statistics", tmp);
+	_iniFile->getKey(id, section, tmp);
 	return (float)atof(tmp.c_str());
 }
 
+
+bool AchievementsManager::setStatFloat(const String &id, float value) {
+	return setStatFloatEx(id, value, "statistics");
+}
+
+
+float AchievementsManager::getStatFloat(const String &id) {
+	return getStatFloatEx(id, "statistics");
+}
+
+
+bool AchievementsManager::updateAverageRateStatFloat(const String &id, float count, float times) {
+	if (!isReady()) {
+		return false;
+	}
+
+	float old_count = getStatFloatEx(id + "_count", "rates");
+	float old_times = getStatFloatEx(id + "_times", "rates");
+
+	setStatFloatEx(id + "_count", old_count + count, "rates");
+	setStatFloatEx(id + "_times", old_times + times, "rates");
+
+	return 0;
+}
+
+
+float AchievementsManager::getAverageRateStatFloat(const String &id) {
+	if (!isReady()) {
+		return 0.0;
+	}
+
+	float count = getStatFloatEx(id + "_count", "rates");
+	float times = getStatFloatEx(id + "_times", "rates");
+
+	return (times != 0) ? (count / times) : 0.0;
+}
+
+
 bool AchievementsManager::setStatInt(String const &id, int value) {
 	if (!isReady()) {
 		return false;
@@ -199,6 +237,7 @@ bool AchievementsManager::resetAllStats() {
 	}
 
 	_iniFile->removeSection("statistics");
+	_iniFile->removeSection("rates");
 	_iniFile->saveToSaveFile(_iniFileName);
 	return 0;
 }
diff --git a/common/achievements.h b/common/achievements.h
index a8e4364ae9..4f9543eef5 100644
--- a/common/achievements.h
+++ b/common/achievements.h
@@ -151,6 +151,23 @@ public:
 	 */
 	bool setStatFloat(const String &id, float value);
 
+	/**
+	 * Get an average rate statistic (float).
+	 * Calcucated by devision the sum of count by the sum of times.
+	 *
+	 * @param[in] id	Internal ID of the achievement.
+	 */
+	float getAverageRateStatFloat(const String &id);
+
+	/**
+	 * 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.
+	 * @param[in] times Value to which the statistic times is increased.
+	 */
+	bool updateAverageRateStatFloat(const String &id, float count, float times);
+
 	/** @} */
 
 	/**
@@ -163,6 +180,9 @@ public:
 	/** @} */
 
 private:
+	float getStatFloatEx(const String &id, const String &section);
+	bool setStatFloatEx(const String &id, float value, const String &section);
+
 	INIFile *_iniFile;
 	String _iniFileName;
 	Common::Array<AchievementDescription> _descriptions;


Commit: 12bfe5de043dfdd33045a0503f2440170306cfee
    https://github.com/scummvm/scummvm/commit/12bfe5de043dfdd33045a0503f2440170306cfee
Author: lb_ii (lolbot_iichan at mail.ru)
Date: 2021-05-29T22:40:05+03:00

Commit Message:
AGS: Use AchMan for int statistics

Changed paths:
    engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp


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 1ff1f2e6c4..a072432ca5 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
@@ -77,7 +77,8 @@ void AGS2Client::ResetAchievement(ScriptMethodParams &params) {
 }
 
 void AGS2Client::GetIntStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS1(char *, id);
+	params._result = AchMan.getStatInt(id);
 }
 
 void AGS2Client::GetFloatStat(ScriptMethodParams &params) {
@@ -89,7 +90,8 @@ void AGS2Client::GetAverageRateStat(ScriptMethodParams &params) {
 }
 
 void AGS2Client::SetIntStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS2(char *, id, int, value);
+	params._result = AchMan.setStatInt(id, value);
 }
 
 void AGS2Client::SetFloatStat(ScriptMethodParams &params) {


Commit: cf6c790c31eddac745e48837054c55007fe367eb
    https://github.com/scummvm/scummvm/commit/cf6c790c31eddac745e48837054c55007fe367eb
Author: lb_ii (lolbot_iichan at mail.ru)
Date: 2021-05-29T22:40:05+03:00

Commit Message:
AGS: Use AchMan for float statistics

Changed paths:
    engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
    engines/ags/plugins/ags_pal_render/pal_render.h
    engines/ags/plugins/plugin_base.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 a072432ca5..e5c4ff5763 100644
--- a/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
+++ b/engines/ags/plugins/ags_galaxy_steam/ags_galaxy_steam.cpp
@@ -82,11 +82,13 @@ void AGS2Client::GetIntStat(ScriptMethodParams &params) {
 }
 
 void AGS2Client::GetFloatStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS1(char *, id);
+	params._result = PARAM_FROM_FLOAT(AchMan.getStatFloat(id));
 }
 
 void AGS2Client::GetAverageRateStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS1(char *, id);
+	params._result = PARAM_FROM_FLOAT(AchMan.getAverageRateStatFloat(id));
 }
 
 void AGS2Client::SetIntStat(ScriptMethodParams &params) {
@@ -95,11 +97,13 @@ void AGS2Client::SetIntStat(ScriptMethodParams &params) {
 }
 
 void AGS2Client::SetFloatStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS2(char *, id, int32, value);
+	params._result = AchMan.setStatFloat(id, PARAM_TO_FLOAT(value));
 }
 
 void AGS2Client::UpdateAverageRateStat(ScriptMethodParams &params) {
-	params._result = 0;
+	PARAMS3(char *, id, int32, count, int32, times);
+	params._result = AchMan.updateAverageRateStatFloat(id, PARAM_TO_FLOAT(count), PARAM_TO_FLOAT(times));
 }
 
 void AGS2Client::ResetStatsAndAchievements(ScriptMethodParams &params) {
diff --git a/engines/ags/plugins/ags_pal_render/pal_render.h b/engines/ags/plugins/ags_pal_render/pal_render.h
index 5ee805e99d..2c1f70d41b 100644
--- a/engines/ags/plugins/ags_pal_render/pal_render.h
+++ b/engines/ags/plugins/ags_pal_render/pal_render.h
@@ -31,18 +31,6 @@ namespace AGS3 {
 namespace Plugins {
 namespace AGSPalRender {
 
-inline float PARAM_TO_FLOAT(int32 xi) {
-	float x;
-	memcpy(&x, &xi, sizeof(float));
-	return x;
-}
-
-inline int32 PARAM_FROM_FLOAT(float x) {
-	int32 xi;
-	memcpy(&xi, &x, sizeof(float));
-	return xi;
-}
-
 struct PALSTRUCT {
 	byte r;
 	byte b;
diff --git a/engines/ags/plugins/plugin_base.h b/engines/ags/plugins/plugin_base.h
index 8981e79092..babfd2c399 100644
--- a/engines/ags/plugins/plugin_base.h
+++ b/engines/ags/plugins/plugin_base.h
@@ -35,6 +35,18 @@ namespace Plugins {
 #define SCRIPT_METHOD(NAME) registerFunction(engine, #NAME, &NAME)
 #define SCRIPT_METHOD_EXT(NAME, PROC) registerFunction(engine, #NAME, &(PROC))
 
+inline float PARAM_TO_FLOAT(int32 xi) {
+	float x;
+	memcpy(&x, &xi, sizeof(float));
+	return x;
+}
+
+inline int32 PARAM_FROM_FLOAT(float x) {
+	int32 xi;
+	memcpy(&xi, &x, sizeof(float));
+	return xi;
+}
+
 #define PARAMS1(T1, N1) \
 	T1 N1 = (T1)params[0]
 #define PARAMS2(T1, N1, T2, N2) \




More information about the Scummvm-git-logs mailing list