summaryrefslogtreecommitdiff
path: root/Source
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2023-06-05 23:42:11 +0200
committerGitHub <noreply@github.com>2023-06-05 23:42:11 +0200
commit3d4b4cfdc63b06420fad4976a19add23e33cdfe2 (patch)
tree42c281e340ead4eb314832b6a2d0389a33c839e8 /Source
parent678db26f684edaac7c0ea699f2ac2b4771e31993 (diff)
parente2d0ff718cde237199e754d9421a559b319973d6 (diff)
Merge pull request #11872 from LillyJadeKatrin/retroachievements-bugfix
RetroAchievements Bugfix: Fixed Missing DoFrame Call
Diffstat (limited to 'Source')
-rw-r--r--Source/Core/Core/AchievementManager.cpp15
-rw-r--r--Source/Core/Core/AchievementManager.h3
-rw-r--r--Source/Core/Core/Core.cpp4
3 files changed, 18 insertions, 4 deletions
diff --git a/Source/Core/Core/AchievementManager.cpp b/Source/Core/Core/AchievementManager.cpp
index 544af23368..1a05af90bc 100644
--- a/Source/Core/Core/AchievementManager.cpp
+++ b/Source/Core/Core/AchievementManager.cpp
@@ -176,6 +176,8 @@ void AchievementManager::LoadGameByFilenameAsync(const std::string& iso_path,
}
ActivateDeactivateLeaderboards();
ActivateDeactivateRichPresence();
+ // Reset this to zero so that RP immediately triggers on the first frame
+ m_last_ping_time = 0;
callback(fetch_game_data_response);
});
@@ -255,9 +257,13 @@ void AchievementManager::DoFrame()
});
if (!m_system)
return;
- u64 current_time = m_system->GetCoreTiming().GetTicks();
- if (current_time - m_last_ping_time > SystemTimers::GetTicksPerSecond() * 120)
- m_queue.EmplaceItem([this] { PingRichPresence(GenerateRichPresence()); });
+ time_t current_time = std::time(nullptr);
+ if (difftime(current_time, m_last_ping_time) > 120)
+ {
+ RichPresence rp = GenerateRichPresence();
+ m_queue.EmplaceItem([this, rp] { PingRichPresence(rp); });
+ m_last_ping_time = current_time;
+ }
}
u32 AchievementManager::MemoryPeeker(u32 address, u32 num_bytes, void* ud)
@@ -298,6 +304,9 @@ void AchievementManager::AchievementEventHandler(const rc_runtime_event_t* runti
case RC_RUNTIME_EVENT_LBOARD_STARTED:
HandleLeaderboardStartedEvent(runtime_event);
break;
+ case RC_RUNTIME_EVENT_LBOARD_CANCELED:
+ HandleLeaderboardCanceledEvent(runtime_event);
+ break;
case RC_RUNTIME_EVENT_LBOARD_TRIGGERED:
HandleLeaderboardTriggeredEvent(runtime_event);
break;
diff --git a/Source/Core/Core/AchievementManager.h b/Source/Core/Core/AchievementManager.h
index 8e01b9220e..f35cd5f659 100644
--- a/Source/Core/Core/AchievementManager.h
+++ b/Source/Core/Core/AchievementManager.h
@@ -5,6 +5,7 @@
#ifdef USE_RETRO_ACHIEVEMENTS
#include <array>
+#include <ctime>
#include <functional>
#include <mutex>
#include <string>
@@ -109,7 +110,7 @@ private:
u32 m_game_id = 0;
rc_api_fetch_game_data_response_t m_game_data{};
bool m_is_game_loaded = false;
- u64 m_last_ping_time = 0;
+ time_t m_last_ping_time = 0;
struct UnlockStatus
{
diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp
index 1e940d1fed..514863b5f8 100644
--- a/Source/Core/Core/Core.cpp
+++ b/Source/Core/Core/Core.cpp
@@ -900,6 +900,10 @@ void Callback_NewField(Core::System& system)
CallOnStateChangedCallbacks(Core::GetState());
}
}
+
+#ifdef USE_RETRO_ACHIEVEMENTS
+ AchievementManager::GetInstance()->DoFrame();
+#endif // USE_RETRO_ACHIEVEMENTS
}
void UpdateTitle()