use avian2d::prelude::*; use bevy::{ input::common_conditions::input_just_pressed, prelude::*, window::{PrimaryWindow, WindowResized}, }; fn main() { App::new() .insert_resource(ClearColor(Color::srgb_u8(26, 26, 46))) .add_plugins(( DefaultPlugins.set(WindowPlugin { primary_window: Some(Window { fit_canvas_to_parent: true, prevent_default_event_handling: false, canvas: Some("#bevy-canvas".into()), ..default() }), ..default() }), PhysicsPlugins::default(), )) .insert_resource(Time::::default().with_relative_speed(5.0)) .add_systems(Startup, setup) .add_systems( Update, ( update_screen_edges, spawn_ball.run_if(input_just_pressed(MouseButton::Left)), ), ) .run(); } #[derive(Component, Clone, Copy)] enum ScreenEdge { Top, Bottom, Left, Right, } fn setup( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, window: Query<&Window, With>, ) { commands.spawn(Camera2d); if let Ok(window) = window.single() { spawn_screen_edges(&mut commands, &mut meshes, &mut materials, window.size()); } } #[derive(Component, Clone, Copy)] struct Ball; fn spawn_ball( mouse_button: Res>, window: Single<&Window, With>, camera_query: Single<(&Camera, &GlobalTransform)>, time: Res