Refactor scene structure and resource paths; add death and game over screens
This commit is contained in:
@@ -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)
|
||||
|
||||
|
5
scripts/resources/level_resource.gd
Normal file
5
scripts/resources/level_resource.gd
Normal file
@@ -0,0 +1,5 @@
|
||||
class_name LevelResource
|
||||
extends Resource
|
||||
|
||||
@export var level_name: String
|
||||
@export var scene_path: PackedScene
|
1
scripts/resources/level_resource.gd.uid
Normal file
1
scripts/resources/level_resource.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://cp68km8bykymb
|
@@ -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
|
62
scripts/ui/death_screen.gd
Normal file
62
scripts/ui/death_screen.gd
Normal 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()
|
1
scripts/ui/death_screen.gd.uid
Normal file
1
scripts/ui/death_screen.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b3d1p21sviww4
|
41
scripts/ui/game_over_screen.gd
Normal file
41
scripts/ui/game_over_screen.gd
Normal 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()
|
1
scripts/ui/game_over_screen.gd.uid
Normal file
1
scripts/ui/game_over_screen.gd.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://bkd7o2u4psu4p
|
@@ -96,4 +96,4 @@ func save_settings() -> void:
|
||||
|
||||
|
||||
func load_settings() -> void:
|
||||
pass
|
||||
pass
|
@@ -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
|
||||
|
95
scripts/ui/settings_menu.gd
Normal file
95
scripts/ui/settings_menu.gd
Normal 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()
|
||||
|
||||
|
Reference in New Issue
Block a user