From 41d8def875d41ce5c23e36ce370af26706ffbfcd Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Sat, 16 Sep 2023 15:10:41 -0500 Subject: [PATCH] analog support --- client/src/main.rs | 19 +++++++++++++++++-- pirates/src/lib.rs | 4 ++-- 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/client/src/main.rs b/client/src/main.rs index 53272ea..74b68ae 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -2,7 +2,7 @@ use minifb::{Key, ScaleMode, Window, WindowOptions, Scale}; extern crate pirates; use pirates::{WIDTH, HEIGHT}; #[cfg(feature = "gilrs")] -use gilrs::{Gilrs, Button, Event}; +use gilrs::{Axis, Gilrs, Button}; fn main() { #[cfg(feature = "gilrs")] @@ -33,6 +33,14 @@ fn main() { } } + fn analog_input(chan: u8, val: i8) { + unsafe { + pirates::KEYCODE[0] = chan; + pirates::KEYCODE[1] = (val + 127) as u8; + pirates::keyboard_input(); + } + } + #[cfg(feature = "gamepad")] let mut gamepad_handle = None; @@ -50,13 +58,20 @@ fn main() { } #[cfg(feature = "gamepad")] - if let Some(event) = gilrs.next_event() { + while let Some(event) = gilrs.next_event() { gamepad_handle = Some(event.id); println!("gampad"); } #[cfg(feature = "gamepad")] if let Some(gamepad) = gamepad_handle.map(|h| gilrs.gamepad(h)) { + let val = gamepad.state() + .axis_data(gamepad.axis_code(Axis::LeftStickX).unwrap()); + if val.is_some() { + let val = dbg!(val.unwrap().value() * 127.0) as i8; + dbg!(val); + analog_input(1, val); + } if gamepad.is_pressed(Button::DPadLeft) { keyboard_input(65) } diff --git a/pirates/src/lib.rs b/pirates/src/lib.rs index 30ad007..7617170 100644 --- a/pirates/src/lib.rs +++ b/pirates/src/lib.rs @@ -75,8 +75,7 @@ static BOAT: Mutex = Mutex::new(Boat { x: 0.0, y: 0.0, theta: 0.0, vel: 0. #[no_mangle] pub unsafe extern fn keyboard_input() { - let keycode = KEYCODE[0]; - *LAST_KEY.lock() = Some([keycode as u32, 0]); + *LAST_KEY.lock() = Some([KEYCODE[0] as u32, KEYCODE[1] as u32]); } #[no_mangle] @@ -112,6 +111,7 @@ fn render_frame(buffer: &mut [u32; WIDTH*HEIGHT]) { 173 => camera[2] *= 1.1, // - 65 => boat.theta -= 10.0, // A 68 => boat.theta += 10.0, // D + 1 => boat.theta += (key[1] as f32 - 127.0) * 0.031, // analog rudder _ => {} } }