Add saves, settings, and multiplayer-safe menus
This commit is contained in:
parent
e2067e3bf4
commit
0d050b08cc
32 changed files with 2468 additions and 49 deletions
139
main/main.gd
139
main/main.gd
|
|
@ -9,6 +9,15 @@ const TestWorldType = preload("res://world/test_world.gd")
|
|||
const WaterRecoveryControllerType = preload(
|
||||
"res://world/water_recovery_controller.gd"
|
||||
)
|
||||
const PlayerSaveManagerType = preload(
|
||||
"res://save/player_save_manager.gd"
|
||||
)
|
||||
const PlayerSettingsManagerType = preload(
|
||||
"res://settings/player_settings_manager.gd"
|
||||
)
|
||||
const PlayerSettingsType = preload("res://settings/player_settings.gd")
|
||||
const TitleScreenType = preload("res://ui/title_screen.gd")
|
||||
const PauseMenuType = preload("res://ui/pause_menu.gd")
|
||||
|
||||
@export var fish_catalog: FishPoolType
|
||||
@export var pelican_buyer_profile: FishBuyerProfileType
|
||||
|
|
@ -18,6 +27,10 @@ const WaterRecoveryControllerType = preload(
|
|||
@onready var _fishing_spot: FishingSpotType = %FishingSpot
|
||||
@onready var _game_ui: GameUIType = %GameUI
|
||||
@onready var _water_recovery: WaterRecoveryControllerType = %WaterRecovery
|
||||
@onready var _save_manager: PlayerSaveManagerType = %PlayerSaveManager
|
||||
@onready var _settings_manager: PlayerSettingsManagerType = %PlayerSettingsManager
|
||||
|
||||
var _gameplay_started: bool = false
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
|
|
@ -25,6 +38,13 @@ func _ready() -> void:
|
|||
_player.inventory,
|
||||
_player.wallet
|
||||
)
|
||||
_save_manager.setup(
|
||||
_player.inventory,
|
||||
_player.collection_log,
|
||||
_player.wallet,
|
||||
fish_catalog
|
||||
)
|
||||
_save_manager.set_autosave_enabled(false)
|
||||
_fishing_spot.setup(
|
||||
_player,
|
||||
_player.inventory,
|
||||
|
|
@ -48,3 +68,122 @@ func _ready() -> void:
|
|||
_test_world.get_player_water_trigger(),
|
||||
_test_world.get_safe_respawn_points()
|
||||
)
|
||||
if not _settings_manager.settings_changed.is_connected(
|
||||
_apply_runtime_settings
|
||||
):
|
||||
_settings_manager.settings_changed.connect(_apply_runtime_settings)
|
||||
_settings_manager.load_settings()
|
||||
_apply_runtime_settings(_settings_manager.current_settings)
|
||||
_set_gameplay_active(false)
|
||||
var title_screen: TitleScreenType = _game_ui.get_title_screen()
|
||||
title_screen.gameplay_requested.connect(_on_gameplay_requested)
|
||||
title_screen.quit_requested.connect(_on_quit_requested)
|
||||
title_screen.setup(_save_manager, _settings_manager)
|
||||
var pause_menu: PauseMenuType = _game_ui.get_pause_menu()
|
||||
pause_menu.setup(
|
||||
_player,
|
||||
_save_manager,
|
||||
_settings_manager,
|
||||
_fishing_spot
|
||||
)
|
||||
pause_menu.return_to_title_requested.connect(
|
||||
_on_return_to_title_requested
|
||||
)
|
||||
pause_menu.reset_progress_requested.connect(
|
||||
_on_reset_progress_requested
|
||||
)
|
||||
pause_menu.quit_requested.connect(_on_quit_requested)
|
||||
_water_recovery.recovery_starting.connect(
|
||||
_on_water_recovery_starting
|
||||
)
|
||||
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if (
|
||||
not event.is_action_pressed("ui_cancel")
|
||||
or (event is InputEventKey and event.echo)
|
||||
):
|
||||
return
|
||||
var title_screen: TitleScreenType = _game_ui.get_title_screen()
|
||||
if title_screen.visible or not _gameplay_started:
|
||||
return
|
||||
var pause_menu: PauseMenuType = _game_ui.get_pause_menu()
|
||||
if pause_menu.handle_escape():
|
||||
get_viewport().set_input_as_handled()
|
||||
return
|
||||
if _game_ui.consume_player_menu_escape():
|
||||
get_viewport().set_input_as_handled()
|
||||
return
|
||||
if _fishing_spot.handle_escape_action():
|
||||
get_viewport().set_input_as_handled()
|
||||
return
|
||||
if (
|
||||
not _water_recovery.is_recovery_active()
|
||||
and _fishing_spot.can_open_system_menu()
|
||||
):
|
||||
_game_ui.close_player_menu_for_game_menu()
|
||||
pause_menu.open_menu()
|
||||
get_viewport().set_input_as_handled()
|
||||
|
||||
|
||||
func _apply_runtime_settings(settings: PlayerSettingsType) -> void:
|
||||
if settings == null:
|
||||
return
|
||||
_player.apply_camera_settings(
|
||||
settings.mouse_camera_sensitivity,
|
||||
settings.controller_camera_sensitivity,
|
||||
settings.invert_camera_y
|
||||
)
|
||||
_fishing_spot.configure_accessibility_auto_click(
|
||||
settings.auto_click_enabled,
|
||||
settings.auto_click_interval
|
||||
)
|
||||
|
||||
|
||||
func _set_gameplay_active(active: bool) -> void:
|
||||
_gameplay_started = active
|
||||
_player.set_movement_enabled(active)
|
||||
_player.set_camera_input_enabled(active)
|
||||
_fishing_spot.set_gameplay_input_enabled(active)
|
||||
_water_recovery.set_recovery_enabled(active)
|
||||
_game_ui.set_gameplay_ui_enabled(active)
|
||||
_save_manager.set_autosave_enabled(active)
|
||||
|
||||
|
||||
func _on_gameplay_requested() -> void:
|
||||
if _gameplay_started:
|
||||
return
|
||||
_game_ui.get_title_screen().hide()
|
||||
_set_gameplay_active(true)
|
||||
|
||||
|
||||
func _on_return_to_title_requested() -> void:
|
||||
var pause_menu: PauseMenuType = _game_ui.get_pause_menu()
|
||||
pause_menu.close_for_title_transition()
|
||||
_set_gameplay_active(false)
|
||||
_game_ui.get_title_screen().reopen()
|
||||
|
||||
|
||||
func _on_reset_progress_requested() -> void:
|
||||
var pause_menu: PauseMenuType = _game_ui.get_pause_menu()
|
||||
if not _save_manager.delete_progression_save():
|
||||
pause_menu.report_reset_failure()
|
||||
return
|
||||
if not _save_manager.initialize_new_game():
|
||||
pause_menu.report_reset_failure()
|
||||
return
|
||||
pause_menu.close_for_title_transition()
|
||||
_set_gameplay_active(false)
|
||||
_game_ui.get_title_screen().reopen()
|
||||
|
||||
|
||||
func _on_water_recovery_starting() -> void:
|
||||
_game_ui.close_player_menu_for_water_recovery()
|
||||
_game_ui.get_pause_menu().close_for_water_recovery()
|
||||
|
||||
|
||||
func _on_quit_requested() -> void:
|
||||
_settings_manager.save_if_dirty()
|
||||
if _gameplay_started:
|
||||
_save_manager.save_if_dirty()
|
||||
get_tree().quit()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=9 format=3]
|
||||
[gd_scene load_steps=11 format=3]
|
||||
|
||||
[ext_resource type="PackedScene" path="res://world/test_world.tscn" id="1_world"]
|
||||
[ext_resource type="PackedScene" path="res://player/player.tscn" id="2_player"]
|
||||
|
|
@ -8,6 +8,8 @@
|
|||
[ext_resource type="Resource" path="res://fish/pools/test_water_pool.tres" id="6_pool"]
|
||||
[ext_resource type="Resource" path="res://economy/buyers/pelicans.tres" id="7_pelicans"]
|
||||
[ext_resource type="Script" path="res://world/water_recovery_controller.gd" id="8_recovery"]
|
||||
[ext_resource type="Script" path="res://save/player_save_manager.gd" id="9_save"]
|
||||
[ext_resource type="Script" path="res://settings/player_settings_manager.gd" id="10_settings"]
|
||||
|
||||
[node name="Main" type="Node3D"]
|
||||
script = ExtResource("3_main")
|
||||
|
|
@ -30,5 +32,13 @@ position = Vector3(0, 1.02, -18)
|
|||
unique_name_in_owner = true
|
||||
script = ExtResource("8_recovery")
|
||||
|
||||
[node name="PlayerSaveManager" type="Node" parent="."]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("9_save")
|
||||
|
||||
[node name="PlayerSettingsManager" type="Node" parent="."]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("10_settings")
|
||||
|
||||
[node name="GameUI" parent="." instance=ExtResource("5_ui")]
|
||||
unique_name_in_owner = true
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue