Add roll to keyboard controls

This commit is contained in:
Aaron Fenyes 2024-09-10 03:14:33 -07:00
parent 20d072d615
commit aceac5e5c4

View File

@ -170,6 +170,8 @@ fn main() {
let pitch_down = create_signal(0.0); let pitch_down = create_signal(0.0);
let yaw_right = create_signal(0.0); let yaw_right = create_signal(0.0);
let yaw_left = create_signal(0.0); let yaw_left = create_signal(0.0);
let roll_ccw = create_signal(0.0);
let roll_cw = create_signal(0.0);
// controls for general example // controls for general example
let gen_controls = create_node_ref(); let gen_controls = create_node_ref();
@ -385,15 +387,18 @@ fn main() {
let pitch_down_val = pitch_down.get(); let pitch_down_val = pitch_down.get();
let yaw_right_val = yaw_right.get(); let yaw_right_val = yaw_right.get();
let yaw_left_val = yaw_left.get(); let yaw_left_val = yaw_left.get();
let roll_ccw_val = roll_ccw.get();
let roll_cw_val = roll_cw.get();
let turntable_val = turntable.get(); let turntable_val = turntable.get();
// update the construction's orientation // update the construction's orientation
let ang_vel = { let ang_vel = {
let pitch = pitch_up_val - pitch_down_val; let pitch = pitch_up_val - pitch_down_val;
let yaw = yaw_right_val - yaw_left_val; let yaw = yaw_right_val - yaw_left_val;
let roll = roll_ccw_val - roll_cw_val;
let ang_vel_from_keyboard = let ang_vel_from_keyboard =
if pitch != 0.0 || yaw != 0.0 { if pitch != 0.0 || yaw != 0.0 || roll != 0.0 {
NAV_SPEED * Vector3::new(-pitch, yaw, 0.0).normalize() NAV_SPEED * Vector3::new(-pitch, yaw, roll).normalize()
} else { } else {
Vector3::zeros() Vector3::zeros()
}; };
@ -485,6 +490,8 @@ fn main() {
|| pitch_down_val != 0.0 || pitch_down_val != 0.0
|| yaw_left_val != 0.0 || yaw_left_val != 0.0
|| yaw_right_val != 0.0 || yaw_right_val != 0.0
|| roll_cw_val != 0.0
|| roll_ccw_val != 0.0
|| turntable_val || turntable_val
); );
} else { } else {
@ -500,6 +507,8 @@ fn main() {
match event.key().as_str() { match event.key().as_str() {
"ArrowUp" => pitch_up.set(value), "ArrowUp" => pitch_up.set(value),
"ArrowDown" => pitch_down.set(value), "ArrowDown" => pitch_down.set(value),
"ArrowRight" if event.shift_key() => roll_cw.set(value),
"ArrowLeft" if event.shift_key() => roll_ccw.set(value),
"ArrowRight" => yaw_right.set(value), "ArrowRight" => yaw_right.set(value),
"ArrowLeft" => yaw_left.set(value), "ArrowLeft" => yaw_left.set(value),
_ => navigating = false _ => navigating = false
@ -538,13 +547,33 @@ fn main() {
width=600, width=600,
height=600, height=600,
tabindex=0, tabindex=0,
on:keydown=move |event: KeyboardEvent| { set_nav_signal(event, 1.0); }, on:keydown=move |event: KeyboardEvent| {
on:keyup=move |event: KeyboardEvent| { set_nav_signal(event, 0.0); }, if event.key() == "Shift" {
roll_cw.set(yaw_right.get());
roll_ccw.set(yaw_left.get());
yaw_right.set(0.0);
yaw_left.set(0.0);
} else {
set_nav_signal(event, 1.0);
}
},
on:keyup=move |event: KeyboardEvent| {
if event.key() == "Shift" {
yaw_right.set(roll_cw.get());
yaw_left.set(roll_ccw.get());
roll_cw.set(0.0);
roll_ccw.set(0.0);
} else {
set_nav_signal(event, 0.0);
}
},
on:blur=move |_| { on:blur=move |_| {
pitch_up.set(0.0); pitch_up.set(0.0);
pitch_down.set(0.0); pitch_down.set(0.0);
yaw_right.set(0.0); yaw_right.set(0.0);
yaw_left.set(0.0); yaw_left.set(0.0);
roll_ccw.set(0.0);
roll_cw.set(0.0);
} }
) )
div(ref=gen_controls) { div(ref=gen_controls) {