bevy_mouse_tracking_plugin 0.1.1

A plugin for effortless mouse tracking in the bevy game engine.
Documentation

bevy_mouse_tracking_plugin

Tracking the mouse in bevy is kind of annoying. You gotta use Events, and EventReaders, and even then, they only get called when the mouse actually moves.

This crate aims to make this as easy as possible, by providing a static resource that tracks the mouse position every frame. First, add the plugin to your app:

use bevy::prelude::*;
use bevy_mouse_tracking_plugin::MousePosPlugin;
fn main() {
    App::build()
        .add_plugins(DefaultPlugins)
        .add_plugin(MousePosPlugin::None);
}

Now, you can access the resource in your Systems:

use bevy_mouse_tracking_plugin::MousePos;
fn dbg_mouse(mouse: Res<MousePos>) {
    eprintln!("{}", *mouse);
}

...and don't forget to add the system to your app:

        .add_plugin(MousePosPlugin::None)
        .add_system(dbg_mouse.system());

This will print the screen-space location of the mouse on every frame.

However, we can do better than just screen-space: we support automatic transformation to world-space coordinates. Change the plugin to this:

fn main() {
    App::build()
        .add_plugins(DefaultPlugins)
        .add_plugin(MousePosPlugin::Orthographic);
}

In a system...

use bevy_mouse_tracking_plugin::MousePosWorld;
fn dbg_world(mouse: Res<MousePosWorld>) {
    eprintln!("{}", *mouse);
    // Note: the screen-space position is still accessible
}

This will print the world-space location of the mouse on every frame. Note that this is only supported for two-dimensional, orthographic camera, but pull requests for 3D support are welcome!

Additionally, we also support a resource that tracks mouse motion, via [MouseMotionPlugin]. The motion can be accessed from any system in a [MouseMotion] Res.

As a final aside: the name of this crate is intentionally verbose. This is because I don't want to steal a crate name, especially since it is very likely that this crate will eventually be made redundant by future updates to bevy. I recommend renaming the crate in your Cargo.toml:

[dependencies]
mouse_tracking = { package = "bevy_mouse_tracking_plugin", version = "..." }