|
|
|
|
@ -2,46 +2,78 @@ use bevy::{prelude::*, utils::HashMap};
|
|
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
|
App::new()
|
|
|
|
|
.add_systems(Startup, startup)
|
|
|
|
|
.add_plugins(DefaultPlugins)
|
|
|
|
|
.init_state::<GameState>()
|
|
|
|
|
.add_systems(Startup, (load, start_setup).chain())
|
|
|
|
|
.add_systems(
|
|
|
|
|
OnEnter(GameState::Setup),
|
|
|
|
|
(setup_cards, setup_camera, start_play).chain(),
|
|
|
|
|
)
|
|
|
|
|
.run();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn startup(mut commands: Commands, server: Res<AssetServer>) {
|
|
|
|
|
#[derive(States, Default, Debug, Clone, PartialEq, Eq, Hash)]
|
|
|
|
|
enum GameState {
|
|
|
|
|
#[default]
|
|
|
|
|
Boot,
|
|
|
|
|
Setup,
|
|
|
|
|
Play,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn load(mut commands: Commands, server: Res<AssetServer>) {
|
|
|
|
|
let sprite = Sprite {
|
|
|
|
|
image: server.load("red_oval_open_one.png"),
|
|
|
|
|
..default()
|
|
|
|
|
};
|
|
|
|
|
let mut cards = HashMap::new();
|
|
|
|
|
|
|
|
|
|
let card = Card {
|
|
|
|
|
color: ItemColor::Red,
|
|
|
|
|
shape: ItemShape::Oval,
|
|
|
|
|
pattern: ItemPattern::Open,
|
|
|
|
|
number: ItemNumber::One,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
let mut cards = HashMap::new();
|
|
|
|
|
cards.insert(card, sprite);
|
|
|
|
|
// [ItemColor::Red, ItemColor::Green, ItemColor::Purple]
|
|
|
|
|
// .iter()
|
|
|
|
|
// .for_each(|c| {
|
|
|
|
|
// [ItemNumber::One, ItemNumber::Two, ItemNumber::Three]
|
|
|
|
|
// .iter()
|
|
|
|
|
// .for_each(|n| {
|
|
|
|
|
// [ItemPattern::Solid, ItemPattern::Striped, ItemPattern::Open]
|
|
|
|
|
// .iter()
|
|
|
|
|
// .for_each(|p| {
|
|
|
|
|
// [ItemShape::Oval, ItemShape::Diamond, ItemShape::Squiggle]
|
|
|
|
|
// .iter()
|
|
|
|
|
// .for_each(|s| {
|
|
|
|
|
// cards.insert((*c, *s, *p, *n), sprite.clone());
|
|
|
|
|
// });
|
|
|
|
|
// });
|
|
|
|
|
// });
|
|
|
|
|
// });
|
|
|
|
|
|
|
|
|
|
let test_deck = Deck { cards };
|
|
|
|
|
|
|
|
|
|
commands.insert_resource(test_deck);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 81 cards total
|
|
|
|
|
fn setup_camera(mut commands: Commands) {
|
|
|
|
|
commands.spawn((
|
|
|
|
|
Camera2d,
|
|
|
|
|
Camera {
|
|
|
|
|
hdr: true,
|
|
|
|
|
..default()
|
|
|
|
|
},
|
|
|
|
|
));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn setup_cards(mut commands: Commands, deck: Res<Deck>) {
|
|
|
|
|
let this = deck
|
|
|
|
|
.cards
|
|
|
|
|
.get(&Card {
|
|
|
|
|
color: ItemColor::Red,
|
|
|
|
|
shape: ItemShape::Oval,
|
|
|
|
|
pattern: ItemPattern::Open,
|
|
|
|
|
number: ItemNumber::One,
|
|
|
|
|
})
|
|
|
|
|
.unwrap()
|
|
|
|
|
.clone();
|
|
|
|
|
commands.spawn(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn start_play(mut game_state: ResMut<NextState<GameState>>) {
|
|
|
|
|
game_state.set(GameState::Play);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn start_setup(mut game_state: ResMut<NextState<GameState>>) {
|
|
|
|
|
game_state.set(GameState::Setup);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// We expect 81 cards total
|
|
|
|
|
#[derive(Resource)]
|
|
|
|
|
struct Deck {
|
|
|
|
|
cards: HashMap<Card, Sprite>,
|
|
|
|
|
|