use bevy::prelude::*;
use bevy::{app::AppExit, input::mouse::*, window::*};
use quadify::prelude::*;
#[derive(Resource)]
struct MouseInputReceived {
pub button: bool, pub button_e: bool, pub scroll_e: bool, pub motion_e: bool, pub mpos: bool, }
impl Default for MouseInputReceived {
fn default() -> Self {
Self {
button: false,
button_e: false,
scroll_e: false,
motion_e: false,
mpos: false,
}
}
}
#[test]
fn main() {
App::new()
.add_plugins(QuadifyPlugins.set(WindowPlugin {
primary_window: Some(Window {
resolution: WindowResolution::new(512.0, 512.0),
focused: true,
..Default::default()
}),
..Default::default()
}))
.insert_resource(MouseInputReceived::default())
.add_systems(Startup, init)
.add_systems(
Update,
(finish, mbuttons, mbuttons_e, mpos, mwheel, mmotion),
)
.run();
}
fn init() {
info!("This is manual mouse test (for now).");
info!("Just move, scroll and click your mouse.");
}
fn finish(state: Res<MouseInputReceived>, mut exit: EventWriter<AppExit>) {
if state.is_changed() {
if state.button && state.button_e && state.motion_e && state.mpos && state.scroll_e {
info!("All events successfully collected, finishing the test...");
exit.send(AppExit);
}
}
}
fn mbuttons(mut state: ResMut<MouseInputReceived>, btns: Res<Input<MouseButton>>) {
if !state.button {
if btns.just_pressed(MouseButton::Left) {
info!("Button from resource collected!");
state.button = true;
}
}
}
fn mbuttons_e(mut state: ResMut<MouseInputReceived>, mut mbtn_evr: EventReader<MouseButtonInput>) {
if !state.button_e {
if mbtn_evr.read().len() > 0 {
info!("Button from events collected!");
state.button_e = true;
}
}
}
fn mwheel(mut state: ResMut<MouseInputReceived>, mut scroll_evr: EventReader<MouseWheel>) {
if !state.scroll_e {
if scroll_evr.read().len() > 0 {
info!("Wheel from events collected!");
state.scroll_e = true;
}
}
}
fn mmotion(mut state: ResMut<MouseInputReceived>, mut motion_evr: EventReader<MouseMotion>) {
if !state.motion_e {
if motion_evr.read().len() > 0 {
info!("Motion from events collected!");
state.motion_e = true;
}
}
}
fn mpos(mut state: ResMut<MouseInputReceived>, qwin: Query<&Window, With<PrimaryWindow>>) {
if !state.mpos {
if let Some(_pos) = qwin.single().cursor_position() {
info!("Mouse position from window collected!");
state.mpos = true;
}
}
}