diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/main.cpp | 51 |
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 | ||
| 3246 | void GMainWindow::LoadAmiibo(const QString& filename) { | 3241 | void 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 | ||