From f581a892eb7a4d4a0ca9f259fa5053e01fc9a2e1 Mon Sep 17 00:00:00 2001 From: a Date: Sat, 17 Aug 2024 18:32:52 +0300 Subject: [PATCH] in the overlay, use the achievement icon handle directly instead of the icon filepath to load the icon resource --- overlay_experimental/overlay/steam_overlay.h | 4 +-- overlay_experimental/steam_overlay.cpp | 31 ++++++++------------ 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/overlay_experimental/overlay/steam_overlay.h b/overlay_experimental/overlay/steam_overlay.h index ca442b80..241e1290 100644 --- a/overlay_experimental/overlay/steam_overlay.h +++ b/overlay_experimental/overlay/steam_overlay.h @@ -69,8 +69,8 @@ struct Overlay_Achievement std::string name{}; std::string title{}; std::string description{}; - std::string icon_name{}; - std::string icon_gray_name{}; + int icon_handle = 0; + int icon_gray_handle = 0; uint32 progress{}; uint32 max_progress{}; bool hidden{}; diff --git a/overlay_experimental/steam_overlay.cpp b/overlay_experimental/steam_overlay.cpp index 8c504a71..7b8e07c9 100644 --- a/overlay_experimental/steam_overlay.cpp +++ b/overlay_experimental/steam_overlay.cpp @@ -356,8 +356,8 @@ void Steam_Overlay::load_achievements_data() ach.unlock_time = 0; } - ach.icon_name = steamUserStats->get_achievement_icon_name(ach.name.c_str(), true); - ach.icon_gray_name = steamUserStats->get_achievement_icon_name(ach.name.c_str(), false); + ach.icon_handle = steamUserStats->get_achievement_icon_handle(ach.name, true); + ach.icon_gray_handle = steamUserStats->get_achievement_icon_handle(ach.name, false); float pnMinProgress = 0, pnMaxProgress = 0; if (steamUserStats->GetAchievementProgressLimits(ach.name.c_str(), &pnMinProgress, &pnMaxProgress)) { @@ -1285,27 +1285,22 @@ bool Steam_Overlay::try_load_ach_icon(Overlay_Achievement &ach, bool achieved) if (!_renderer) return false; std::weak_ptr &icon_rsrc = achieved ? ach.icon : ach.icon_gray; - const std::string &icon_name = achieved ? ach.icon_name : ach.icon_gray_name; + const int icon_handle = achieved ? ach.icon_handle : ach.icon_gray_handle; uint8_t &load_trials = achieved ? ach.icon_load_trials : ach.icon_gray_load_trials; if (!icon_rsrc.expired()) return true; - if (load_trials && icon_name.size()) { + if (load_trials) { --load_trials; - std::string file_path(Local_Storage::get_game_settings_path() + icon_name); - unsigned int file_size = file_size_(file_path); - - int icon_size = static_cast(settings->overlay_appearance.icon_size); - if (file_size) { - std::string img(Local_Storage::load_image_resized(file_path, "", icon_size)); - if (img.size()) { - icon_rsrc = _renderer->CreateImageResource( - (void*)img.c_str(), - icon_size, icon_size); - - if (!icon_rsrc.expired()) load_trials = Overlay_Achievement::ICON_LOAD_MAX_TRIALS; - PRINT_DEBUG("'%s' (result=%i)", ach.name.c_str(), (int)!icon_rsrc.expired()); - } + auto image_info = settings->get_image(icon_handle); + if (image_info) { + int icon_size = static_cast(settings->overlay_appearance.icon_size); + icon_rsrc = _renderer->CreateImageResource( + (void*)image_info->data.c_str(), + icon_size, icon_size); + + if (!icon_rsrc.expired()) load_trials = Overlay_Achievement::ICON_LOAD_MAX_TRIALS; + PRINT_DEBUG("'%s' (result=%i)", ach.name.c_str(), (int)!icon_rsrc.expired()); } }