pan and zoom on gamepad
This commit is contained in:
parent
f7fa101ce2
commit
42843165fc
2 changed files with 21 additions and 8 deletions
|
@ -33,7 +33,8 @@ fn main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn analog_input(chan: u8, val: i8) {
|
fn analog_input(chan: u8, val: f32) {
|
||||||
|
let val = (val * 127.0) as i8;
|
||||||
unsafe {
|
unsafe {
|
||||||
pirates::KEYCODE[0] = chan;
|
pirates::KEYCODE[0] = chan;
|
||||||
pirates::KEYCODE[1] = (val + 127) as u8;
|
pirates::KEYCODE[1] = (val + 127) as u8;
|
||||||
|
@ -60,17 +61,24 @@ fn main() {
|
||||||
#[cfg(feature = "gamepad")]
|
#[cfg(feature = "gamepad")]
|
||||||
while let Some(event) = gilrs.next_event() {
|
while let Some(event) = gilrs.next_event() {
|
||||||
gamepad_handle = Some(event.id);
|
gamepad_handle = Some(event.id);
|
||||||
println!("gampad");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "gamepad")]
|
#[cfg(feature = "gamepad")]
|
||||||
if let Some(gamepad) = gamepad_handle.map(|h| gilrs.gamepad(h)) {
|
if let Some(gamepad) = gamepad_handle.map(|h| gilrs.gamepad(h)) {
|
||||||
let val = gamepad.state()
|
gamepad.axis_data(Axis::LeftStickX).map(|axis| {
|
||||||
.axis_data(gamepad.axis_code(Axis::LeftStickX).unwrap());
|
analog_input(1, axis.value());
|
||||||
if val.is_some() {
|
});
|
||||||
let val = dbg!(val.unwrap().value() * 127.0) as i8;
|
if gamepad.is_pressed(Button::RightTrigger) {
|
||||||
dbg!(val);
|
gamepad.axis_data(Axis::RightStickY).map(|axis| {
|
||||||
analog_input(1, val);
|
analog_input(3, dbg!(axis.value()));
|
||||||
|
});
|
||||||
|
gamepad.axis_data(Axis::RightStickX).map(|axis| {
|
||||||
|
analog_input(4, dbg!(axis.value()));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
gamepad.axis_data(Axis::RightStickY).map(|axis| {
|
||||||
|
analog_input(0, dbg!(axis.value()));
|
||||||
|
});
|
||||||
}
|
}
|
||||||
if gamepad.is_pressed(Button::DPadLeft) {
|
if gamepad.is_pressed(Button::DPadLeft) {
|
||||||
keyboard_input(65)
|
keyboard_input(65)
|
||||||
|
|
|
@ -23,6 +23,8 @@ use spin::Mutex;
|
||||||
#[cfg(feature = "rayon")]
|
#[cfg(feature = "rayon")]
|
||||||
use rayon::prelude::*;
|
use rayon::prelude::*;
|
||||||
|
|
||||||
|
use crate::noise::lerp;
|
||||||
|
|
||||||
mod sampler;
|
mod sampler;
|
||||||
mod noise;
|
mod noise;
|
||||||
|
|
||||||
|
@ -115,7 +117,10 @@ fn render_frame(buffer: &mut [u32; WIDTH*HEIGHT]) {
|
||||||
173 => camera[2] *= 1.1, // -
|
173 => camera[2] *= 1.1, // -
|
||||||
65 => boat.theta -= 10.0, // A
|
65 => boat.theta -= 10.0, // A
|
||||||
68 => boat.theta += 10.0, // D
|
68 => boat.theta += 10.0, // D
|
||||||
|
0 => camera[2] *= 1.0 - (key[1] as f32 - 127.0) * 0.0004, // analog zoom
|
||||||
1 => boat.theta += (key[1] as f32 - 127.0) * 0.031, // analog rudder
|
1 => boat.theta += (key[1] as f32 - 127.0) * 0.031, // analog rudder
|
||||||
|
3 => camera[1] -= (key[1] as f32 - 127.0) * 0.004, // pan[y]
|
||||||
|
4 => camera[0] += (key[1] as f32 - 127.0) * 0.004, // pan[x]
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue