bevy_mouse_tracking_plugin/
mouse_motion.rs

1use bevy::prelude::*;
2
3use bevy::input::mouse::MouseMotion as BevyMouseMotion;
4
5/// Plugin that tracks mouse motion.
6pub 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}