Feat/5 adding settings fundamentals and ui improvements #9
@@ -28,7 +28,8 @@ func _ready() -> void:
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
var sens = SettingsManager.mouse_sensitivity
|
||||
var is_ads = camera and camera.fov < params.base_fov - 5.0
|
||||
var sens = SettingsManager.ads_sensitivity if is_ads else SettingsManager.mouse_sensitivity
|
||||
# Yaw: rotate the player (parent)
|
||||
get_parent().rotate_y(-event.relative.x * sens)
|
||||
# Pitch: rotate this pivot
|
||||
|
||||
@@ -25,6 +25,7 @@ var default_bindings = {
|
||||
var current_bindings = {}
|
||||
var show_debug_ui: bool = false
|
||||
var mouse_sensitivity: float = 0.002
|
||||
var ads_sensitivity: float = 0.001
|
||||
|
||||
# Video Settings
|
||||
var display_mode: int = DisplayServer.WINDOW_MODE_WINDOWED
|
||||
@@ -129,6 +130,7 @@ func _save_settings() -> void:
|
||||
"bindings": current_bindings,
|
||||
"show_debug_ui": show_debug_ui,
|
||||
"mouse_sensitivity": mouse_sensitivity,
|
||||
"ads_sensitivity": ads_sensitivity,
|
||||
"display_mode": display_mode,
|
||||
"resolution_index": resolution_index,
|
||||
"fps_cap": fps_cap,
|
||||
@@ -165,6 +167,8 @@ func _load_settings() -> void:
|
||||
show_debug_ui = data["show_debug_ui"]
|
||||
if data.has("mouse_sensitivity"):
|
||||
mouse_sensitivity = data["mouse_sensitivity"]
|
||||
if data.has("ads_sensitivity"):
|
||||
ads_sensitivity = data["ads_sensitivity"]
|
||||
if data.has("display_mode"): display_mode = data["display_mode"]
|
||||
if data.has("resolution_index"): resolution_index = data["resolution_index"]
|
||||
if data.has("fps_cap"): fps_cap = data["fps_cap"]
|
||||
|
||||
@@ -26,6 +26,8 @@ var settings_back_btn: Button
|
||||
var _debug_ui_checkbox: CheckButton
|
||||
var _mouse_sens_slider: HSlider
|
||||
var _mouse_sens_input: LineEdit
|
||||
var _ads_sens_slider: HSlider
|
||||
var _ads_sens_input: LineEdit
|
||||
var _display_mode_opt: OptionButton
|
||||
var _resolution_opt: OptionButton
|
||||
var _fps_slider: HSlider
|
||||
@@ -423,6 +425,43 @@ func _build_ui() -> void:
|
||||
SettingsManager._save_settings()
|
||||
)
|
||||
|
||||
var ads_sens_hbox = HBoxContainer.new()
|
||||
mouse_tab.add_child(ads_sens_hbox)
|
||||
|
||||
var ads_sens_title = Label.new()
|
||||
ads_sens_title.text = "ADS Sensitivity"
|
||||
ads_sens_title.custom_minimum_size = Vector2(150, 0)
|
||||
ads_sens_hbox.add_child(ads_sens_title)
|
||||
|
||||
_ads_sens_slider = HSlider.new()
|
||||
_ads_sens_slider.min_value = 1.0
|
||||
_ads_sens_slider.max_value = 100.0
|
||||
_ads_sens_slider.step = 1.0
|
||||
_ads_sens_slider.value = SettingsManager.ads_sensitivity * 10000.0
|
||||
_ads_sens_slider.custom_minimum_size = Vector2(200, 0)
|
||||
_ads_sens_slider.size_flags_vertical = Control.SIZE_SHRINK_CENTER
|
||||
ads_sens_hbox.add_child(_ads_sens_slider)
|
||||
|
||||
_ads_sens_input = LineEdit.new()
|
||||
_ads_sens_input.text = str(round(SettingsManager.ads_sensitivity * 10000.0))
|
||||
_ads_sens_input.custom_minimum_size = Vector2(60, 0)
|
||||
ads_sens_hbox.add_child(_ads_sens_input)
|
||||
|
||||
_ads_sens_slider.value_changed.connect(func(value: float):
|
||||
_ads_sens_input.text = str(round(value))
|
||||
SettingsManager.ads_sensitivity = value / 10000.0
|
||||
SettingsManager._save_settings()
|
||||
)
|
||||
|
||||
_ads_sens_input.text_submitted.connect(func(new_text: String):
|
||||
var val = new_text.to_float()
|
||||
val = clampf(val, 1.0, 100.0)
|
||||
_ads_sens_slider.value = val
|
||||
_ads_sens_input.text = str(round(val))
|
||||
SettingsManager.ads_sensitivity = val / 10000.0
|
||||
SettingsManager._save_settings()
|
||||
)
|
||||
|
||||
var spacer_mouse = Control.new()
|
||||
spacer_mouse.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
mouse_tab.add_child(spacer_mouse)
|
||||
@@ -431,7 +470,9 @@ func _build_ui() -> void:
|
||||
reset_mouse_btn.text = "Reset to Defaults"
|
||||
reset_mouse_btn.pressed.connect(func():
|
||||
_mouse_sens_slider.value = 20.0
|
||||
_ads_sens_slider.value = 10.0
|
||||
SettingsManager.mouse_sensitivity = 0.002
|
||||
SettingsManager.ads_sensitivity = 0.001
|
||||
SettingsManager._save_settings()
|
||||
)
|
||||
mouse_tab.add_child(reset_mouse_btn)
|
||||
@@ -629,6 +670,12 @@ func _show_settings() -> void:
|
||||
if _mouse_sens_slider:
|
||||
var display_val = round(SettingsManager.mouse_sensitivity * 10000.0)
|
||||
_mouse_sens_slider.value = display_val
|
||||
_mouse_sens_input.text = str(display_val)
|
||||
|
||||
var ads_display_val = round(SettingsManager.ads_sensitivity * 10000.0)
|
||||
_ads_sens_slider.value = ads_display_val
|
||||
_ads_sens_input.text = str(ads_display_val)
|
||||
_mouse_sens_slider.value = display_val
|
||||
if _mouse_sens_input:
|
||||
_mouse_sens_input.text = str(display_val)
|
||||
|
||||
|
||||
+10
-4
@@ -76,16 +76,22 @@ func _process(delta: float) -> void:
|
||||
super._process(delta)
|
||||
|
||||
if camera:
|
||||
if Input.is_action_just_pressed("fire_alt"):
|
||||
is_ads = not is_ads
|
||||
target_fov = ads_fov if is_ads else default_fov
|
||||
|
||||
camera.fov = lerpf(camera.fov, target_fov, 15.0 * delta)
|
||||
|
||||
# Move model slightly based on ADS
|
||||
var target_pos = Vector3(0.0, -0.15, -0.6) if is_ads else Vector3(0.3, -0.3, -0.8)
|
||||
position = position.lerp(target_pos, 15.0 * delta)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
super._input(event)
|
||||
|
||||
if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
|
||||
return
|
||||
|
||||
if event.is_action_pressed("fire_alt"):
|
||||
is_ads = not is_ads
|
||||
target_fov = ads_fov if is_ads else default_fov
|
||||
|
||||
func _start_reload() -> void:
|
||||
super._start_reload()
|
||||
is_ads = false # Drop out of ADS on reload
|
||||
|
||||
@@ -64,6 +64,9 @@ func _build_model() -> void:
|
||||
func _process(delta: float) -> void:
|
||||
super._process(delta)
|
||||
|
||||
if not visible:
|
||||
return
|
||||
|
||||
if camera:
|
||||
is_targeting = Input.is_action_pressed("fire_alt")
|
||||
targeting_laser.visible = is_targeting
|
||||
|
||||
Reference in New Issue
Block a user