diff --git a/crates/border-wars/src/map/click_tile.rs b/crates/border-wars/src/map/click_tile.rs index fb66845..1bfd88e 100644 --- a/crates/border-wars/src/map/click_tile.rs +++ b/crates/border-wars/src/map/click_tile.rs @@ -2,6 +2,7 @@ use bevy::prelude::*; +use super::renderer::TilesGap; use super::Tile; /// The event that is triggered when a tile is clicked. @@ -78,20 +79,25 @@ fn select_closest_tile( tiles: Query<(Entity, &Transform, &Tile)>, mut click_event_reader: EventReader, mut clicked_tile_event_writer: EventWriter, + gap_tiles: Res, ) { for click_event in click_event_reader.read() { // The closest tile and its distance to the cursor. let mut closest_entity: Option = None; let mut closest_position: Option = None; + // To keep the aspect ratio. + let click_position = click_event.0 / gap_tiles.0; + for (tile_entity, tile_transform, tile_type) in tiles.iter() { - let mut tile_position = tile_transform.translation.truncate(); let tile_size = tile_type.get_image_size(); let tile_scale = tile_transform.scale.truncate(); - tile_position += (tile_size / 2.0) * tile_scale; + let mut tile_position = tile_transform.translation.truncate() / gap_tiles.0; + // The origine of the tile is the bottom center. + tile_position.y += (tile_size.y / 2.0) * tile_scale.y / gap_tiles.0.y; - let distance_to_cursor = tile_position.distance(click_event.0); + let distance_to_cursor = tile_position.distance(click_position); if closest_position.is_none() || closest_position > Some(distance_to_cursor) { closest_entity = Some(tile_entity); diff --git a/crates/border-wars/src/map/renderer.rs b/crates/border-wars/src/map/renderer.rs index 55fa90f..0119f72 100644 --- a/crates/border-wars/src/map/renderer.rs +++ b/crates/border-wars/src/map/renderer.rs @@ -21,7 +21,7 @@ impl Plugin for RendererPlugin { /// The gap between the center of the tiles in the map. #[derive(Resource)] -struct TilesGap(Vec2); +pub struct TilesGap(pub Vec2); /// The size of the tiles in the map. #[derive(Resource, Clone, Copy)] @@ -81,7 +81,7 @@ fn render_map( commands.entity(entity).insert(SpriteBundle { sprite: Sprite { - anchor: Anchor::BottomLeft, + anchor: Anchor::BottomCenter, ..default() }, texture,