Add mouse/controller sensitivity
This commit is contained in:
parent
2eae18faa4
commit
5083e8a738
@ -26,6 +26,8 @@ pub struct GameSettings {
|
||||
pub window_mode: WindowModeSetting,
|
||||
pub render_scale: f32,
|
||||
pub recent_servers: Vec<RecentServer>,
|
||||
pub mouse_sensitivity: f32,
|
||||
pub controller_sensitivity: f32,
|
||||
pub volume: VolumeSettings,
|
||||
pub keybinds: KeybindSettings,
|
||||
}
|
||||
@ -150,6 +152,8 @@ impl Default for GameSettings {
|
||||
render_scale: 1.,
|
||||
window_mode: WindowModeSetting::Maximized,
|
||||
recent_servers: Vec::new(),
|
||||
mouse_sensitivity: 1.5,
|
||||
controller_sensitivity: 1.5,
|
||||
volume: VolumeSettings {
|
||||
master_volume: 100.,
|
||||
sfx_volume: 100.,
|
||||
|
||||
@ -40,7 +40,9 @@ use crate::{
|
||||
#[class(base=CharacterBody3D, init)]
|
||||
pub struct LocalPlayer {
|
||||
#[export]
|
||||
look_sensitivity: f32,
|
||||
mouse_sensitivity: f32,
|
||||
#[export]
|
||||
controller_sensitivity: f32,
|
||||
#[export]
|
||||
camera: Option<Gd<Camera3D>>,
|
||||
#[export]
|
||||
@ -776,7 +778,7 @@ impl ICharacterBody3D for LocalPlayer {
|
||||
}
|
||||
|
||||
if let Ok(event) = event.try_cast::<InputEventMouseMotion>() {
|
||||
self.move_look(event.get_relative())
|
||||
self.move_look(event.get_relative(), self.mouse_sensitivity)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -788,7 +790,7 @@ impl ICharacterBody3D for LocalPlayer {
|
||||
input.get_action_strength("look_down") - input.get_action_strength("look_up"),
|
||||
) * 5.;
|
||||
if !joypad_look_dir.is_zero_approx() {
|
||||
self.move_look(joypad_look_dir);
|
||||
self.move_look(joypad_look_dir, self.controller_sensitivity);
|
||||
}
|
||||
|
||||
let rot = self.y_rot;
|
||||
@ -873,6 +875,8 @@ impl LocalPlayer {
|
||||
if let Some(camera) = &mut self.camera {
|
||||
camera.set_fov(settings.fov as f32);
|
||||
}
|
||||
self.mouse_sensitivity = settings.mouse_sensitivity;
|
||||
self.controller_sensitivity = settings.controller_sensitivity;
|
||||
}
|
||||
|
||||
pub fn play_local_hit_sound(&mut self) {
|
||||
@ -919,19 +923,18 @@ impl LocalPlayer {
|
||||
}
|
||||
}
|
||||
|
||||
fn move_look(&mut self, direction: Vector2) {
|
||||
fn move_look(&mut self, direction: Vector2, sensitivity: f32) {
|
||||
if !self.is_dead() {
|
||||
let dir = direction * 0.001 * self.look_sensitivity;
|
||||
let dir = direction * 0.001 * sensitivity;
|
||||
|
||||
if let Some(camera) = self.camera.as_mut() {
|
||||
let curr_rotation = camera.get_rotation();
|
||||
let x_rot =
|
||||
(curr_rotation.x - dir.y * self.look_sensitivity).clamp(-PI / 2., PI / 2.);
|
||||
let x_rot = (curr_rotation.x - dir.y * sensitivity).clamp(-PI / 2., PI / 2.);
|
||||
camera.set_rotation(Vector3::RIGHT * x_rot);
|
||||
self.look_up = x_rot;
|
||||
}
|
||||
|
||||
let y_rot = -dir.x * self.look_sensitivity;
|
||||
let y_rot = -dir.x * sensitivity;
|
||||
self.y_rot = self.base().get_global_rotation().y + y_rot;
|
||||
}
|
||||
}
|
||||
|
||||
@ -23,6 +23,8 @@ pub enum Setting {
|
||||
ReplayFPS,
|
||||
WindowMode,
|
||||
RenderScale,
|
||||
MouseSensitivity,
|
||||
ControllerSensitivity,
|
||||
|
||||
// Volume settings
|
||||
MasterVolume,
|
||||
@ -57,6 +59,8 @@ impl ToString for Setting {
|
||||
Setting::ReplayFPS => "Replay FPS",
|
||||
Setting::WindowMode => "Window Mode",
|
||||
Setting::RenderScale => "Render Scale",
|
||||
Setting::MouseSensitivity => "Mouse Sensitivity",
|
||||
Setting::ControllerSensitivity => "Controller Sensitivity",
|
||||
|
||||
Setting::MasterVolume => "Master volume",
|
||||
Setting::SfxVolume => "Sfx Volume",
|
||||
@ -86,6 +90,8 @@ impl Setting {
|
||||
Setting::ReplayFPS => SettingsTab::General,
|
||||
Setting::WindowMode => SettingsTab::General,
|
||||
Setting::RenderScale => SettingsTab::General,
|
||||
Setting::MouseSensitivity => SettingsTab::General,
|
||||
Setting::ControllerSensitivity => SettingsTab::General,
|
||||
|
||||
Setting::MasterVolume => SettingsTab::Volume,
|
||||
Setting::SfxVolume => SettingsTab::Volume,
|
||||
@ -383,6 +389,12 @@ impl SettingsPanel {
|
||||
(Setting::RenderScale, SettingValue::SliderNumber(value)) => {
|
||||
new_settings.render_scale = value.value as f32;
|
||||
}
|
||||
(Setting::MouseSensitivity, SettingValue::SliderNumber(value)) => {
|
||||
new_settings.mouse_sensitivity = value.value as f32;
|
||||
}
|
||||
(Setting::ControllerSensitivity, SettingValue::SliderNumber(value)) => {
|
||||
new_settings.controller_sensitivity = value.value as f32;
|
||||
}
|
||||
|
||||
(Setting::MasterVolume, SettingValue::SliderNumber(value)) => {
|
||||
new_settings.volume.master_volume = value.value;
|
||||
@ -509,6 +521,24 @@ fn settings_from(map: &mut HashMap<Setting, SettingValue>, settings: &GameSettin
|
||||
value: settings.render_scale as f64,
|
||||
}),
|
||||
);
|
||||
map.insert(
|
||||
Setting::MouseSensitivity,
|
||||
SettingValue::SliderNumber(SliderValue {
|
||||
min: 0.25,
|
||||
max: 3.,
|
||||
step: 0.05,
|
||||
value: settings.mouse_sensitivity as f64,
|
||||
}),
|
||||
);
|
||||
map.insert(
|
||||
Setting::ControllerSensitivity,
|
||||
SettingValue::SliderNumber(SliderValue {
|
||||
min: 0.25,
|
||||
max: 3.,
|
||||
step: 0.05,
|
||||
value: settings.controller_sensitivity as f64,
|
||||
}),
|
||||
);
|
||||
map.insert(
|
||||
Setting::MasterVolume,
|
||||
SettingValue::SliderNumber(SliderValue {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user