From f1388c5a355517a7a8d09190ccc1abe2b98ec4f1 Mon Sep 17 00:00:00 2001 From: Der_Floh Date: Sun, 28 Jun 2026 10:13:46 +0200 Subject: [PATCH] add refresh for portal --- rpcs3/rpcs3qt/skylander_dialog.cpp | 29 ++++++++++++----------------- rpcs3/rpcs3qt/skylander_dialog.h | 4 ++-- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/rpcs3/rpcs3qt/skylander_dialog.cpp b/rpcs3/rpcs3qt/skylander_dialog.cpp index 6623d27f03..a0b6b7d4c8 100644 --- a/rpcs3/rpcs3qt/skylander_dialog.cpp +++ b/rpcs3/rpcs3qt/skylander_dialog.cpp @@ -14,7 +14,6 @@ #include skylander_dialog* skylander_dialog::inst = nullptr; -std::optional> skylander_dialog::sky_slots[UI_SKY_NUM]; QString last_skylander_path; static const std::map, const std::string> list_skylanders = { @@ -730,6 +729,11 @@ skylander_dialog::skylander_dialog(QWidget* parent) setLayout(vbox_panel); update_edits(); + + m_update_timer = new QTimer(this); + m_update_timer->setInterval(500); + connect(m_update_timer, &QTimer::timeout, this, &skylander_dialog::update_edits); + m_update_timer->start(); } skylander_dialog::~skylander_dialog() @@ -747,13 +751,8 @@ skylander_dialog* skylander_dialog::get_dlg(QWidget* parent) void skylander_dialog::clear_skylander(u8 slot) { - if (const auto& slot_infos = sky_slots[slot]) - { - const auto& [cur_slot, id, var] = slot_infos.value(); - g_skyportal.remove_skylander(cur_slot); - sky_slots[slot] = {}; - update_edits(); - } + g_skyportal.remove_skylander(slot); + update_edits(); } void skylander_dialog::create_skylander(u8 slot) @@ -795,13 +794,7 @@ void skylander_dialog::load_skylander_path(u8 slot, const QString& path) } clear_skylander(slot); - - u16 sky_id = reinterpret_cast&>(data[0x10]); - u16 sky_var = reinterpret_cast&>(data[0x1C]); - - u8 portal_slot = g_skyportal.load_skylander(data.data(), std::move(sky_file)); - sky_slots[slot] = std::tuple(portal_slot, sky_id, sky_var); - + g_skyportal.load_skylander(data.data(), std::move(sky_file)); update_edits(); } @@ -810,9 +803,11 @@ void skylander_dialog::update_edits() for (auto i = 0; i < UI_SKY_NUM; i++) { QString display_string; - if (const auto& sd = sky_slots[i]) + u8 status; + u16 sky_id, sky_var; + g_skyportal.get_figure_info(static_cast(i), status, sky_id, sky_var); + if (status & 1) { - const auto& [portal_slot, sky_id, sky_var] = sd.value(); const auto found_sky = list_skylanders.find(std::make_pair(sky_id, sky_var)); if (found_sky != list_skylanders.cend()) { diff --git a/rpcs3/rpcs3qt/skylander_dialog.h b/rpcs3/rpcs3qt/skylander_dialog.h index bd4224d91b..784ad201be 100644 --- a/rpcs3/rpcs3qt/skylander_dialog.h +++ b/rpcs3/rpcs3qt/skylander_dialog.h @@ -1,10 +1,10 @@ #pragma once -#include #include "util/types.hpp" #include #include +#include constexpr auto UI_SKY_NUM = 8; @@ -42,8 +42,8 @@ protected: protected: QLineEdit* edit_skylanders[UI_SKY_NUM]{}; - static std::optional> sky_slots[UI_SKY_NUM]; private: + QTimer* m_update_timer; static skylander_dialog* inst; };