|
|
|
|
@ -1,4 +1,7 @@
|
|
|
|
|
use bevy::{prelude::*, utils::HashMap};
|
|
|
|
|
use bevy::{
|
|
|
|
|
prelude::*,
|
|
|
|
|
utils::{HashMap, RandomState},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/// Deck and Cards
|
|
|
|
|
pub struct DeckPlugin;
|
|
|
|
|
@ -16,7 +19,7 @@ pub(crate) struct Deck {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
impl Deck {
|
|
|
|
|
pub(crate) fn iter_cards() -> impl Iterator<Item = Card> {
|
|
|
|
|
pub(crate) fn cards() -> Vec<Card> {
|
|
|
|
|
let mut v = Vec::new();
|
|
|
|
|
|
|
|
|
|
[ItemColor::Red, ItemColor::Green, ItemColor::Purple]
|
|
|
|
|
@ -41,8 +44,25 @@ impl Deck {
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
v
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
v.into_iter()
|
|
|
|
|
pub(crate) fn iter_cards() -> impl Iterator<Item = Card> {
|
|
|
|
|
Self::cards().into_iter()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub(crate) fn shuffled() -> impl Iterator<Item = Card> {
|
|
|
|
|
let rs = RandomState::new();
|
|
|
|
|
let mut base = Self::cards();
|
|
|
|
|
let len = base.len();
|
|
|
|
|
(1..len).into_iter().for_each(|i| {
|
|
|
|
|
let a = rs.hash_one(base[i]) % (len as u64);
|
|
|
|
|
let b = rs.hash_one(base[i - 1]) % (len as u64);
|
|
|
|
|
if a > b {
|
|
|
|
|
base.swap(a as usize, b as usize);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
base.into_iter()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|