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 window_mode: WindowModeSetting,
|
||||||
pub render_scale: f32,
|
pub render_scale: f32,
|
||||||
pub recent_servers: Vec<RecentServer>,
|
pub recent_servers: Vec<RecentServer>,
|
||||||
|
pub mouse_sensitivity: f32,
|
||||||
|
pub controller_sensitivity: f32,
|
||||||
pub volume: VolumeSettings,
|
pub volume: VolumeSettings,
|
||||||
pub keybinds: KeybindSettings,
|
pub keybinds: KeybindSettings,
|
||||||
}
|
}
|
||||||
@ -150,6 +152,8 @@ impl Default for GameSettings {
|
|||||||
render_scale: 1.,
|
render_scale: 1.,
|
||||||
window_mode: WindowModeSetting::Maximized,
|
window_mode: WindowModeSetting::Maximized,
|
||||||
recent_servers: Vec::new(),
|
recent_servers: Vec::new(),
|
||||||
|
mouse_sensitivity: 1.5,
|
||||||
|
controller_sensitivity: 1.5,
|
||||||
volume: VolumeSettings {
|
volume: VolumeSettings {
|
||||||
master_volume: 100.,
|
master_volume: 100.,
|
||||||
sfx_volume: 100.,
|
sfx_volume: 100.,
|
||||||
|
|||||||
@ -40,7 +40,9 @@ use crate::{
|
|||||||
#[class(base=CharacterBody3D, init)]
|
#[class(base=CharacterBody3D, init)]
|
||||||
pub struct LocalPlayer {
|
pub struct LocalPlayer {
|
||||||
#[export]
|
#[export]
|
||||||
look_sensitivity: f32,
|
mouse_sensitivity: f32,
|
||||||
|
#[export]
|
||||||
|
controller_sensitivity: f32,
|
||||||
#[export]
|
#[export]
|
||||||
camera: Option<Gd<Camera3D>>,
|
camera: Option<Gd<Camera3D>>,
|
||||||
#[export]
|
#[export]
|
||||||
@ -776,7 +778,7 @@ impl ICharacterBody3D for LocalPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Ok(event) = event.try_cast::<InputEventMouseMotion>() {
|
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"),
|
input.get_action_strength("look_down") - input.get_action_strength("look_up"),
|
||||||
) * 5.;
|
) * 5.;
|
||||||
if !joypad_look_dir.is_zero_approx() {
|
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;
|
let rot = self.y_rot;
|
||||||
@ -873,6 +875,8 @@ impl LocalPlayer {
|
|||||||
if let Some(camera) = &mut self.camera {
|
if let Some(camera) = &mut self.camera {
|
||||||
camera.set_fov(settings.fov as f32);
|
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) {
|
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() {
|
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() {
|
if let Some(camera) = self.camera.as_mut() {
|
||||||
let curr_rotation = camera.get_rotation();
|
let curr_rotation = camera.get_rotation();
|
||||||
let x_rot =
|
let x_rot = (curr_rotation.x - dir.y * sensitivity).clamp(-PI / 2., PI / 2.);
|
||||||
(curr_rotation.x - dir.y * self.look_sensitivity).clamp(-PI / 2., PI / 2.);
|
|
||||||
camera.set_rotation(Vector3::RIGHT * x_rot);
|
camera.set_rotation(Vector3::RIGHT * x_rot);
|
||||||
self.look_up = 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;
|
self.y_rot = self.base().get_global_rotation().y + y_rot;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,6 +23,8 @@ pub enum Setting {
|
|||||||
ReplayFPS,
|
ReplayFPS,
|
||||||
WindowMode,
|
WindowMode,
|
||||||
RenderScale,
|
RenderScale,
|
||||||
|
MouseSensitivity,
|
||||||
|
ControllerSensitivity,
|
||||||
|
|
||||||
// Volume settings
|
// Volume settings
|
||||||
MasterVolume,
|
MasterVolume,
|
||||||
@ -57,6 +59,8 @@ impl ToString for Setting {
|
|||||||
Setting::ReplayFPS => "Replay FPS",
|
Setting::ReplayFPS => "Replay FPS",
|
||||||
Setting::WindowMode => "Window Mode",
|
Setting::WindowMode => "Window Mode",
|
||||||
Setting::RenderScale => "Render Scale",
|
Setting::RenderScale => "Render Scale",
|
||||||
|
Setting::MouseSensitivity => "Mouse Sensitivity",
|
||||||
|
Setting::ControllerSensitivity => "Controller Sensitivity",
|
||||||
|
|
||||||
Setting::MasterVolume => "Master volume",
|
Setting::MasterVolume => "Master volume",
|
||||||
Setting::SfxVolume => "Sfx Volume",
|
Setting::SfxVolume => "Sfx Volume",
|
||||||
@ -86,6 +90,8 @@ impl Setting {
|
|||||||
Setting::ReplayFPS => SettingsTab::General,
|
Setting::ReplayFPS => SettingsTab::General,
|
||||||
Setting::WindowMode => SettingsTab::General,
|
Setting::WindowMode => SettingsTab::General,
|
||||||
Setting::RenderScale => SettingsTab::General,
|
Setting::RenderScale => SettingsTab::General,
|
||||||
|
Setting::MouseSensitivity => SettingsTab::General,
|
||||||
|
Setting::ControllerSensitivity => SettingsTab::General,
|
||||||
|
|
||||||
Setting::MasterVolume => SettingsTab::Volume,
|
Setting::MasterVolume => SettingsTab::Volume,
|
||||||
Setting::SfxVolume => SettingsTab::Volume,
|
Setting::SfxVolume => SettingsTab::Volume,
|
||||||
@ -383,6 +389,12 @@ impl SettingsPanel {
|
|||||||
(Setting::RenderScale, SettingValue::SliderNumber(value)) => {
|
(Setting::RenderScale, SettingValue::SliderNumber(value)) => {
|
||||||
new_settings.render_scale = value.value as f32;
|
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)) => {
|
(Setting::MasterVolume, SettingValue::SliderNumber(value)) => {
|
||||||
new_settings.volume.master_volume = value.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,
|
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(
|
map.insert(
|
||||||
Setting::MasterVolume,
|
Setting::MasterVolume,
|
||||||
SettingValue::SliderNumber(SliderValue {
|
SettingValue::SliderNumber(SliderValue {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user