[Kernel] Store earned achievements in-memory to prevent achievements spam
This doesn't store them externally so after restarting they will unlock again
This commit is contained in:
@@ -22,10 +22,14 @@ DECLARE_int32(user_language);
|
||||
namespace xe {
|
||||
namespace kernel {
|
||||
|
||||
AchievementManager::AchievementManager(){};
|
||||
AchievementManager::AchievementManager() { unlocked_achievements.clear(); };
|
||||
|
||||
void AchievementManager::EarnAchievement(uint64_t xuid, uint32_t title_id,
|
||||
uint32_t achievement_id) {
|
||||
if (IsAchievementUnlocked(achievement_id)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const Emulator* emulator = kernel_state()->emulator();
|
||||
ui::WindowedAppContext& app_context =
|
||||
kernel_state()->emulator()->display_window()->app_context();
|
||||
@@ -48,6 +52,7 @@ void AchievementManager::EarnAchievement(uint64_t xuid, uint32_t title_id,
|
||||
const std::string description =
|
||||
fmt::format("{}G - {}", entry.gamerscore, label);
|
||||
|
||||
unlocked_achievements[achievement_id] = Clock::QueryHostSystemTime();
|
||||
// Even if we disable popup we still should store info that this
|
||||
// achievement was earned.
|
||||
if (!cvars::show_achievement_notification) {
|
||||
@@ -63,5 +68,20 @@ void AchievementManager::EarnAchievement(uint64_t xuid, uint32_t title_id,
|
||||
}
|
||||
}
|
||||
|
||||
bool AchievementManager::IsAchievementUnlocked(uint32_t achievement_id) {
|
||||
auto itr = unlocked_achievements.find(achievement_id);
|
||||
|
||||
return itr != unlocked_achievements.cend();
|
||||
}
|
||||
|
||||
uint64_t AchievementManager::GetAchievementUnlockTime(uint32_t achievement_id) {
|
||||
auto itr = unlocked_achievements.find(achievement_id);
|
||||
if (itr == unlocked_achievements.cend()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return itr->second;
|
||||
}
|
||||
|
||||
} // namespace kernel
|
||||
} // namespace xe
|
||||
|
||||
Reference in New Issue
Block a user