Browse Source

Fix issue related to endianness and improve wording

pull/78/head
TechiePi 2 years ago
parent
commit
dd5b9f72a6
  1. 92
      ctru-rs/src/mii.rs

92
ctru-rs/src/mii.rs

@ -263,8 +263,8 @@ impl From<ctru_sys::MiiData> for MiiData {
}; };
let position = SelectorPosition { let position = SelectorPosition {
page_index: partial_vec_to_u8_with_reverse(&raw_position[0..3]), page_index: partial_u8_bits_to_u8(&raw_position[0..3]),
slot_index: partial_vec_to_u8_with_reverse(&raw_position[4..7]), slot_index: partial_u8_bits_to_u8(&raw_position[4..7]),
}; };
let device = ConsoleIdentity { let device = ConsoleIdentity {
@ -285,85 +285,85 @@ impl From<ctru_sys::MiiData> for MiiData {
false => MiiSex::Male, false => MiiSex::Male,
} }
}, },
birthday_month: partial_vec_to_u8_with_reverse(&raw_details[1..4]), birthday_month: partial_u8_bits_to_u8(&raw_details[1..4]),
birthday_day: partial_vec_to_u8_with_reverse(&raw_details[5..9]), birthday_day: partial_u8_bits_to_u8(&raw_details[5..9]),
shirt_color: partial_vec_to_u8_with_reverse(&raw_details[10..13]), shirt_color: partial_u8_bits_to_u8(&raw_details[10..13]),
is_favorite: raw_details[14], is_favorite: raw_details[14],
}; };
let face_style = FaceStyle { let face_style = FaceStyle {
is_sharing_enabled: !raw_face_style[1], is_sharing_enabled: !raw_face_style[1],
shape: partial_vec_to_u8_with_reverse(&raw_face_style[1..4]), shape: partial_u8_bits_to_u8(&raw_face_style[1..4]),
skin_color: partial_vec_to_u8_with_reverse(&raw_face_style[5..7]), skin_color: partial_u8_bits_to_u8(&raw_face_style[5..7]),
}; };
let face_details = FaceDetails { let face_details = FaceDetails {
wrinkles: partial_vec_to_u8_with_reverse(&raw_face_details[0..3]), wrinkles: partial_u8_bits_to_u8(&raw_face_details[0..3]),
makeup: partial_vec_to_u8_with_reverse(&raw_face_details[4..7]), makeup: partial_u8_bits_to_u8(&raw_face_details[4..7]),
}; };
let hair_details = HairDetails { let hair_details = HairDetails {
color: partial_vec_to_u8_with_reverse(&raw_hair_details[0..2]), color: partial_u8_bits_to_u8(&raw_hair_details[0..2]),
is_flipped: raw_hair_details[3], is_flipped: raw_hair_details[3],
}; };
let eye_details = EyeDetails { let eye_details = EyeDetails {
style: partial_vec_to_u8_with_reverse(&raw_eye_details[0..5]), style: partial_u8_bits_to_u8(&raw_eye_details[0..5]),
color: partial_vec_to_u8_with_reverse(&raw_eye_details[6..8]), color: partial_u8_bits_to_u8(&raw_eye_details[6..8]),
scale: partial_vec_to_u8_with_reverse(&raw_eye_details[9..12]), scale: partial_u8_bits_to_u8(&raw_eye_details[9..12]),
y_scale: partial_vec_to_u8_with_reverse(&raw_eye_details[13..15]), y_scale: partial_u8_bits_to_u8(&raw_eye_details[13..15]),
rotation: partial_vec_to_u8_with_reverse(&raw_eye_details[16..20]), rotation: partial_u8_bits_to_u8(&raw_eye_details[16..20]),
x_spacing: partial_vec_to_u8_with_reverse(&raw_eye_details[21..24]), x_spacing: partial_u8_bits_to_u8(&raw_eye_details[21..24]),
y_position: partial_vec_to_u8_with_reverse(&raw_eye_details[25..29]), y_position: partial_u8_bits_to_u8(&raw_eye_details[25..29]),
}; };
let eyebrow_details = EyebrowDetails { let eyebrow_details = EyebrowDetails {
style: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[0..4]), style: partial_u8_bits_to_u8(&raw_eyebrow_details[0..4]),
color: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[5..7]), color: partial_u8_bits_to_u8(&raw_eyebrow_details[5..7]),
scale: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[8..11]), scale: partial_u8_bits_to_u8(&raw_eyebrow_details[8..11]),
y_scale: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[12..14]), y_scale: partial_u8_bits_to_u8(&raw_eyebrow_details[12..14]),
rotation: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[16..19]), rotation: partial_u8_bits_to_u8(&raw_eyebrow_details[16..19]),
x_spacing: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[21..24]), x_spacing: partial_u8_bits_to_u8(&raw_eyebrow_details[21..24]),
y_position: partial_vec_to_u8_with_reverse(&raw_eyebrow_details[25..29]), y_position: partial_u8_bits_to_u8(&raw_eyebrow_details[25..29]),
}; };
let nose_details = NoseDetails { let nose_details = NoseDetails {
style: partial_vec_to_u8_with_reverse(&raw_nose_details[0..4]), style: partial_u8_bits_to_u8(&raw_nose_details[0..4]),
scale: partial_vec_to_u8_with_reverse(&raw_nose_details[5..8]), scale: partial_u8_bits_to_u8(&raw_nose_details[5..8]),
y_position: partial_vec_to_u8_with_reverse(&raw_nose_details[9..13]), y_position: partial_u8_bits_to_u8(&raw_nose_details[9..13]),
}; };
let mouth_details = MouthDetails { let mouth_details = MouthDetails {
style: partial_vec_to_u8_with_reverse(&raw_mouth_details[0..5]), style: partial_u8_bits_to_u8(&raw_mouth_details[0..5]),
color: partial_vec_to_u8_with_reverse(&raw_mouth_details[6..8]), color: partial_u8_bits_to_u8(&raw_mouth_details[6..8]),
scale: partial_vec_to_u8_with_reverse(&raw_mouth_details[9..12]), scale: partial_u8_bits_to_u8(&raw_mouth_details[9..12]),
y_scale: partial_vec_to_u8_with_reverse(&raw_mouth_details[13..15]), y_scale: partial_u8_bits_to_u8(&raw_mouth_details[13..15]),
}; };
let mustache_details = MustacheDetails { let mustache_details = MustacheDetails {
mouth_y_position: partial_vec_to_u8_with_reverse(&raw_mustache_details[0..4]), mouth_y_position: partial_u8_bits_to_u8(&raw_mustache_details[0..4]),
mustache_style: partial_vec_to_u8_with_reverse(&raw_mustache_details[5..7]), mustache_style: partial_u8_bits_to_u8(&raw_mustache_details[5..7]),
}; };
let beard_details = BeardDetails { let beard_details = BeardDetails {
style: partial_vec_to_u8_with_reverse(&raw_beard_details[0..2]), style: partial_u8_bits_to_u8(&raw_beard_details[0..2]),
color: partial_vec_to_u8_with_reverse(&raw_beard_details[3..5]), color: partial_u8_bits_to_u8(&raw_beard_details[3..5]),
scale: partial_vec_to_u8_with_reverse(&raw_beard_details[6..9]), scale: partial_u8_bits_to_u8(&raw_beard_details[6..9]),
y_position: partial_vec_to_u8_with_reverse(&raw_beard_details[10..14]), y_position: partial_u8_bits_to_u8(&raw_beard_details[10..14]),
}; };
let glass_details = GlassDetails { let glass_details = GlassDetails {
style: partial_vec_to_u8_with_reverse(&raw_glass_details[0..3]), style: partial_u8_bits_to_u8(&raw_glass_details[0..3]),
color: partial_vec_to_u8_with_reverse(&raw_glass_details[4..6]), color: partial_u8_bits_to_u8(&raw_glass_details[4..6]),
scale: partial_vec_to_u8_with_reverse(&raw_glass_details[7..10]), scale: partial_u8_bits_to_u8(&raw_glass_details[7..10]),
y_position: partial_vec_to_u8_with_reverse(&raw_glass_details[11..15]), y_position: partial_u8_bits_to_u8(&raw_glass_details[11..15]),
}; };
let mole_details = MoleDetails { let mole_details = MoleDetails {
is_enabled: raw_mole_details[0], is_enabled: raw_mole_details[0],
scale: partial_vec_to_u8_with_reverse(&raw_mole_details[1..4]), scale: partial_u8_bits_to_u8(&raw_mole_details[1..4]),
x_position: partial_vec_to_u8_with_reverse(&raw_mole_details[5..9]), x_position: partial_u8_bits_to_u8(&raw_mole_details[5..9]),
y_position: partial_vec_to_u8_with_reverse(&raw_mole_details[10..14]), y_position: partial_u8_bits_to_u8(&raw_mole_details[10..14]),
}; };
MiiData { MiiData {
@ -411,12 +411,10 @@ fn vec_bit_to_u8(data: [bool; 8]) -> u8 {
.fold(0, |result, bit| (result << 1) ^ u8::from(bit)) .fold(0, |result, bit| (result << 1) ^ u8::from(bit))
} }
/// The reverse allows to write things on a more _humane_ way, but return a LE u8 fn partial_u8_bits_to_u8(data: &[bool]) -> u8 {
fn partial_vec_to_u8_with_reverse(data: &[bool]) -> u8 {
let leading_zeroes_to_add = 8 - data.len(); let leading_zeroes_to_add = 8 - data.len();
let leading_zeroes = vec![false; leading_zeroes_to_add]; let leading_zeroes = vec![false; leading_zeroes_to_add];
let mut val = [data, leading_zeroes.as_slice()].concat(); let mut val = [data, leading_zeroes.as_slice()].concat();
val.reverse();
vec_bit_to_u8(val.try_into().unwrap()) vec_bit_to_u8(val.try_into().unwrap())
} }

Loading…
Cancel
Save