diff --git a/src/main.rs b/src/main.rs index ea58670..005b63c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,46 +2,78 @@ use bevy::{prelude::*, utils::HashMap}; fn main() { App::new() - .add_systems(Startup, startup) .add_plugins(DefaultPlugins) + .init_state::() + .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) { +#[derive(States, Default, Debug, Clone, PartialEq, Eq, Hash)] +enum GameState { + #[default] + Boot, + Setup, + Play, +} + +fn load(mut commands: Commands, server: Res) { 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) { + 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>) { + game_state.set(GameState::Play); +} + +fn start_setup(mut game_state: ResMut>) { + game_state.set(GameState::Setup); +} + +// We expect 81 cards total #[derive(Resource)] struct Deck { cards: HashMap,