bevy_mouse_tracking_plugin/
mouse_motion.rs1use bevy::prelude::*;
2
3use bevy::input::mouse::MouseMotion as BevyMouseMotion;
4
5pub struct MouseMotionPlugin;
7
8#[derive(Debug, Resource, Clone, Copy, PartialEq, Event)]
9pub struct MouseMotion {
10 pub delta: Vec2,
11}
12
13impl bevy::app::Plugin for MouseMotionPlugin {
14 fn build(&self, app: &mut bevy::app::App) {
15 app.add_event::<MouseMotion>();
16 app.insert_resource(MouseMotion { delta: Vec2::ZERO });
17 app.add_systems(
18 First,
19 update_mouse_motion.after(bevy::ecs::event::event_update_system::<MouseMotion>),
20 );
21 }
22}
23
24fn update_mouse_motion(mut events: EventReader<BevyMouseMotion>, mut res: ResMut<MouseMotion>) {
25 let delta = events.read().fold(Vec2::ZERO, |acc, e| acc + e.delta);
26 *res = MouseMotion { delta };
27}