v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
130
source/application/StarStatisticsService_pc_steam.cpp
Normal file
130
source/application/StarStatisticsService_pc_steam.cpp
Normal file
|
@ -0,0 +1,130 @@
|
|||
#include "StarStatisticsService_pc_steam.hpp"
|
||||
#include "StarLogging.hpp"
|
||||
|
||||
namespace Star {
|
||||
|
||||
SteamStatisticsService::SteamStatisticsService(PcPlatformServicesStatePtr)
|
||||
: m_callbackUserStatsReceived(this, &SteamStatisticsService::onUserStatsReceived),
|
||||
m_callbackUserStatsStored(this, &SteamStatisticsService::onUserStatsStored),
|
||||
m_callbackAchievementStored(this, &SteamStatisticsService::onAchievementStored) {
|
||||
m_appId = SteamUtils()->GetAppID();
|
||||
refresh();
|
||||
}
|
||||
|
||||
bool SteamStatisticsService::initialized() const {
|
||||
return m_initialized;
|
||||
}
|
||||
|
||||
Maybe<String> SteamStatisticsService::error() const {
|
||||
return m_error;
|
||||
}
|
||||
|
||||
bool SteamStatisticsService::setStat(String const& name, String const& type, Json const& value) {
|
||||
if (type == "int")
|
||||
return SteamUserStats()->SetStat(name.utf8Ptr(), (int32_t)value.toInt());
|
||||
|
||||
if (type == "float")
|
||||
return SteamUserStats()->SetStat(name.utf8Ptr(), value.toFloat());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
Json SteamStatisticsService::getStat(String const& name, String const& type, Json def) const {
|
||||
if (type == "int") {
|
||||
int32_t intValue = 0;
|
||||
if (SteamUserStats()->GetStat(name.utf8Ptr(), &intValue))
|
||||
return Json(intValue);
|
||||
}
|
||||
|
||||
if (type == "float") {
|
||||
float floatValue = 0.0f;
|
||||
if (SteamUserStats()->GetStat(name.utf8Ptr(), &floatValue))
|
||||
return Json(floatValue);
|
||||
}
|
||||
|
||||
return def;
|
||||
}
|
||||
|
||||
bool SteamStatisticsService::reportEvent(String const&, Json const&) {
|
||||
// Steam doesn't support events
|
||||
return false;
|
||||
}
|
||||
|
||||
bool SteamStatisticsService::unlockAchievement(String const& name) {
|
||||
if (!SteamUserStats()->SetAchievement(name.utf8Ptr())) {
|
||||
Logger::error("Cannot set Steam achievement %s", name);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
StringSet SteamStatisticsService::achievementsUnlocked() const {
|
||||
StringSet achievements;
|
||||
for (uint32_t i = 0; i < SteamUserStats()->GetNumAchievements(); ++i) {
|
||||
String achievement = SteamUserStats()->GetAchievementName(i);
|
||||
|
||||
bool unlocked = false;
|
||||
if (SteamUserStats()->GetAchievement(achievement.utf8Ptr(), &unlocked) && unlocked) {
|
||||
achievements.add(achievement);
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void SteamStatisticsService::refresh() {
|
||||
if (!SteamUser()->BLoggedOn()) {
|
||||
m_error = {"Not logged in"};
|
||||
return;
|
||||
}
|
||||
|
||||
SteamUserStats()->RequestCurrentStats();
|
||||
}
|
||||
|
||||
void SteamStatisticsService::flush() {
|
||||
SteamUserStats()->StoreStats();
|
||||
}
|
||||
|
||||
bool SteamStatisticsService::reset() {
|
||||
SteamUserStats()->ResetAllStats(true);
|
||||
return true;
|
||||
}
|
||||
|
||||
void SteamStatisticsService::onUserStatsReceived(UserStatsReceived_t* callback) {
|
||||
if (callback->m_nGameID != m_appId)
|
||||
return;
|
||||
|
||||
if (callback->m_eResult != k_EResultOK) {
|
||||
m_error = {strf("Steam RequestCurrentStats failed with code %d", callback->m_eResult)};
|
||||
return;
|
||||
}
|
||||
|
||||
Logger::debug("Steam RequestCurrentStats successful");
|
||||
m_initialized = true;
|
||||
}
|
||||
|
||||
void SteamStatisticsService::onUserStatsStored(UserStatsStored_t* callback) {
|
||||
if (callback->m_nGameID != m_appId)
|
||||
return;
|
||||
|
||||
if (callback->m_eResult == k_EResultOK) {
|
||||
Logger::debug("Steam StoreStats successful");
|
||||
return;
|
||||
}
|
||||
|
||||
if (callback->m_eResult == k_EResultInvalidParam) {
|
||||
// A stat we set broke a constraint and was reverted on the service.
|
||||
Logger::info("Steam StoreStats: Some stats failed validation");
|
||||
return;
|
||||
}
|
||||
|
||||
m_error = {strf("Steam StoreStats failed with code %d", callback->m_eResult)};
|
||||
}
|
||||
|
||||
void SteamStatisticsService::onAchievementStored(UserAchievementStored_t* callback) {
|
||||
if (callback->m_nGameID != m_appId)
|
||||
return;
|
||||
|
||||
Logger::debug("Steam achievement %s stored successfully", callback->m_rgchAchievementName);
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue