diff --git a/src/deck.rs b/src/deck.rs index 9bc328a..a977ca9 100644 --- a/src/deck.rs +++ b/src/deck.rs @@ -51,7 +51,7 @@ impl Deck { Self::cards().into_iter() } - pub(crate) fn shuffled() -> impl Iterator { + pub(crate) fn shuffled() -> Vec { let rs = RandomState::new(); let mut base = Self::cards(); let len = base.len(); @@ -62,7 +62,11 @@ impl Deck { base.swap(a as usize, b as usize); } }); - base.into_iter() + base + } + + pub(crate) fn iter_shuffled() -> impl Iterator { + Deck::shuffled().into_iter() } } diff --git a/src/setup.rs b/src/setup.rs index 7cc3618..0dc6d15 100644 --- a/src/setup.rs +++ b/src/setup.rs @@ -21,31 +21,33 @@ impl Plugin for SetupPlugin { /// Setup drawing our cards on the screen pub(crate) fn setup_cards(mut commands: Commands, deck: Res) { let size = 75.0; - Deck::shuffled().enumerate().for_each(|(i, this_card)| { - let this = deck - .cards - .get(&this_card) - .unwrap_or_else(|| panic!("fech card sprite {:?}", this_card)) - .clone(); - let new_this = Sprite { - custom_size: Some(Vec2::new(40.0, 64.0)), - ..this - }; - // for a 9x9 grid we want x to wrap every 9 and y to increment every 9 - // TODO: Determine based on screen size what this offset and scaling should be - let x = i % 9; - let y = i / 9; - let l = size; - let x_off = -(size / 2.0) * 9.0; - let y_off = -(size / 2.0) * 8.0; - let t = Transform::from_xyz(l * (x as f32) + x_off, l * (y as f32) + y_off, 0.0); - commands - .spawn((new_this, this_card, t)) - .observe(debug::set_debug_card) - .observe(debug::hide_debug_card) - .observe(play::reset_rotation) - .observe(play::toggle_selected); - }); + Deck::iter_shuffled() + .enumerate() + .for_each(|(i, this_card)| { + let this = deck + .cards + .get(&this_card) + .unwrap_or_else(|| panic!("fech card sprite {:?}", this_card)) + .clone(); + let new_this = Sprite { + custom_size: Some(Vec2::new(40.0, 64.0)), + ..this + }; + // for a 9x9 grid we want x to wrap every 9 and y to increment every 9 + // TODO: Determine based on screen size what this offset and scaling should be + let x = i % 9; + let y = i / 9; + let l = size; + let x_off = -(size / 2.0) * 9.0; + let y_off = -(size / 2.0) * 8.0; + let t = Transform::from_xyz(l * (x as f32) + x_off, l * (y as f32) + y_off, 0.0); + commands + .spawn((new_this, this_card, t)) + .observe(debug::set_debug_card) + .observe(debug::hide_debug_card) + .observe(play::reset_rotation) + .observe(play::toggle_selected); + }); } /// Setup our camera to view cardson the screen