got joystick working

This commit is contained in:
Nickiel12 2024-04-06 11:03:21 -07:00
parent 4506d7784b
commit cf094dd746
3 changed files with 19 additions and 4 deletions

View file

@ -1,2 +1,2 @@
ip = "10.0.0.30" ip = "localhost"
port = 8765 port = 8765

View file

@ -89,6 +89,11 @@ impl <'a> CoordState<'a> {
if let Err(e) = self.to_gui.send(GuiUpdate::SocketState(false)).await { if let Err(e) = self.to_gui.send(GuiUpdate::SocketState(false)).await {
error!("Cannot send message to gui thread: {e}"); error!("Cannot send message to gui thread: {e}");
} }
} else {
if let Err(e) = self.to_gui.send(GuiUpdate::SocketState(true)).await {
error!("Cannot send message to gui thread: {e}");
self.close().await;
}
} }
} }

View file

@ -2,11 +2,14 @@ use crate::coordinator::{ApplicationEvent, MoveEvent};
use async_channel::Sender; use async_channel::Sender;
use gilrs::{ev::filter::FilterFn, Axis, Button, Event, EventType, Filter, Gilrs, GilrsBuilder}; use gilrs::{ev::filter::FilterFn, Axis, Button, Event, EventType, Filter, Gilrs, GilrsBuilder};
use log::{warn, info}; use log::{debug, info, warn};
use std::{ use std::{
panic::{self, AssertUnwindSafe}, sync::{atomic::AtomicBool, Arc}, time::Duration panic::{self, AssertUnwindSafe},
sync::{atomic::AtomicBool, Arc},
time::Duration
}; };
static MAX_SENT_ZEROS: u32 = 10;
struct UnknownSlayer; struct UnknownSlayer;
impl FilterFn for UnknownSlayer { impl FilterFn for UnknownSlayer {
@ -44,6 +47,7 @@ pub async fn joystick_loop(
let mut curr_y: i32 = 0; let mut curr_y: i32 = 0;
let mut past_x: i32 = 0; let mut past_x: i32 = 0;
let mut past_y: i32 = 0; let mut past_y: i32 = 0;
let mut count_zeros: u32 = 0;
loop { loop {
// catch unwind because some buttons on the joystick will panic the gilrs object // catch unwind because some buttons on the joystick will panic the gilrs object
@ -74,10 +78,16 @@ pub async fn joystick_loop(
} }
} }
if curr_x != past_x || curr_y != past_y { if (curr_x != past_x || curr_y != past_y) || (count_zeros < MAX_SENT_ZEROS) {
past_x = curr_x; past_x = curr_x;
past_y = curr_y; past_y = curr_y;
if curr_x == 0 && curr_y == 0 {
count_zeros += 1;
} else {
count_zeros = 0;
}
match tx.try_send(ApplicationEvent::MoveEvent(MoveEvent { match tx.try_send(ApplicationEvent::MoveEvent(MoveEvent {
x: curr_x, x: curr_x,
y: curr_y, y: curr_y,