use crate::{debug, game_setup}; use bevy::prelude::*; use bevy_rapier2d::prelude::*; pub fn init(app: &mut App) { let app = app.add_plugins(( game_setup::GameSetupPlugin, RapierPhysicsPlugin::::default(), debug::DebugPlugin, )); app.add_systems(Startup, setup_2d) .add_systems(Update, demo_2d); // app.add_systems(Startup, setup_3d) // .add_systems(Update, demo_3d); } fn setup_2d(mut commands: Commands) { commands.spawn(( Name::from("Demo 2D camera"), Camera2d, Transform::from_xyz(0.0, 0.0, 10.0), )); commands.spawn(( Name::from("Demo 2D sprite"), Sprite::sized(Vec2::splat(256.0)), )); } fn demo_2d( mut camera_query: Query<(&mut Transform, &mut OrthographicProjection)>, mut mouse_events: EventReader, mut scroll_events: EventReader, mouse_input: Res>, ) { let raw_mouse_motion: Vec2 = mouse_events.read().map(|e| e.delta).sum(); let raw_scroll_motion: f32 = scroll_events .read() .map(|event| match event.unit { bevy::input::mouse::MouseScrollUnit::Line => event.y * -0.1, bevy::input::mouse::MouseScrollUnit::Pixel => event.y * -0.05, }) .sum(); for (mut transform, mut projection) in camera_query.iter_mut() { projection.scale += raw_scroll_motion * projection.scale; let mouse_motion = raw_mouse_motion * projection.scale * Vec2::new(-1.0, 1.0); if mouse_input.pressed(MouseButton::Middle) { transform.translation += mouse_motion.extend(0.0); } } } fn setup_3d( mut commands: Commands, mut meshes: ResMut>, mut materials: ResMut>, ) { commands.spawn(( Name::from("Demo 3D camera"), Camera3d::default(), Transform::from_xyz(0.0, 0.0, 10.0), PointLight::default(), )); commands.spawn(( Name::from("Demo 3D cuboid"), Mesh3d(meshes.add(Cuboid::from_length(1.0))), MeshMaterial3d(materials.add(Color::from(bevy::color::palettes::css::ORANGE))), )); } fn demo_3d( mut camera_query: Query<&mut Transform, With>, mut mouse_events: EventReader, mouse_input: Res>, key_input: Res>, time: Res