From a69e1cfae29819acb34406e99dfc70a5121906a5 Mon Sep 17 00:00:00 2001 From: Rendo Date: Sat, 24 Jan 2026 05:27:26 +0500 Subject: [PATCH] card system base --- src/card.rs | 67 ++++++++++++++++++++++++++++++++ src/main.rs | 9 +++-- src/{turn_system.rs => turns.rs} | 5 ++- 3 files changed, 76 insertions(+), 5 deletions(-) create mode 100644 src/card.rs rename src/{turn_system.rs => turns.rs} (93%) diff --git a/src/card.rs b/src/card.rs new file mode 100644 index 0000000..80bbfc9 --- /dev/null +++ b/src/card.rs @@ -0,0 +1,67 @@ +use bevy::prelude::*; + +pub struct CardPlugin; + +#[derive(Component)] +pub struct Card; + +#[derive(Component)] +pub struct Hand; + +#[derive(Resource)] +pub struct CardImage(Handle); + +impl Plugin for CardPlugin { + fn build(&self, app: &mut App) { + app.add_systems(Startup, (hand_setup, test_card_setup).chain()) + .add_systems(Update, card_arrange); + } +} + +fn hand_setup(mut commands: Commands, asset_server: Res) { + commands.spawn((Hand, Transform::from_xyz(0., -360., 0.))); + + commands.insert_resource(CardImage( + asset_server.load::("sprites/cards/units/fosma.png"), + )); +} + +fn test_card_setup( + mut commands: Commands, + hand: Single>, + card_image: Res, +) { + commands.spawn(( + Sprite::from_image(card_image.0.clone()), + Transform::from_xyz(0., 0., 0.), + Card, + ChildOf(hand.entity()), + )); + + commands.spawn(( + Sprite::from_image(card_image.0.clone()), + Transform::from_xyz(0., 0., 0.), + Card, + ChildOf(hand.entity()), + )); +} + +fn card_arrange( + query: Query<(&mut Transform, &Sprite, &ChildOf), With>, + hand: Single<(Entity, &Children), With>, + assets: Res>, +) { + let cards_amount = hand.1.len(); + let mut card_id = 0.; + for (mut transform, sprite, child_of) in query { + if child_of.parent() != hand.0 { + continue; + } + let size = assets.get(&sprite.image).unwrap().size_f32(); + let left_boundary = -size.x * (cards_amount as f32) / 2.0; + transform.translation.x = left_boundary + size.x * card_id + size.x / 2.0; + transform.translation.y = size.y / 2.0; + + card_id += 1.0; + } +} diff --git a/src/main.rs b/src/main.rs index 49f8b8e..9280543 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,21 +1,22 @@ use bevy::prelude::*; -mod turn_system; +mod card; +mod turns; fn main() { App::new() - .add_plugins((DefaultPlugins, turn_system::TurnSystemPlugin)) + .add_plugins((DefaultPlugins, turns::TurnSystemPlugin, card::CardPlugin)) .add_systems(Startup, setup) .run(); } fn setup(asset_server: Res, mut commands: Commands) { - let background = asset_server.load("sprites/field.png"); + let background = asset_server.load::("sprites/field.png"); commands.spawn(Camera2d); commands.spawn(( Sprite::from_image(background), - Transform::from_xyz(0., 0., 0.), + Transform::from_xyz(0., 0., -100.), )); } diff --git a/src/turn_system.rs b/src/turns.rs similarity index 93% rename from src/turn_system.rs rename to src/turns.rs index cce2eef..c08b8c6 100644 --- a/src/turn_system.rs +++ b/src/turns.rs @@ -8,7 +8,10 @@ impl Plugin for TurnSystemPlugin { .add_systems(OnEnter(TurnState::PreEffectProcess), pre_effect_setup) .add_systems(OnEnter(TurnState::UnitProcess), unit_setup) .add_systems(OnEnter(TurnState::PostEffectProcess), post_effect_setup) - .add_systems(Update, process_busy_turnables); + .add_systems( + Update, + process_busy_turnables.run_if(not(in_state(TurnState::Turn))), + ); } }