From de6cc1598b1f22b6bdf0e9f06e0753d0265f901f Mon Sep 17 00:00:00 2001 From: skye Date: Wed, 10 May 2023 10:13:33 +0300 Subject: [PATCH] feat(client): take cards from supply piles --- client/src/plugins/game/card/mod.rs | 9 ++++--- client/src/plugins/game/supply/mod.rs | 34 +++++++++++++++++++++++++-- 2 files changed, 36 insertions(+), 7 deletions(-) diff --git a/client/src/plugins/game/card/mod.rs b/client/src/plugins/game/card/mod.rs index 65eeae5..f1147c3 100644 --- a/client/src/plugins/game/card/mod.rs +++ b/client/src/plugins/game/card/mod.rs @@ -33,6 +33,9 @@ pub mod visual_card_kind { pub struct Supply(pub usize); } +#[derive(Component, Clone)] +pub struct ClickedCard; + #[derive(Component)] pub struct VisualCard { pub card: Card, @@ -150,11 +153,7 @@ fn on_spawn_card( OnPointer::::target_component_mut::(|_out, transform| { transform.translation.y -= 0.2; }), - OnPointer::::target_component_mut::(|click, card| { - if click.button == PointerButton::Primary { - println!("clickered"); - } - }), + OnPointer::::target_insert(ClickedCard), ) ); commands.entity(entity).with_children(|parent| { diff --git a/client/src/plugins/game/supply/mod.rs b/client/src/plugins/game/supply/mod.rs index 8da2aff..4961ede 100644 --- a/client/src/plugins/game/supply/mod.rs +++ b/client/src/plugins/game/supply/mod.rs @@ -9,8 +9,10 @@ use bevy::prelude::*; use bevy_rapier3d::prelude::*; +use crate::{plugins::GameActionCreateCallEvent, api::game::{Action, Command}, Global}; + use super::{ - card::{visual_card_kind, VisualCard, VisualCardBundle}, + card::{visual_card_kind, VisualCard, VisualCardBundle, ClickedCard}, GameData, }; @@ -21,7 +23,8 @@ impl Plugin for SupplyPlugin { app.add_event::() .add_event::() .add_system(spawn_supply_piles.run_if(on_event::())) - .add_system(position_supply_piles.run_if(on_event::())); + .add_system(position_supply_piles.run_if(on_event::())) + .add_system(handle_clicked_supply_pile); } } @@ -85,3 +88,30 @@ fn position_supply_piles( offset += 1.0; } } + +fn handle_clicked_supply_pile( + mut commands: Commands, + mut card_query: Query<(Entity, &VisualCard, &visual_card_kind::Supply), (With, With)>, + mut gac_ev_w: EventWriter, + game_data: Res, + global: Res, +) { + let Ok((entity, card, card_kind)) = card_query.get_single() else { + return; + }; + + commands.entity(entity).remove::(); + + gac_ev_w.send(GameActionCreateCallEvent { + action: Action::new( + &game_data.game.as_ref().unwrap().id, + &global.user.as_ref().unwrap().id, + &global.user.as_ref().unwrap().id, + &Command::TakeFromPile { + index: card_kind.0, + for_cost: card.card.cost, + }, + fastrand::u64(u64::MIN..=u64::MAX), + ), + }); +} -- 2.44.1