This commit is contained in:
2026-02-11 02:30:53 +01:00
parent 1f689bab03
commit d281ad68c2
3 changed files with 36 additions and 9 deletions

View File

@@ -33,7 +33,6 @@ pub struct State {
pub x: i32, pub x: i32,
pub y: i32, pub y: i32,
pub buttons: Buttons, pub buttons: Buttons,
pub previous_buttons: Buttons,
} }
#[derive(Debug, Clone, Copy, Default)] #[derive(Debug, Clone, Copy, Default)]
@@ -120,7 +119,6 @@ impl G13 {
pub fn read(&self) -> Result<State, Box<dyn std::error::Error>> { pub fn read(&self) -> Result<State, Box<dyn std::error::Error>> {
let mut state = self.state(); let mut state = self.state();
state.previous_buttons = state.buttons;
let mut reader = self.interface.endpoint::<Interrupt, In>(0x81)?.reader(8); let mut reader = self.interface.endpoint::<Interrupt, In>(0x81)?.reader(8);
let mut buf = [0; 8]; let mut buf = [0; 8];
reader.read_exact(&mut buf)?; reader.read_exact(&mut buf)?;

View File

@@ -1,4 +1,4 @@
use std::f32::consts::TAU; use std::f32::consts::{PI, TAU};
use std::time::Duration; use std::time::Duration;
use bevy::app::ScheduleRunnerPlugin; use bevy::app::ScheduleRunnerPlugin;
@@ -12,7 +12,7 @@ use wgpu::{TextureFormat, TextureUsages};
mod post_process; mod post_process;
use crate::post_process::PostProcessSettings; use crate::post_process::PostProcessSettings;
use crate::renderer::{ImageExport, ImageExportPlugin, ImageExportSource}; use crate::renderer::{G13Resource, ImageExport, ImageExportPlugin, ImageExportSource};
use crate::shared::Spinner; use crate::shared::Spinner;
mod renderer; mod renderer;
@@ -28,13 +28,13 @@ fn main() {
}) })
.build() .build()
.disable::<WinitPlugin>(), .disable::<WinitPlugin>(),
ScheduleRunnerPlugin::run_loop(Duration::from_secs_f64(1. / 24.)), ScheduleRunnerPlugin::run_loop(Duration::from_secs_f64(1. / 30.)),
post_process::PostProcessPlugin, post_process::PostProcessPlugin,
ImageExportPlugin, ImageExportPlugin,
)) ))
.insert_resource(ClearColor(Color::linear_rgba(0.0, 0.0, 0.0, 1.0))) .insert_resource(ClearColor(Color::linear_rgba(0.0, 0.0, 0.0, 1.0)))
.add_systems(Startup, setup_scene_system) .add_systems(Startup, setup_scene_system)
.add_systems(Update, rotate_cube) .add_systems(Update, (rotate_cube))
.run(); .run();
} }
@@ -72,8 +72,27 @@ fn setup_scene_system(
commands.spawn((ImageExport(export_sources.add(image_handle)),)); commands.spawn((ImageExport(export_sources.add(image_handle)),));
} }
fn rotate_cube(mut cubes: Query<(&mut Transform, &Spinner)>, timer: Res<Time>) { fn rotate_cube(
mut cubes: Query<(&mut Transform, &Spinner)>,
timer: Res<Time>,
g13: Res<G13Resource>,
) {
const DEADZONE: i32 = 30;
let g13 = g13.g13.state();
let mut x = g13.x as f32 / 512.0;
let mut y = g13.y as f32 / 512.0;
if g13.x > -DEADZONE && g13.x < DEADZONE {
x = 0.0;
}
if g13.y > -DEADZONE && g13.y < DEADZONE {
y = 0.0;
}
for (mut transform, _cube) in &mut cubes { for (mut transform, _cube) in &mut cubes {
transform.rotate_y(0.25 * TAU * timer.delta_secs()); transform.rotate_y(x * PI * timer.delta_secs());
transform.rotate_x(y * PI * timer.delta_secs());
} }
} }

View File

@@ -184,7 +184,17 @@ impl Plugin for ImageExportPlugin {
let g13 = G13::new().expect("G13 to be connected"); let g13 = G13::new().expect("G13 to be connected");
let mut _g13 = g13.clone();
std::thread::spawn(move || {
loop {
_g13.read().expect("G13 to be connected");
}
});
let g13r: G13Resource = G13Resource { g13 };
app.configure_sets(PostUpdate, ImageExportSetup) app.configure_sets(PostUpdate, ImageExportSetup)
.insert_resource(g13r.clone())
.register_type::<ImageExportSource>() .register_type::<ImageExportSource>()
.init_asset::<ImageExportSource>() .init_asset::<ImageExportSource>()
.register_asset_reflect::<ImageExportSource>() .register_asset_reflect::<ImageExportSource>()
@@ -196,7 +206,7 @@ impl Plugin for ImageExportPlugin {
let render_app = app.sub_app_mut(RenderApp); let render_app = app.sub_app_mut(RenderApp);
render_app.insert_resource(G13Resource { g13 }).add_systems( render_app.insert_resource(g13r).add_systems(
Render, Render,
save_buffer_to_disk save_buffer_to_disk
.after(RenderSystems::Render) .after(RenderSystems::Render)