Refactor scene structure and resource paths; add death and game over screens

This commit is contained in:
2025-05-10 02:33:49 +02:00
parent 04cce84c6c
commit a95d96dcc9
38 changed files with 486 additions and 88 deletions

View File

@@ -7,10 +7,6 @@ extends Node2D
@onready var gm: GM = $"/root/GameManager"
func reset_scene() -> void:
get_tree().reload_current_scene()
func _on_health_component_on_death() -> void:
if death_sfx:
death_sfx.play()
@@ -20,10 +16,6 @@ func _on_health_component_on_death() -> void:
effect.global_position = global_position
effect.scale = Vector2(1.5, 1.5)
if gm.get_lives() == 1:
gm.reset_player_state()
else:
gm.remove_lives(1)
gm.set_coins(0)
call_deferred("reset_scene")
gm.remove_lives(1)
gm.set_coins(0)

View File

@@ -0,0 +1,5 @@
class_name LevelResource
extends Resource
@export var level_name: String
@export var scene_path: PackedScene

View File

@@ -0,0 +1 @@
uid://cp68km8bykymb

View File

@@ -1,8 +0,0 @@
class_name SettingsMenu
extends Node
@export var input_settings_scene: PackedScene = preload("res://objects/ui/input_settings.tscn")
@export var audio_settings_scene: PackedScene
@export var display_settings_scene: PackedScene
@export var gameplay_settings_scene: PackedScene
@export var settings_menu_control: Control

View File

@@ -0,0 +1,62 @@
class_name DeathScreen
extends Node
@export var death_screen_root: Control
@export var current_level: LevelResource
@export var current_level_label: Label
@export var lives_left_label: Label
@export var timeout_time: float = 2.0
@export var nodes_to_disable: Array[Node] = []
@onready var gm: GM = $"/root/GameManager"
var timer: Timer
func _ready() -> void:
set_lables()
func set_lables() -> void:
if not gm:
return
current_level_label.text = current_level.level_name
lives_left_label.text = " x " + str(gm.get_lives())
func setup_timer() -> void:
timer = Timer.new()
timer.wait_time = timeout_time
timer.one_shot = true
timer.timeout.connect(on_timeout)
add_child(timer)
timer.start()
func toggle_nodes() -> void:
for node in nodes_to_disable:
if node.process_mode == PROCESS_MODE_DISABLED:
node.process_mode = PROCESS_MODE_INHERIT
else:
node.process_mode = PROCESS_MODE_DISABLED
func on_player_death() -> void:
if not gm:
return
toggle_nodes()
set_lables()
death_screen_root.show()
setup_timer()
func on_timeout() -> void:
if not gm:
return
if gm.get_lives() == 0:
return
get_tree().reload_current_scene()

View File

@@ -0,0 +1 @@
uid://b3d1p21sviww4

View File

@@ -0,0 +1,41 @@
class_name GameOverScreen
extends Node
@export var game_over_screen: Control
@export var restart_button: Button
@export var main_menu_button: Button
@export var main_menu_scene: PackedScene
@onready var gm: GM = $"/root/GameManager"
func _ready() -> void:
if not gm:
return
game_over_screen.hide()
restart_button.pressed.connect(on_restart_button_pressed)
main_menu_button.pressed.connect(on_main_menu_button_pressed)
func on_restart_button_pressed() -> void:
if not gm:
return
gm.reset_player_state()
get_tree().reload_current_scene()
func on_main_menu_button_pressed() -> void:
if not gm or not main_menu_scene:
return
gm.reset_player_state()
get_tree().change_scene_to(main_menu_scene)
func on_player_death() -> void:
if not gm or not gm.get_lives() == 0:
return
game_over_screen.show()

View File

@@ -0,0 +1 @@
uid://bkd7o2u4psu4p

View File

@@ -96,4 +96,4 @@ func save_settings() -> void:
func load_settings() -> void:
pass
pass

View File

@@ -6,14 +6,13 @@ extends Node
@export var quit_button: Button
@export var settings_button: Button
@export var exit_to_menu_button: Button
@export var settings_menu: PackedScene
@export var settings_menu: Control
@export var exit_to_menu_scene: PackedScene
@onready var gm: GM = $"/root/GameManager"
var is_paused: bool = false
var is_console_open: bool = false
var settings_menu_instance: Control
func _ready() -> void:
@@ -60,9 +59,8 @@ func _input(event: InputEvent) -> void:
func _on_resume_button_pressed() -> void:
pause_menu_control.hide()
if settings_menu_instance:
settings_menu_instance.queue_free()
settings_menu_instance = null
if settings_menu:
settings_menu.hide()
gm.resume_game()
is_paused = false
@@ -76,10 +74,7 @@ func _on_settings_button_pressed() -> void:
printerr("PauseMenu: Settings menu scene not set.")
return
var settings_instance: Control = settings_menu.instantiate()
add_child(settings_instance)
settings_instance.show()
settings_menu_instance = settings_instance
settings_menu.show()
gm.pause_game()
is_paused = true

View File

@@ -0,0 +1,95 @@
class_name SettingsMenu
extends Node
@export var input_settings: Control
@export var audio_settings: Control
@export var display_settings: Control
@export var gameplay_settings: Control
@export var settings_menu_control: Control
@export var input_settings_button: Button
@export var audio_settings_button: Button
@export var display_settings_button: Button
@export var gameplay_settings_button: Button
func _ready() -> void:
if not settings_menu_control or not input_settings_button or not audio_settings_button or not display_settings_button or not gameplay_settings_button:
printerr("No settings menu control or buttons found.")
return
if input_settings:
input_settings_button.pressed.connect(_on_input_settings_button_pressed)
input_settings.hide()
if audio_settings:
audio_settings_button.pressed.connect(_on_audio_settings_button_pressed)
audio_settings.hide()
if display_settings:
display_settings_button.pressed.connect(_on_display_settings_button_pressed)
display_settings.hide()
if gameplay_settings:
gameplay_settings_button.pressed.connect(_on_gameplay_settings_button_pressed)
gameplay_settings.hide()
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
if settings_menu_control.is_visible():
settings_menu_control.hide()
func _on_input_settings_button_pressed() -> void:
if not input_settings:
return
if input_settings.is_visible():
input_settings.hide()
else:
input_settings.show()
audio_settings.hide()
display_settings.hide()
gameplay_settings.hide()
func _on_audio_settings_button_pressed() -> void:
if not audio_settings:
return
if audio_settings.is_visible():
audio_settings.hide()
else:
audio_settings.show()
input_settings.hide()
display_settings.hide()
gameplay_settings.hide()
func _on_display_settings_button_pressed() -> void:
if not display_settings:
return
if display_settings.is_visible():
display_settings.hide()
else:
display_settings.show()
input_settings.hide()
audio_settings.hide()
gameplay_settings.hide()
func _on_gameplay_settings_button_pressed() -> void:
if not gameplay_settings:
return
if gameplay_settings.is_visible():
gameplay_settings.hide()
else:
gameplay_settings.show()
input_settings.hide()
audio_settings.hide()
display_settings.hide()