diff --git a/src/main.rs b/src/main.rs index d039dc5..f053af8 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,6 +2,7 @@ use std::ops::{Deref, DerefMut}; use bevy_ecs::{ prelude::*, + query::WorldQuery, system::{Commands, IntoSystem, Query, ReadOnlySystem, Res, ResMut, System}, }; use eframe::{ @@ -17,12 +18,7 @@ mod relations; fn main() { let options = eframe::NativeOptions::default(); - eframe::run_native( - "sketchrs", - options, - Box::new(|_cc| Box::new(MyApp::default())), - ) - .unwrap(); + eframe::run_native("sketchrs", options, Box::new(|_cc| Box::::default())).unwrap(); } #[derive(Clone, Copy, PartialEq, Resource)] @@ -34,6 +30,7 @@ enum Tool { AddRelation, } +#[allow(clippy::derivable_impls)] impl Default for Tool { fn default() -> Self { Tool::Select @@ -113,7 +110,7 @@ fn update_hover_point( points.for_each(|(id, point)| { let hovered = if let Some(hover_pos) = response.hover_pos() { let pos = point_pos.get(point); - let center = to_screen.transform_pos(&*pos); + let center = to_screen.transform_pos(&pos); (hover_pos - center).length() < (POINT_RADIUS * 3.) } else { @@ -147,7 +144,7 @@ fn update_hover_line( let a = hover_pos - points[0]; let p = a.dot(b) / b.dot(b); let perp = a - (p * b); - ((0.)..=(1.)).contains(&p) && perp.length() < 5.0 + ((0.)..=1.).contains(&p) && perp.length() < 5.0 } else { false }; @@ -230,7 +227,7 @@ fn move_tool( if let Some((_, point)) = selected { if response.drag_started() { let drag_point_pos = point_pos.get(point).unwrap(); - drag_delta.0 = hover_pos - to_screen.transform_pos(&*drag_point_pos); + drag_delta.0 = hover_pos - to_screen.transform_pos(&drag_point_pos); } let move_to = to_screen.inverse_transform_to_point(hover_pos - drag_delta.0); point_pos.set(point, move_to).unwrap(); @@ -251,7 +248,7 @@ fn add_point_tool( ) { let hover_pos = response.hover_pos().unwrap(); if response.clicked() { - add_point(&mut commands, hover_pos, &*to_screen); + add_point(&mut commands, hover_pos, &to_screen); } else { painter.circle_filled(hover_pos, POINT_RADIUS, Color32::WHITE); } @@ -275,7 +272,7 @@ fn add_line_tool( (None, true) => { let point_id = match hovered.iter().next() { Some(hovered) => hovered, - None => add_point(&mut commands, hover_pos, &*to_screen), + None => add_point(&mut commands, hover_pos, &to_screen), }; commands.entity(point_id).insert(Selected); } @@ -294,7 +291,7 @@ fn add_line_tool( let end_point = hovered .iter() .next() - .unwrap_or_else(|| add_point(&mut commands, hover_pos, &*to_screen)); + .unwrap_or_else(|| add_point(&mut commands, hover_pos, &to_screen)); let line = Line::new(start_point_id, end_point); commands.spawn(line); @@ -378,7 +375,7 @@ fn paint_points( points.for_each(|(id, point)| { let pos = point_pos.get(point); - let center = to_screen.transform_pos(&*pos); + let center = to_screen.transform_pos(&pos); let color = color_for_var_status(pos.status); let stroke = if selected.contains(id) || hovered.contains(id) { @@ -430,13 +427,13 @@ fn prepare(ctx: Res) { ctx.set_visuals(egui::Visuals::dark()); } -fn toolbar<'a>( +fn toolbar( ctx: Res, selected: Query>, mut commands: Commands, mut tool: ResMut, ) { - egui::TopBottomPanel::top("top_panel").show(&**ctx, |ui| { + egui::TopBottomPanel::top("top_panel").show(&ctx, |ui| { // ui.heading("sketchrs"); let mut selected_tool = *tool; ui.horizontal(|ui| { @@ -482,7 +479,7 @@ impl Default for ShowEntitiesSchedule { } } -fn central_panel(mut world: &mut World, mut schedule: Local) { +fn central_panel(world: &mut World, mut schedule: Local) { let ctx = world.get_resource::().unwrap().0.clone(); egui::CentralPanel::default() .frame(egui::Frame::none()) @@ -501,7 +498,7 @@ fn central_panel(mut world: &mut World, mut schedule: Local(); world.remove_resource::(); @@ -509,26 +506,33 @@ fn central_panel(mut world: &mut World, mut schedule: Local { + id: Entity, + point: Option<&'a Point>, + line: Option<&'a Line>, +} + fn side_panel( ctx: Res, - selected: Query<(Entity, Option<&Point>, Option<&Line>), With>, + selected: Query>, tool: Res, ) { egui::SidePanel::right("side_panel") .resizable(true) .default_width(150.0) .width_range(80.0..=200.0) - .show(&**ctx, |ui| { + .show(&ctx, |ui| { let tool = *tool; ui.vertical(|ui| match tool { Tool::Select => { let mut count = 0; - selected.for_each(|(id, point, line)| { + selected.for_each(|sel| { count += 1; - if point.is_some() { - ui.label(format!("Selected point {}", id.index())); - } else if line.is_some() { - ui.label(format!("Selected line {}", id.index())); + if sel.point.is_some() { + ui.label(format!("Selected point {}", sel.id.index())); + } else if sel.line.is_some() { + ui.label(format!("Selected line {}", sel.id.index())); } }); if count == 0 { @@ -536,7 +540,7 @@ fn side_panel( } } Tool::AddRelation => { - if let Some(first) = selected.iter().next() { + if let Some(_first) = selected.iter().next() { } else { ui.label("Select an entity to add a relation"); }