Browse Source

Merge pull request #122 from DeltaF1/mii-selector-return

Handle empty Mii selector return
pull/126/head
Meziu 2 years ago committed by GitHub
parent
commit
f6d16d1554
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      ctru-rs/examples/mii-selector.rs
  2. 9
      ctru-rs/src/applets/mii_selector.rs

12
ctru-rs/examples/mii-selector.rs

@ -1,4 +1,4 @@
use ctru::applets::mii_selector::MiiSelector; use ctru::applets::mii_selector::{LaunchError, MiiSelector, Options};
use ctru::prelude::*; use ctru::prelude::*;
fn main() { fn main() {
@ -10,13 +10,13 @@ fn main() {
let _console = Console::new(gfx.top_screen.borrow_mut()); let _console = Console::new(gfx.top_screen.borrow_mut());
let mut mii_selector = MiiSelector::new(); let mut mii_selector = MiiSelector::new();
mii_selector.set_options(Options::MII_SELECTOR_CANCEL);
mii_selector.set_initial_index(3); mii_selector.set_initial_index(3);
mii_selector.blacklist_user_mii(0.into()); mii_selector.blacklist_user_mii(0.into());
mii_selector.set_title("Great Mii Selector!"); mii_selector.set_title("Great Mii Selector!");
let result = mii_selector.launch().unwrap(); match mii_selector.launch() {
Ok(result) => {
println!("Is Mii selected?: {:?}", result.is_mii_selected);
println!("Mii type: {:?}", result.mii_type); println!("Mii type: {:?}", result.mii_type);
println!("Name: {:?}", result.mii_data.name); println!("Name: {:?}", result.mii_data.name);
println!("Author: {:?}", result.mii_data.author_name); println!("Author: {:?}", result.mii_data.author_name);
@ -24,6 +24,10 @@ fn main() {
"Does the Mii have moles?: {:?}", "Does the Mii have moles?: {:?}",
result.mii_data.mole_details.is_enabled result.mii_data.mole_details.is_enabled
); );
}
Err(LaunchError::InvalidChecksum) => println!("Corrupt Mii selected"),
Err(LaunchError::NoMiiSelected) => println!("No Mii selected"),
}
// Main loop // Main loop
while apt.main_loop() { while apt.main_loop() {

9
ctru-rs/src/applets/mii_selector.rs

@ -56,14 +56,16 @@ pub struct MiiSelector {
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
pub struct SelectionResult { pub struct SelectionResult {
pub mii_data: MiiData, pub mii_data: MiiData,
pub is_mii_selected: bool,
pub mii_type: MiiType, pub mii_type: MiiType,
} }
/// Error type for the Mii selector /// Error type for the Mii selector
#[derive(Copy, Clone, Debug, Eq, PartialEq)] #[derive(Copy, Clone, Debug, Eq, PartialEq)]
pub enum LaunchError { pub enum LaunchError {
/// The selected Mii's data is corrupt in some way
InvalidChecksum, InvalidChecksum,
/// Either the user cancelled the selection (see [Options::MII_SELECTOR_CANCEL]), or no valid Miis were available to select
NoMiiSelected,
} }
impl MiiSelector { impl MiiSelector {
@ -147,6 +149,10 @@ impl MiiSelector {
let mut return_val = Box::<ctru_sys::MiiSelectorReturn>::default(); let mut return_val = Box::<ctru_sys::MiiSelectorReturn>::default();
unsafe { ctru_sys::miiSelectorLaunch(self.config.as_mut(), return_val.as_mut()) } unsafe { ctru_sys::miiSelectorLaunch(self.config.as_mut(), return_val.as_mut()) }
if return_val.no_mii_selected != 0 {
return Err(LaunchError::NoMiiSelected);
}
if unsafe { ctru_sys::miiSelectorChecksumIsValid(return_val.as_mut()) } { if unsafe { ctru_sys::miiSelectorChecksumIsValid(return_val.as_mut()) } {
Ok((*return_val).into()) Ok((*return_val).into())
} else { } else {
@ -168,7 +174,6 @@ impl From<ctru_sys::MiiSelectorReturn> for SelectionResult {
SelectionResult { SelectionResult {
mii_data: raw_mii_data.into(), mii_data: raw_mii_data.into(),
is_mii_selected: ret.no_mii_selected == 0,
mii_type: if ret.guest_mii_index != 0xFFFFFFFF { mii_type: if ret.guest_mii_index != 0xFFFFFFFF {
MiiType::Guest { MiiType::Guest {
index: ret.guest_mii_index, index: ret.guest_mii_index,

Loading…
Cancel
Save