diff --git a/addons/save_load_system/autoloads/save_game_manager.gd b/addons/save_load_system/autoloads/save_game_manager.gd index d7ecbc7..ca927d9 100644 --- a/addons/save_load_system/autoloads/save_game_manager.gd +++ b/addons/save_load_system/autoloads/save_game_manager.gd @@ -15,6 +15,8 @@ signal create_autosave signal create_save(save_name: String) signal delete_save(filename: String) signal delete_error(error_message: String) +signal disable_autosaves +signal enable_autosaves signal load_complete signal load_error(error_message: String) signal load_save(filename: String) ## Loads the save into memory. Does NOT apply the load as this allows for other actions (such as resetting the levle/world).[br]Don't forget to run `apply_save` after loading @@ -28,6 +30,7 @@ signal quick_load signal toggle_save_icon_generation(toggled: bool) ## Enable/Disable the generation of a screenshot during save for the save icon. +var _autosaves_enabled: bool = true var _autosave_timer: Timer = Timer.new() var _enable_save_icon_generation: bool = true var _loaded_save_resource: SaveGameDataResource = SaveGameDataResource.new() @@ -39,6 +42,8 @@ func _ready() -> void: apply_save.connect(_on_apply_save) create_save.connect(_on_save_game_as_resource) delete_save.connect(_on_delete_save) + disable_autosaves.connect(_on_disable_autosaves) + enable_autosaves.connect(_on_enable_autosaves) load_save.connect(_on_load_game_save) quick_load.connect(_on_quick_load) quick_save.connect(_on_quick_save) @@ -250,6 +255,7 @@ func _on_apply_save() -> void: apply_complete.emit() func _on_autosave_timer_timeout() -> void: + if not _autosaves_enabled: return _create_autosave() ## Delete both the save file and the related screenshot @@ -262,6 +268,13 @@ func _on_delete_save(filename: String) -> void: DirAccess.remove_absolute(save_file_path) DirAccess.remove_absolute(save_file_path.replace(".tres", ".png")) # Delete icon +func _on_disable_autosaves() -> void: + _autosaves_enabled = false + stop_autosave.emit() + +func _on_enable_autosaves() -> void: + _autosaves_enabled = true + func _on_load_game_save(resource_filename: String) -> void: _load_game_resource(resource_filename) @@ -286,6 +299,8 @@ func _on_save_game_as_resource(save_name: String) -> void: save_complete.emit() func _on_start_autosave() -> void: + if not _autosaves_enabled: return + if _save_game_settings == null: _load_save_settings() _autosave_timer.start(_save_game_settings.autosave_duration) diff --git a/autoloads/game_settings_manager.gd b/autoloads/game_settings_manager.gd index cdf377f..01e294b 100644 --- a/autoloads/game_settings_manager.gd +++ b/autoloads/game_settings_manager.gd @@ -2,6 +2,7 @@ extends Node #region Game Options Signals +signal game_options_autosaves_changed(autosaves_enabled: bool) signal game_options_block_highlight_changed(block_highlight_enabled: bool) signal game_options_held_block_ui_changed(held_block_enabled: bool) signal game_options_quickslots_ui_changed(quickslots_enabled: bool) @@ -34,6 +35,7 @@ var settings: GameSettingsResource = GameSettingsResource.new() func _init() -> void: + game_options_autosaves_changed.connect(_on_game_options_autosaves_changed) game_options_block_highlight_changed.connect(_on_game_options_block_highlight_changed) game_options_held_block_ui_changed.connect(_on_game_options_held_block_ui_changed) game_options_quickslots_ui_changed.connect(_on_game_options_quickslots_ui_changed) @@ -51,6 +53,10 @@ func _init() -> void: #region Game Option Settings +func _on_game_options_autosaves_changed(autosaves_enabled: bool) -> void: + settings.game_options.enable_autosaves = autosaves_enabled + save_settings() + func _on_game_options_block_highlight_changed(highlight_enabled: bool) -> void: settings.game_options.enable_block_highlight = highlight_enabled save_settings() diff --git a/resources/game_settings/game_options_settings_resource.gd b/resources/game_settings/game_options_settings_resource.gd index 7c9a5c6..ea9f323 100644 --- a/resources/game_settings/game_options_settings_resource.gd +++ b/resources/game_settings/game_options_settings_resource.gd @@ -7,3 +7,4 @@ extends Resource @export var enable_quickslots_ui: bool = true @export var enable_held_block: bool = true @export var enable_save_screenshots: bool = true ## Take a screenshot during save to use as the save icon +@export var enable_autosaves: bool = true diff --git a/scenes/ui/menus/settings_menu.gd b/scenes/ui/menus/settings_menu.gd index f1369ec..0d5588e 100644 --- a/scenes/ui/menus/settings_menu.gd +++ b/scenes/ui/menus/settings_menu.gd @@ -3,6 +3,7 @@ extends Panel @export_group("Game Option Nodes") +@export var autosaves_input: CheckButton @export var block_highlight_input: CheckButton @export var held_block_ui_input: CheckButton @export var quick_slots_ui_input: CheckButton @@ -24,6 +25,7 @@ func _ready() -> void: ## Sets the default values of all the inputs func apply_default_values() -> void: #region Game Options + autosaves_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_autosaves) block_highlight_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_block_highlight) held_block_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_held_block) quick_slots_ui_input.set_pressed_no_signal(GameSettingsManager.settings.game_options.enable_quickslots_ui) @@ -58,6 +60,12 @@ func _on_enable_waila_toggled(toggled_on: bool) -> void: func _on_screenshot_icon_button_toggled(toggled_on: bool) -> void: GameSettingsManager.game_options_screenshot_saves_changed.emit(toggled_on) SaveGameManager.toggle_save_icon_generation.emit(toggled_on) + +func _on_autosaves_button_toggled(toggled_on: bool) -> void: + if toggled_on: + SaveGameManager.enable_autosaves.emit() + else: + SaveGameManager.disable_autosaves.emit() #endregion #region Graphics Settings diff --git a/scenes/ui/menus/settings_menu.tscn b/scenes/ui/menus/settings_menu.tscn index 6db6aa4..746ed71 100644 --- a/scenes/ui/menus/settings_menu.tscn +++ b/scenes/ui/menus/settings_menu.tscn @@ -14,7 +14,7 @@ corner_radius_top_right = 2 corner_radius_bottom_right = 2 corner_radius_bottom_left = 2 -[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")] +[node name="SettingsMenu" type="Panel" node_paths=PackedStringArray("autosaves_input", "block_highlight_input", "held_block_ui_input", "quick_slots_ui_input", "screenshot_icon_input", "waila_input", "resolution_input", "fullscreen_input", "vsync_input", "fov_slider", "fov_value_label")] process_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -22,6 +22,7 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_qwcqe") +autosaves_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/Autosaves/CheckButton") block_highlight_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/BlockHighlight/CheckButton") held_block_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton") quick_slots_ui_input = NodePath("Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/CheckButton") @@ -142,6 +143,21 @@ layout_mode = 2 tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." button_pressed = true +[node name="Autosaves" type="HBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Autosaves"] +layout_mode = 2 +size_flags_horizontal = 3 +tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." +mouse_filter = 1 +text = "Enable Autosaves" + +[node name="CheckButton" type="CheckButton" parent="Background/MarginContainer/VBoxContainer/TabContainer/Game/Autosaves"] +layout_mode = 2 +tooltip_text = "Enable/Disable the taking of a screenshot to utilize as the save icon." +button_pressed = true + [node name="Graphics" type="VBoxContainer" parent="Background/MarginContainer/VBoxContainer/TabContainer"] visible = false layout_mode = 2 @@ -261,6 +277,7 @@ text = "Close Settings" [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/QuickslotsUI/CheckButton" to="." method="_on_quickslots_ui_toggled"] [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/HeldBlockUI/CheckButton" to="." method="_on_held_block_ui_toggled"] [connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/ScreenshotIcon/CheckButton" to="." method="_on_screenshot_icon_button_toggled"] +[connection signal="toggled" from="Background/MarginContainer/VBoxContainer/TabContainer/Game/Autosaves/CheckButton" to="." method="_on_autosaves_button_toggled"] [connection signal="value_changed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/FOV/HSlider" to="." method="_on_fov_slider_changed"] [connection signal="pressed" from="Background/MarginContainer/VBoxContainer/TabContainer/Graphics/CenterContainer/ApplyButton" to="." method="_on_graphics_apply_button_pressed"] [connection signal="pressed" from="Background/BottomRow/CloseButton" to="." method="_on_close_button_pressed"]