private void Update() {
if (!SteamManager.Initialized)
return;
if (!m_bRequestedStats) {
// Is Steam Loaded? if no, can't get stats, done
if (!SteamManager.Initialized) {
m_bRequestedStats = true;
return;
}
// If yes, request our stats
bool bSuccess = SteamUserStats.RequestCurrentStats();
// This function should only return false if we weren't logged in, and we already checked that.
// But handle it being false again anyway, just ask again later.
m_bRequestedStats = bSuccess;
}
if (!m_bStatsValid)
return;
// Get info from sources
// Evaluate achievements
foreach (Achievement_t achievement in m_Achievements) {
if (achievement.m_bAchieved)
continue;
switch (achievement.m_eAchievementID) {
case Achievement.ACH_WIN_ONE_GAME:
if (m_nTotalNumWins != 0) {
UnlockAchievement(achievement);
}
break;
case Achievement.ACH_WIN_100_GAMES:
if (m_nTotalNumWins >= 100) {
UnlockAchievement(achievement);
}
break;
case Achievement.ACH_TRAVEL_FAR_ACCUM:
if (m_flTotalFeetTraveled >= 5280) {
UnlockAchievement(achievement);
}
break;
case Achievement.ACH_TRAVEL_FAR_SINGLE:
if (m_flGameFeetTraveled >= 500) {
UnlockAchievement(achievement);
}
break;
}
}
//Store stats in the Steam database if necessary
if (m_bStoreStats) {
// already set any achievements in UnlockAchievement
// set stats
SteamUserStats.SetStat("NumGames", m_nTotalGamesPlayed);
SteamUserStats.SetStat("NumWins", m_nTotalNumWins);
SteamUserStats.SetStat("NumLosses", m_nTotalNumLosses);
SteamUserStats.SetStat("FeetTraveled", m_flTotalFeetTraveled);
SteamUserStats.SetStat("MaxFeetTraveled", m_flMaxFeetTraveled);
// Update average feet / second stat
SteamUserStats.UpdateAvgRateStat("AverageSpeed", m_flGameFeetTraveled, m_flGameDurationSeconds);
// The averaged result is calculated for us
SteamUserStats.GetStat("AverageSpeed", out m_flAverageSpeed);
bool bSuccess = SteamUserStats.StoreStats();
// If this failed, we never sent anything to the server, try
// again later.
m_bStoreStats = !bSuccess;
}
}