generated from tipragot/rust
Change textures of tiles #75
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue