Change textures of tiles #75

Merged
CoCo_Sol merged 14 commits from change-texture into main 2024-03-09 14:37:00 +00:00
Showing only changes of commit e3d3da2029 - Show all commits

View file

@ -16,6 +16,11 @@ pub struct TileJustClicked(pub u32);
#[derive(Event)] #[derive(Event)]
struct ClickOnTheWorld(Vec2); struct ClickOnTheWorld(Vec2);
/// A zone that can't be clicked.
/// For exemple the UI of the game.
#[derive(Component)]
pub struct ZoneNotClickable;
/// A plugin that handles the selection of tiles. /// A plugin that handles the selection of tiles.
pub struct SelectorPlugin; pub struct SelectorPlugin;
@ -35,20 +40,29 @@ fn mouse_handler(
windows: Query<&Window>, windows: Query<&Window>,
cameras: Query<(&Camera, &GlobalTransform)>, cameras: Query<(&Camera, &GlobalTransform)>,
mut events_writer: EventWriter<ClickOnTheWorld>, mut events_writer: EventWriter<ClickOnTheWorld>,
not_clickable_zones: Query<(&Node, &GlobalTransform), With<ZoneNotClickable>>,
ui_scale: Res<UiScale>,
) { ) {
if !mouse_button_input.just_pressed(MouseButton::Left) { if !mouse_button_input.just_pressed(MouseButton::Left) {
return; return;
} }
let cursor_position_on_screen = windows let window = windows.get_single().expect("Main window not found");
.get_single()
.expect("Main window not found") let cursor_position_on_screen = window.cursor_position();
.cursor_position();
let Some(cursor_position_on_screen) = cursor_position_on_screen else { let Some(cursor_position_on_screen) = cursor_position_on_screen else {
return; return;
}; };
for (node, global_transform) in not_clickable_zones.iter() {
let rect = node.physical_rect(global_transform, window.scale_factor(), ui_scale.0);
if rect.contains(cursor_position_on_screen) {
return;
}
}
let (camera, camera_transform) = cameras.get_single().expect("Camera not found"); let (camera, camera_transform) = cameras.get_single().expect("Camera not found");
let cursor_position_in_world = camera let cursor_position_in_world = camera