diff --git a/assets/sprites/field.png b/assets/sprites/field.png index 87a4c09..1eb0d6f 100644 Binary files a/assets/sprites/field.png and b/assets/sprites/field.png differ diff --git a/assets/sprites/field.png~ b/assets/sprites/field.png~ new file mode 100644 index 0000000..87a4c09 Binary files /dev/null and b/assets/sprites/field.png~ differ diff --git a/src/grid.rs b/src/grid.rs index b44db40..dbd5e8c 100644 --- a/src/grid.rs +++ b/src/grid.rs @@ -1,3 +1,70 @@ use bevy::prelude::*; +use crate::{animation::transform::AnimatedTransform, card::drag::MousePosition}; + pub struct GridPlugin; + +impl Plugin for GridPlugin { + fn build(&self, app: &mut App) { + app.add_systems(Startup, setup_grid) + .add_systems(Update, snap_grid_elements); + } +} + +#[derive(Component)] +struct Grid { + bounds: Rect, + columns: usize, + rows: usize, + elements: Vec>, +} + +impl Grid { + pub fn square(start: Vec2, side: f32, cells: usize) -> Self { + 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)), + }, + columns: cells, + rows: cells, + elements: elements, + } + } + + pub fn get_position(&self, index: usize) -> Vec3 { + let x = index % self.columns; + let y = (index / self.columns).clamp(0, self.rows - 1); + + (self.bounds.min + self.cell_size() / 2. + vec2(x as f32, y as f32) * self.cell_size()) + .extend(0.) + } + + fn cell_size(&self) -> Vec2 { + self.bounds.size() / vec2(self.columns as f32, -(self.rows as f32)) + } +} + +fn setup_grid(mut commands: Commands) { + commands.spawn(Grid::square(vec2(-244., 192.), 80., 5)); +} + +fn snap_grid_elements( + mut transform_query: Query<&mut AnimatedTransform>, + grid_query: Query<&Grid>, +) { + for grid in grid_query { + for (index, el) in grid.elements.iter().enumerate() { + let Some(entity) = el else { + continue; + }; + let Ok(mut transform) = transform_query.get_mut(entity.clone()) else { + continue; + }; + + transform.translation = grid.get_position(index); + } + } +} diff --git a/src/main.rs b/src/main.rs index 4a2ddbb..f6a8d8a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,7 @@ fn main() { card::CardPlugin, DefaultPlugins, dev_tools::DevToolsPlugin, + grid::GridPlugin, turns::TurnSystemPlugin, )) .add_systems(Startup, setup)