add jilk+uo keys for mouseless camera control
This commit is contained in:
parent
6703431ac6
commit
257094dc8e
11
README.md
11
README.md
|
@ -28,9 +28,18 @@ Key features:
|
|||
- f: toggle 3rd person view
|
||||
- TAB: toggle augmented reality overlay (HUD, low-light amplifier)
|
||||
|
||||
Extra key bindings for mouseless playing:
|
||||
|
||||
- j: look left
|
||||
- i: look up
|
||||
- k: look down
|
||||
- l: look right
|
||||
- u: rotate left
|
||||
- o: rotate right
|
||||
|
||||
# System Requirements
|
||||
|
||||
- Screen, keyboard, mouse
|
||||
- Screen, keyboard
|
||||
- Operating System: Linux, Windows, MacOS
|
||||
- Ideally, a graphics card with vulkan support
|
||||
|
||||
|
|
|
@ -197,12 +197,13 @@ fn apply_input_to_player(
|
|||
let mut acceleration_total = actor::ENGINE_SPEED_FACTOR * dt * acceleration_global;
|
||||
let threshold = 1e-5;
|
||||
if key_input.pressed(settings.key_stop) {
|
||||
// Decelerate
|
||||
for i in 0..3 {
|
||||
if v[i].abs() < threshold {
|
||||
v[i] = 0.0;
|
||||
}
|
||||
else if v[i].signum() != (v[i] + acceleration_total[i]).signum() {
|
||||
// Overshoot
|
||||
// Almost stopped, but we overshot v=0
|
||||
v[i] = 0.0;
|
||||
acceleration_total[i] = 0.0;
|
||||
}
|
||||
|
@ -216,29 +217,46 @@ fn apply_input_to_player(
|
|||
engine.current_warmup = (engine.current_warmup - dt / engine.warmup_seconds).clamp(0.0, 1.0);
|
||||
}
|
||||
|
||||
// Handle mouse input
|
||||
// Handle mouse input and mouse-like key bindings
|
||||
let mut mouse_delta = Vec2::ZERO;
|
||||
let mut pitch_yaw_rot = Vec3::ZERO;
|
||||
let mouseless_sensitivity = 8.0;
|
||||
if key_input.pressed(settings.key_mouseup) {
|
||||
pitch_yaw_rot[0] -= mouseless_sensitivity;
|
||||
}
|
||||
if key_input.pressed(settings.key_mousedown) {
|
||||
pitch_yaw_rot[0] += mouseless_sensitivity;
|
||||
}
|
||||
if key_input.pressed(settings.key_mouseleft) {
|
||||
pitch_yaw_rot[1] += mouseless_sensitivity;
|
||||
}
|
||||
if key_input.pressed(settings.key_mouseright) {
|
||||
pitch_yaw_rot[1] -= mouseless_sensitivity;
|
||||
}
|
||||
if key_input.pressed(settings.key_rotateleft) {
|
||||
pitch_yaw_rot[2] -= mouseless_sensitivity;
|
||||
}
|
||||
if key_input.pressed(settings.key_rotateright) {
|
||||
pitch_yaw_rot[2] += mouseless_sensitivity;
|
||||
}
|
||||
for mouse_event in mouse_events.read() {
|
||||
mouse_delta += mouse_event.delta;
|
||||
}
|
||||
|
||||
if mouse_delta != Vec2::ZERO {
|
||||
// Apply look update
|
||||
let mouse_y_movement = (mouse_delta.y * RADIANS_PER_DOT * settings.mouse_sensitivity).clamp(-PI / 2., PI / 2.);
|
||||
let mouse_x_movement = -mouse_delta.x * RADIANS_PER_DOT * settings.mouse_sensitivity;
|
||||
let (pitch, yaw, rot);
|
||||
if key_input.pressed(settings.key_rotate) {
|
||||
pitch = 0.0;
|
||||
yaw = 0.0;
|
||||
rot = mouse_x_movement;
|
||||
pitch_yaw_rot[2] += mouse_delta.x;
|
||||
} else {
|
||||
pitch = mouse_y_movement;
|
||||
yaw = mouse_x_movement;
|
||||
rot = 0.0;
|
||||
pitch_yaw_rot[0] += mouse_delta.y;
|
||||
pitch_yaw_rot[1] -= mouse_delta.x;
|
||||
}
|
||||
player_transform.rotation *= Quat::from_euler(EulerRot::ZYX, rot, yaw, pitch).normalize();
|
||||
}
|
||||
if pitch_yaw_rot.length_squared() > 0.0001 {
|
||||
pitch_yaw_rot *= RADIANS_PER_DOT * settings.mouse_sensitivity;
|
||||
player_transform.rotation *= Quat::from_euler(EulerRot::ZYX,
|
||||
pitch_yaw_rot[2], pitch_yaw_rot[1], pitch_yaw_rot[0]).normalize();
|
||||
}
|
||||
|
||||
// Play sound effects
|
||||
if let Ok(sink) = thruster_sound_controller.get_single() {
|
||||
if play_thruster_sound && engine.engine_type == actor::EngineType::Monopropellant {
|
||||
sink.play()
|
||||
|
|
|
@ -28,6 +28,12 @@ pub struct Settings {
|
|||
pub key_vehicle: KeyCode,
|
||||
pub key_camera: KeyCode,
|
||||
pub key_rotate: KeyCode,
|
||||
pub key_mouseup: KeyCode,
|
||||
pub key_mousedown: KeyCode,
|
||||
pub key_mouseleft: KeyCode,
|
||||
pub key_mouseright: KeyCode,
|
||||
pub key_rotateleft: KeyCode,
|
||||
pub key_rotateright: KeyCode,
|
||||
pub key_reply1: KeyCode,
|
||||
pub key_reply2: KeyCode,
|
||||
pub key_reply3: KeyCode,
|
||||
|
@ -78,6 +84,12 @@ impl Default for Settings {
|
|||
key_vehicle: KeyCode::KeyQ,
|
||||
key_camera: KeyCode::KeyF,
|
||||
key_rotate: KeyCode::KeyR,
|
||||
key_mouseup: KeyCode::KeyI,
|
||||
key_mousedown: KeyCode::KeyK,
|
||||
key_mouseleft: KeyCode::KeyJ,
|
||||
key_mouseright: KeyCode::KeyL,
|
||||
key_rotateleft: KeyCode::KeyU,
|
||||
key_rotateright: KeyCode::KeyO,
|
||||
key_reply1: KeyCode::Digit1,
|
||||
key_reply2: KeyCode::Digit2,
|
||||
key_reply3: KeyCode::Digit3,
|
||||
|
|
Loading…
Reference in a new issue