summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/yuzu/main.cpp51
1 files changed, 26 insertions, 25 deletions
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index e2c2b9292..632f7c9c9 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -105,12 +105,12 @@ static FileSys::VirtualFile VfsDirectoryCreateFileWrapper(const FileSys::Virtual
105#include "core/hle/kernel/k_process.h" 105#include "core/hle/kernel/k_process.h"
106#include "core/hle/service/am/am.h" 106#include "core/hle/service/am/am.h"
107#include "core/hle/service/filesystem/filesystem.h" 107#include "core/hle/service/filesystem/filesystem.h"
108#include "core/hle/service/nfp/nfp.h"
109#include "core/hle/service/sm/sm.h" 108#include "core/hle/service/sm/sm.h"
110#include "core/loader/loader.h" 109#include "core/loader/loader.h"
111#include "core/perf_stats.h" 110#include "core/perf_stats.h"
112#include "core/telemetry_session.h" 111#include "core/telemetry_session.h"
113#include "input_common/drivers/tas_input.h" 112#include "input_common/drivers/tas_input.h"
113#include "input_common/drivers/virtual_amiibo.h"
114#include "input_common/main.h" 114#include "input_common/main.h"
115#include "ui_main.h" 115#include "ui_main.h"
116#include "util/overlay_dialog.h" 116#include "util/overlay_dialog.h"
@@ -3211,21 +3211,16 @@ void GMainWindow::OnLoadAmiibo() {
3211 return; 3211 return;
3212 } 3212 }
3213 3213
3214 Service::SM::ServiceManager& sm = system->ServiceManager(); 3214 auto* virtual_amiibo = input_subsystem->GetVirtualAmiibo();
3215 auto nfc = sm.GetService<Service::NFP::Module::Interface>("nfp:user"); 3215
3216 if (nfc == nullptr) { 3216 // Remove amiibo if one is connected
3217 QMessageBox::warning(this, tr("Error"), tr("The current game is not looking for amiibos")); 3217 if (virtual_amiibo->GetCurrentState() == InputCommon::VirtualAmiibo::State::AmiiboIsOpen) {
3218 return; 3218 virtual_amiibo->CloseAmiibo();
3219 }
3220 const auto nfc_state = nfc->GetCurrentState();
3221 if (nfc_state == Service::NFP::DeviceState::TagFound ||
3222 nfc_state == Service::NFP::DeviceState::TagMounted) {
3223 nfc->CloseAmiibo();
3224 QMessageBox::warning(this, tr("Amiibo"), tr("The current amiibo has been removed")); 3219 QMessageBox::warning(this, tr("Amiibo"), tr("The current amiibo has been removed"));
3225 return; 3220 return;
3226 } 3221 }
3227 3222
3228 if (nfc_state != Service::NFP::DeviceState::SearchingForTag) { 3223 if (virtual_amiibo->GetCurrentState() != InputCommon::VirtualAmiibo::State::WaitingForAmiibo) {
3229 QMessageBox::warning(this, tr("Error"), tr("The current game is not looking for amiibos")); 3224 QMessageBox::warning(this, tr("Error"), tr("The current game is not looking for amiibos"));
3230 return; 3225 return;
3231 } 3226 }
@@ -3244,24 +3239,30 @@ void GMainWindow::OnLoadAmiibo() {
3244} 3239}
3245 3240
3246void GMainWindow::LoadAmiibo(const QString& filename) { 3241void GMainWindow::LoadAmiibo(const QString& filename) {
3247 Service::SM::ServiceManager& sm = system->ServiceManager(); 3242 auto* virtual_amiibo = input_subsystem->GetVirtualAmiibo();
3248 auto nfc = sm.GetService<Service::NFP::Module::Interface>("nfp:user"); 3243 const QString title = tr("Error loading Amiibo data");
3249 if (nfc == nullptr) {
3250 return;
3251 }
3252
3253 // Remove amiibo if one is connected 3244 // Remove amiibo if one is connected
3254 const auto nfc_state = nfc->GetCurrentState(); 3245 if (virtual_amiibo->GetCurrentState() == InputCommon::VirtualAmiibo::State::AmiiboIsOpen) {
3255 if (nfc_state == Service::NFP::DeviceState::TagFound || 3246 virtual_amiibo->CloseAmiibo();
3256 nfc_state == Service::NFP::DeviceState::TagMounted) {
3257 nfc->CloseAmiibo();
3258 QMessageBox::warning(this, tr("Amiibo"), tr("The current amiibo has been removed")); 3247 QMessageBox::warning(this, tr("Amiibo"), tr("The current amiibo has been removed"));
3259 return; 3248 return;
3260 } 3249 }
3261 3250
3262 if (!nfc->LoadAmiibo(filename.toStdString())) { 3251 switch (virtual_amiibo->LoadAmiibo(filename.toStdString())) {
3263 QMessageBox::warning(this, tr("Error loading Amiibo data"), 3252 case InputCommon::VirtualAmiibo::Info::NotAnAmiibo:
3264 tr("Unable to load Amiibo data.")); 3253 QMessageBox::warning(this, title, tr("The selected file is not a valid amiibo"));
3254 break;
3255 case InputCommon::VirtualAmiibo::Info::UnableToLoad:
3256 QMessageBox::warning(this, title, tr("The selected file is already on use"));
3257 break;
3258 case InputCommon::VirtualAmiibo::Info::WrongDeviceState:
3259 QMessageBox::warning(this, title, tr("The current game is not looking for amiibos"));
3260 break;
3261 case InputCommon::VirtualAmiibo::Info::Unknown:
3262 QMessageBox::warning(this, title, tr("An unkown error occured"));
3263 break;
3264 default:
3265 break;
3265 } 3266 }
3266} 3267}
3267 3268