Add pause menu functionality and update collectable nodes with collision shapes

This commit is contained in:
2025-05-03 15:10:50 +02:00
parent e286908e46
commit 9dabff474d
12 changed files with 249 additions and 5 deletions

View File

@@ -5,6 +5,7 @@ var root: Node
var has_fade_away: bool = false
@export var area2d: Area2D
@export var collision_shape: CollisionShape2D
@export var collectable_data: CollectableResource
@export var sfx: AudioStreamPlayer2D
signal collected(amount: int, type: CollectableResource.CollectableType)
@@ -25,6 +26,8 @@ func _ready() -> void:
func _on_area2d_body_entered(body: Node2D) -> void:
if body.has_node("CanPickUpComponent"):
collected.emit(collectable_data.amount, collectable_data.type)
if collision_shape:
collision_shape.call_deferred("set_disabled", true)
if sfx:
sfx.play()
if not has_fade_away:

View File

@@ -123,3 +123,15 @@ func unlock_level(level_index: int) -> void:
func try_to_go_to_next_level() -> void:
if player_state["current_level"] + 1 < level_scenes.size() and player_state["current_level"] + 1 in player_state["unlocked_levels"]:
player_state["current_level"] += 1
func quit_game() -> void:
get_tree().quit()
func pause_game() -> void:
Engine.time_scale = 0
func resume_game() -> void:
Engine.time_scale = 1

85
scripts/pause_menu.gd Normal file
View File

@@ -0,0 +1,85 @@
class_name PauseMenu
extends Node
@export var pause_menu_control: Control
@export var resume_button: Button
@export var quit_button: Button
@export var settings_button: Button
@export var exit_to_menu_button: Button
@export var settings_menu: PackedScene
@export var exit_to_menu_scene: PackedScene
@onready var gm: GM = $"/root/GameManager"
var is_paused: bool = false
func _ready() -> void:
if not pause_menu_control:
printerr("PauseMenu: Pause menu control not set.")
return
if not resume_button:
printerr("PauseMenu: Resume button not set.")
return
if not quit_button:
printerr("PauseMenu: Quit button not set.")
return
if not settings_button:
printerr("PauseMenu: Settings button not set.")
return
if not exit_to_menu_button:
printerr("PauseMenu: Exit to menu button not set.")
return
pause_menu_control.hide()
resume_button.pressed.connect(_on_resume_button_pressed)
quit_button.pressed.connect(_on_quit_button_pressed)
settings_button.pressed.connect(_on_settings_button_pressed)
exit_to_menu_button.pressed.connect(_on_exit_to_menu_button_pressed)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("pause"):
if is_paused:
_on_resume_button_pressed()
else:
gm.pause_game()
is_paused = true
pause_menu_control.show()
resume_button.grab_focus()
func _on_resume_button_pressed() -> void:
pause_menu_control.hide()
gm.resume_game()
is_paused = false
func _on_quit_button_pressed() -> void:
gm.quit_game()
func _on_settings_button_pressed() -> void:
if not settings_menu:
printerr("PauseMenu: Settings menu scene not set.")
return
var settings_instance: Control = settings_menu.instantiate()
get_tree().root.add_child(settings_instance)
settings_instance.show()
pause_menu_control.hide()
gm.pause_game()
is_paused = true
func _on_exit_to_menu_button_pressed() -> void:
if not exit_to_menu_scene:
printerr("PauseMenu: Exit to menu scene not set.")
return
get_tree().change_scene_to_packed(exit_to_menu_scene)

View File

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