From 279127677d3afde6050c1025ebfb5df73a18ec38 Mon Sep 17 00:00:00 2001 From: BlackDragon Date: Wed, 24 Sep 2025 16:05:23 +0200 Subject: [PATCH] add piston stuff --- Cargo.lock | 56 ++++++++++++++++++++++++++++-- Cargo.toml | 4 ++- src/input/piston.rs | 1 - src/output/piston.rs | 81 +++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 134 insertions(+), 8 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 453d96f..439d6a2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -10,6 +10,7 @@ dependencies = [ "ftdi-embedded-hal", "image", "piston_window", + "pistoncore-sdl2_window", "unreal_asset", "url", ] @@ -758,6 +759,15 @@ dependencies = [ "gl_generator 0.13.1", ] +[[package]] +name = "gl" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a94edab108827d67608095e269cf862e60d920f144a5026d3dbcfd8b877fb404" +dependencies = [ + "gl_generator 0.14.0", +] + [[package]] name = "gl_generator" version = "0.13.1" @@ -1569,7 +1579,7 @@ version = "0.72.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "006f26dfaef3db5d3f29927a5aeedc62680e947707cd1d33015a7dba32234bdb" dependencies = [ - "gl", + "gl 0.13.0", "glutin", "glutin-winit", "pistoncore-input", @@ -1591,6 +1601,19 @@ dependencies = [ "serde_derive", ] +[[package]] +name = "pistoncore-sdl2_window" +version = "0.71.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a55932286299ac3b9aef1b97e2cfaa37b4daed00260da152736d9d435acd3a2" +dependencies = [ + "gl 0.14.0", + "pistoncore-input", + "pistoncore-window", + "sdl2", + "shader_version", +] + [[package]] name = "pistoncore-window" version = "1.0.0" @@ -1905,6 +1928,29 @@ dependencies = [ "tiny-skia", ] +[[package]] +name = "sdl2" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b498da7d14d1ad6c839729bd4ad6fc11d90a57583605f3b4df2cd709a9cd380" +dependencies = [ + "bitflags 1.3.2", + "lazy_static", + "libc", + "sdl2-sys", +] + +[[package]] +name = "sdl2-sys" +version = "0.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "951deab27af08ed9c6068b7b0d05a93c91f0a8eb16b6b816a5e73452a43521d3" +dependencies = [ + "cfg-if", + "libc", + "version-compare 0.1.1", +] + [[package]] name = "serde" version = "1.0.210" @@ -2075,7 +2121,7 @@ dependencies = [ "heck", "pkg-config", "toml", - "version-compare", + "version-compare 0.2.0", ] [[package]] @@ -2329,6 +2375,12 @@ dependencies = [ "piston-float", ] +[[package]] +name = "version-compare" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "579a42fc0b8e0c63b76519a339be31bed574929511fa53c1a3acae26eb258f29" + [[package]] name = "version-compare" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index 6bbee79..987a020 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,13 +12,15 @@ clap = { version = "4.5.17", features = ["derive"] } ftdi-embedded-hal = { version = "0.22.0", features = ["libftd2xx"], optional = true } image = "0.25.2" piston_window = { version = "0.132.0", optional = true } +pistoncore-sdl2_window = { version = "0.71.0", optional = true } unreal_asset = "0.1.16" url = "2.5.2" [features] -default = ["ftdi","piston"] +default = ["ftdi","piston","pistoninput"] ftdi = ["dep:ftdi-embedded-hal"] piston = ["dep:piston_window"] +pistoninput = ["dep:pistoncore-sdl2_window"] [profile.dev] opt-level = 3 diff --git a/src/input/piston.rs b/src/input/piston.rs index afe3c6a..cce4c8b 100644 --- a/src/input/piston.rs +++ b/src/input/piston.rs @@ -9,7 +9,6 @@ impl Input { let mut buf = [0; 1500]; loop { let mut leds: Vec<[f32; 4]> = Vec::new(); - println!("dead"); let (amt, _src) = socket.recv_from(&mut buf).unwrap(); let bytes = buf[..amt].to_vec(); // let _ = tx.send(); diff --git a/src/output/piston.rs b/src/output/piston.rs index b001f99..8c43663 100644 --- a/src/output/piston.rs +++ b/src/output/piston.rs @@ -19,10 +19,12 @@ impl Output { let mut timesince = Instant::now(); let mut buf = [0u8; 60]; let socket = UdpSocket::bind("0.0.0.0:0").unwrap(); + let mut conx: f64 = 0.0; + let mut cony: f64 = 0.0; //screen init - let mut window: PistonWindow = WindowSettings::new("ELApse", [800, 800]) - .transparent(true) + let mut window: PistonWindow = WindowSettings::new("ELApse", [800, 800]) + .transparent(false) .exit_on_esc(true) .build() .unwrap(); @@ -79,6 +81,33 @@ impl Output { mousehold = false } } +//Controller test + if let Some(Button::Controller(button)) = e.press_args() { + println!("Pressed mouse button '{:?}'", button); + } + if let Some(Button::Controller(button)) = e.release_args() { + println!("DePressed mouse button '{:?}'", button); + } + if let Some(args) = e.controller_axis_args() { + println!("DePressed mouse button '{:?}'", args); + if args.axis == 2 || args.axis == 5 { + if args.position > -0.5 { + mousehold = true + } else { + mousehold = false + } + } + if args.axis == 0 { + conx = args.position; + let wh = compare(800.0,800.0) * 0.75; + lastpos = calc_pos_con([conx,cony], [400.0,400.0], wh); + } + if args.axis == 1 { + cony = args.position; + let wh = compare(800.0,800.0) * 0.75; + lastpos = calc_pos_con([conx,cony], [400.0,400.0], wh); + } + } //Led receival match rx.recv_timeout(Duration::from_millis(1)) { @@ -125,8 +154,10 @@ fn calc_pos(point: [f64; 2], center: [f64; 2], wh: f64) -> Option<(i16, i16)> { if deg < 0.0 { deg += 60.0; } - let x = offset(deg as i16, 60, 45)-1; - + let mut x = deg as i16-15; + if x < 0 { + x += 60 + } let mut y: Option = None; for i in 0..8 { let rwh = wh * (1.0 - (i as f64 * 0.065)) / 2.0; @@ -135,6 +166,48 @@ fn calc_pos(point: [f64; 2], center: [f64; 2], wh: f64) -> Option<(i16, i16)> { y = Some(i) } } + if y == None { + let min = wh * (1.0 - ((8.0) * 0.065)) / 2.0; + if distance <= min { + y = Some(7); + } else { + y = Some(0); + } + } + // } + y.map(|y_val| (x, y_val)) +} + +fn calc_pos_con(point: [f64; 2], center: [f64; 2], wh: f64) -> Option<(i16, i16)> { + let dx = point[0]; + let dy = point[1]; + let distance = (dx * dx + dy * dy).sqrt()*wh; + + let angle = dy.atan2(dx); + let mut deg = angle * 30.0 / std::f64::consts::PI; + if deg < 0.0 { + deg += 60.0; + } + let mut x = deg as i16-15; + if x < 0 { + x += 60 + } + let mut y: Option = None; + for i in 0..8 { + let rwh = wh * (1.0 - (i as f64 * 0.065)) / 2.0; + let rwe = wh * (1.0 - ((i as f64 + 1.0) * 0.065)) / 2.0; + if distance <= rwh && distance >= rwe { + y = Some(i) + } + } + if y == None { + let min = wh * (1.0 - ((8.0) * 0.065)) / 2.0; + if distance <= min { + y = Some(7); + } else { + y = Some(0); + } + } // } y.map(|y_val| (x, y_val)) }