|
|
|
|
@ -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<ServeCards>,
|
|
|
|
|
in_deck: Query<(Entity, &Card, &DeckOrder)>,
|
|
|
|
|
spots: Query<&PlayLocation>,
|
|
|
|
|
mut top_card: Single<&mut Visibility, With<TopCard>>,
|
|
|
|
|
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
|
|
|
|
|
|