add piston stuff

This commit is contained in:
Kyan 2025-09-24 16:05:23 +02:00
parent 82ed8948fb
commit 279127677d
4 changed files with 134 additions and 8 deletions

56
Cargo.lock generated
View file

@ -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"

View file

@ -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

View file

@ -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();

View file

@ -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<sdl2_window::Sdl2Window> = 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<i16> = 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<i16> = 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))
}