diff --git a/rpcs3/Emu/Io/Skylander.cpp b/rpcs3/Emu/Io/Skylander.cpp index b4a0a1605f..d9f188f92a 100644 --- a/rpcs3/Emu/Io/Skylander.cpp +++ b/rpcs3/Emu/Io/Skylander.cpp @@ -558,7 +558,7 @@ void sky_portal::get_status(u8* reply_buf) u16 status = 0; - for (int i = 7; i >= 0; i--) + for (int i = MAX_SKYLANDERS - 1; i >= 0; i--) { auto& s = skylanders[i]; @@ -680,7 +680,7 @@ u8 sky_portal::load_skylander(u8 ui_slot, u8* buf, fs::file in_file) std::optional> sky_portal::get_skylander(u8 ui_slot) const { - //std::lock_guard lock(sky_mutex); + std::lock_guard lock(sky_mutex); return ::at32(ui_skylanders, ui_slot); } diff --git a/rpcs3/Emu/Io/Skylander.h b/rpcs3/Emu/Io/Skylander.h index 540e222e02..9f2a1a72f2 100644 --- a/rpcs3/Emu/Io/Skylander.h +++ b/rpcs3/Emu/Io/Skylander.h @@ -38,7 +38,7 @@ public: bool is_active() const { return activated; } protected: - shared_mutex sky_mutex; + mutable shared_mutex sky_mutex; bool activated = false; u8 interrupt_counter = 0; diff --git a/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.cpp b/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.cpp index 8a09999a6b..2e2924a4ab 100644 --- a/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.cpp +++ b/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.cpp @@ -203,12 +203,12 @@ namespace rsx } else { - entries.emplace_back(std::make_unique(fmt::format("Unknown (Id:%d Var:%d)", sky_id, sky_var))); + entries.emplace_back(std::make_unique(get_localized_string(localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_UNKNOWN) + fmt::format(" (Id:%d Var:%d)", sky_id, sky_var))); } } else { - entries.emplace_back(std::make_unique("None")); + entries.emplace_back(std::make_unique(get_localized_string(localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_NO_SKYLANDER))); } } @@ -359,7 +359,7 @@ namespace rsx } else if (selected_entry->get_type() == skylander_file_type::file) { - std::string full_path = last_skylander_path + selected_entry->get_file_name(); + const std::string full_path = last_skylander_path + selected_entry->get_file_name(); rsx_log.notice("Loading skylander from file: %s", full_path); fs::file sky_file(full_path, fs::read + fs::write + fs::lock); if (!sky_file) diff --git a/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.h b/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.h index ea96c6bb5a..59fac8affb 100644 --- a/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.h +++ b/rpcs3/Emu/RSX/Overlays/USBDevices/overlay_skylander_dialog.h @@ -60,7 +60,7 @@ namespace rsx public: skylander_file_list_entry(skylander_file_type type, const std::string& file_name); - const std::string get_file_name() const + const std::string& get_file_name() const { return file_name; } diff --git a/rpcs3/Emu/localized_string_id.h b/rpcs3/Emu/localized_string_id.h index 0a092a84b9..b2e87d57e5 100644 --- a/rpcs3/Emu/localized_string_id.h +++ b/rpcs3/Emu/localized_string_id.h @@ -281,6 +281,8 @@ enum class localized_string_id HOME_MENU_SETTINGS_SKYLANDER_LOAD, HOME_MENU_SETTINGS_SKYLANDER_LOAD_FILE, HOME_MENU_SETTINGS_SKYLANDER_MANAGER, + HOME_MENU_SETTINGS_SKYLANDER_NO_SKYLANDER, + HOME_MENU_SETTINGS_SKYLANDER_UNKNOWN, HOME_MENU_SETTINGS_DEBUG, HOME_MENU_SETTINGS_DEBUG_OVERLAY, HOME_MENU_SETTINGS_DEBUG_INPUT_OVERLAY, diff --git a/rpcs3/rpcs3qt/localized_emu.h b/rpcs3/rpcs3qt/localized_emu.h index b41dfbe0ff..6559d847bd 100644 --- a/rpcs3/rpcs3qt/localized_emu.h +++ b/rpcs3/rpcs3qt/localized_emu.h @@ -300,6 +300,8 @@ private: case localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_LOAD: return tr("Load Skylander"); case localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_LOAD_FILE: return tr("Select Skylander File"); case localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_MANAGER: return tr("Skylander Manager"); + case localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_NO_SKYLANDER: return tr("None"); + case localized_string_id::HOME_MENU_SETTINGS_SKYLANDER_UNKNOWN: return tr("Unknown"); case localized_string_id::HOME_MENU_SETTINGS_DEBUG: return tr("Debug"); case localized_string_id::HOME_MENU_SETTINGS_DEBUG_OVERLAY: return tr("Debug Overlay", "Debug"); case localized_string_id::HOME_MENU_SETTINGS_DEBUG_INPUT_OVERLAY: return tr("Input Debug Overlay", "Debug"); diff --git a/rpcs3/rpcs3qt/skylander_dialog.cpp b/rpcs3/rpcs3qt/skylander_dialog.cpp index 8efa15abe0..86c9e49fda 100644 --- a/rpcs3/rpcs3qt/skylander_dialog.cpp +++ b/rpcs3/rpcs3qt/skylander_dialog.cpp @@ -220,8 +220,8 @@ skylander_dialog::skylander_dialog(QWidget* parent) QHBoxLayout* hbox_skylander = new QHBoxLayout(); QLabel* label_skyname = new QLabel(QString(tr("Skylander %1")).arg(i + 1)); - edit_skylanders[i] = new QLineEdit(); - edit_skylanders[i]->setEnabled(false); + ::at32(edit_skylanders, i) = new QLineEdit(); + ::at32(edit_skylanders, i)->setEnabled(false); QPushButton* clear_btn = new QPushButton(tr("Clear")); QPushButton* create_btn = new QPushButton(tr("Create")); @@ -232,7 +232,7 @@ skylander_dialog::skylander_dialog(QWidget* parent) connect(load_btn, &QAbstractButton::clicked, this, [this, i]() { load_skylander(i); }); hbox_skylander->addWidget(label_skyname); - hbox_skylander->addWidget(edit_skylanders[i]); + hbox_skylander->addWidget(::at32(edit_skylanders, i)); hbox_skylander->addWidget(clear_btn); hbox_skylander->addWidget(create_btn); hbox_skylander->addWidget(load_btn); @@ -344,6 +344,6 @@ void skylander_dialog::update_edits() display_string = tr("None"); } - edit_skylanders[i]->setText(display_string); + ::at32(edit_skylanders, i)->setText(display_string); } } diff --git a/rpcs3/rpcs3qt/skylander_dialog.h b/rpcs3/rpcs3qt/skylander_dialog.h index 8bff7dc9df..b423c6f8c8 100644 --- a/rpcs3/rpcs3qt/skylander_dialog.h +++ b/rpcs3/rpcs3qt/skylander_dialog.h @@ -39,7 +39,7 @@ protected: void update_edits(); protected: - QLineEdit* edit_skylanders[MAX_SKYLANDERS]{}; + std::array edit_skylanders{}; private: static skylander_dialog* inst;