From fc6a9053b3b7f486baabde7cee654782b3272241 Mon Sep 17 00:00:00 2001 From: Elijah Voigt Date: Sun, 29 Dec 2024 20:16:34 -0800 Subject: [PATCH] face down top of deck card goes away when deck is empty --- src/play.rs | 24 +++++++++++++++++++++++- src/setup.rs | 10 +++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/play.rs b/src/play.rs index 58d1179..40803e7 100644 --- a/src/play.rs +++ b/src/play.rs @@ -1,6 +1,11 @@ use bevy::{prelude::*, utils::RandomState}; -use crate::{deck::Card, menu::UiMessage, setup::AnimationStore, view::ViewState}; +use crate::{ + deck::Card, + menu::UiMessage, + setup::{AnimationStore, TopCard}, + view::ViewState, +}; pub struct PlayPlugin; @@ -194,13 +199,25 @@ fn serve_cards( _trigger: Trigger, in_deck: Query<(Entity, &Card, &DeckOrder)>, spots: Query<&PlayLocation>, + mut top_card: Single<&mut Visibility, With>, mut commands: Commands, ) { info!( "Serving cards from deck ({} cards left)", in_deck.iter().len() ); + if in_deck.is_empty() { + commands.trigger(UiMessage("Deck's empty!".into())); + top_card.toggle_visible_hidden(); + top_card.toggle_inherited_hidden(); + return; + } + let mut n = in_deck.iter().len().saturating_sub(1); + if n == 0 { + top_card.toggle_visible_hidden(); + top_card.toggle_inherited_hidden(); + } // Iterate over every x, y play location for this_x in 0..=3 { @@ -216,6 +233,11 @@ fn serve_cards( .iter() .find(|(_entity, _deck_card, order)| order.0 == n as u8); n = n.saturating_sub(1); + if n == 0 { + top_card.toggle_visible_hidden(); + top_card.toggle_inherited_hidden(); + } + // If that search was fruitful, pull the card from the deck and play it if let Some((e, _, _)) = candidate { commands diff --git a/src/setup.rs b/src/setup.rs index 9a97898..32a6a34 100644 --- a/src/setup.rs +++ b/src/setup.rs @@ -32,6 +32,9 @@ pub(crate) struct AnimationStore { pub store: HashMap, } +#[derive(Component)] +pub(crate) struct TopCard; + /// Setup drawing our cards on the screen pub(crate) fn setup_cards( mut commands: Commands, @@ -69,7 +72,12 @@ pub(crate) fn setup_cards( image: server.load("cards.png"), ..default() }; - parent.spawn((top_card_transform, top_card_sprite, Visibility::Inherited)); + parent.spawn(( + top_card_transform, + top_card_sprite, + Visibility::Inherited, + TopCard, + )); } Deck::iter_shuffled() .enumerate()