drag and drop

This commit is contained in:
Rendo 2026-01-25 18:21:01 +05:00
commit 28b6b040b7
4 changed files with 88 additions and 14 deletions

View file

@ -1,5 +1,6 @@
use crate::animation::transform::AnimatedTransform;
use bevy::prelude::*;
use drag::*;
pub mod drag;
@ -26,6 +27,11 @@ impl Plugin for CardPlugin {
.add_systems(Update, card_arrange)
.add_observer(card_add)
.add_observer(card_clear);
app.insert_resource(MousePosition(Vec3::new(0., 0., 0.)))
.add_systems(PreUpdate, mouse_position_system)
.add_observer(card_drag_start)
.add_observer(card_drag)
.add_observer(card_drag_end);
}
}
@ -42,19 +48,18 @@ fn hand_setup(mut commands: Commands, asset_server: Res<AssetServer>) {
}
fn card_arrange(
query: Query<(Entity, &mut AnimatedTransform, &Sprite, &ChildOf), With<Card>>,
mut query: Query<(&mut AnimatedTransform, &Sprite), With<Card>>,
hand: Single<(Entity, &Children), With<Hand>>,
assets: Res<Assets<Image>>,
) {
let cards_amount = hand.1.len();
for (entity, mut transform, sprite, child_of) in query {
if child_of.parent() != hand.0 {
for (index, card) in hand.1.iter().enumerate() {
let Ok((mut transform, sprite)) = query.get_mut(card) else {
continue;
}
};
let size = assets.get(&sprite.image).unwrap().size_f32();
let left_boundary = -size.x * (cards_amount as f32) / 2.0 + size.x / 2.0;
transform.translation.x =
left_boundary + size.x * (hand.1.iter().position(|x| x == entity).unwrap_or(0) as f32);
transform.translation.x = left_boundary + size.x * index as f32;
transform.translation.y = size.y / 2.0;
}
}
@ -71,6 +76,8 @@ fn card_add(
AnimatedTransform::from_xyz(0., 0., 0.),
Card,
ChildOf(hand.entity()),
DraggableCard,
Pickable::default(),
));
}