From e46d4517b9e3a2c495bb2573f41cd74e52cb1357 Mon Sep 17 00:00:00 2001 From: Rendo Date: Tue, 27 Jan 2026 20:29:52 +0500 Subject: [PATCH] card placing 2/2 --- src/card/drag.rs | 35 ++++++++++++----------------------- src/card/playing.rs | 7 ++++++- src/grid.rs | 12 ++++-------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/src/card/drag.rs b/src/card/drag.rs index 4a783b4..b78b23a 100644 --- a/src/card/drag.rs +++ b/src/card/drag.rs @@ -2,7 +2,7 @@ use bevy::prelude::*; use crate::{ animation::transform::AnimatedTransform, - card::{CardInHand, Hand, InsertCard}, + card::{Card, CardInHand, Hand, InsertCard}, }; #[derive(EntityEvent)] @@ -11,9 +11,6 @@ pub struct CardDropped(pub Entity); #[derive(Component)] pub struct DraggableCard; -#[derive(Component)] -pub struct DraggedCard; - #[derive(Resource)] pub struct MousePosition(pub Vec3); @@ -38,20 +35,13 @@ pub fn card_drag_start( event: On>, mut commands: Commands, card_query: Query<(), With>, - dragged_option: Option>, mut hand: Single<&mut Hand>, ) { - if dragged_option.is_some() { - return; - } if let Err(_) = card_query.get(event.entity) { return; } - commands - .entity(event.entity) - .insert(DraggedCard) - .remove::(); + commands.entity(event.entity).remove::(); if let Some(pos) = hand.0.iter().position(|ent| *ent == event.entity) { hand.0.remove(pos); @@ -59,22 +49,21 @@ pub fn card_drag_start( } pub fn card_drag( - _: On>, - mut card_transform: Single<&mut AnimatedTransform, With>, + event: On>, + mut card_transform: Query<&mut AnimatedTransform, With>, mouse_pos: Res, ) { - card_transform.translation = mouse_pos.0; + if let Ok(mut card) = card_transform.get_mut(event.entity) { + card.translation = mouse_pos.0; + } } pub fn card_drag_end( - _: On>, + event: On>, mut commands: Commands, - dragged: Single>, + cards: Query<(), With>, ) { - commands.trigger(InsertCard(dragged.entity())); - commands.trigger(CardDropped(dragged.entity())); - commands - .entity(dragged.entity()) - .remove::() - .insert(CardInHand); + if let Ok(_) = cards.get(event.entity) { + commands.trigger(CardDropped(event.entity)); + } } diff --git a/src/card/playing.rs b/src/card/playing.rs index 45a3a0f..43d8bf4 100644 --- a/src/card/playing.rs +++ b/src/card/playing.rs @@ -2,7 +2,10 @@ use bevy::prelude::*; use crate::{ animation::transform::AnimatedTransform, - card::drag::{CardDropped, MousePosition}, + card::{ + CardInHand, InsertCard, + drag::{CardDropped, MousePosition}, + }, grid::Grid, unit::UnitTextures, }; @@ -24,5 +27,7 @@ pub fn card_playing_system( commands.entity(event.0).despawn(); } else { commands.entity(fosma).despawn(); + commands.entity(event.0).insert(CardInHand); + commands.trigger(InsertCard(event.0)); } } diff --git a/src/grid.rs b/src/grid.rs index 809b897..4546b0b 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -24,10 +24,10 @@ impl Grid { let mut elements: Vec> = Vec::new(); elements.resize(cells * cells, None); Grid { - bounds: Rect { - min: start, - max: start + Vec2::new(side * (cells as f32), side * (cells as f32)), - }, + bounds: Rect::from_corners( + start, + start + Vec2::new(side * (cells as f32), -side * (cells as f32)), + ), columns: cells, rows: cells, elements: elements, @@ -57,10 +57,6 @@ impl Grid { } } - pub fn is_free(&self, position: Vec2) -> bool { - self.is_occupied(position) == false - } - pub fn try_set(&mut self, position: Vec2, entity: Entity) -> bool { if self.is_occupied(position) { return false;