init game files
This commit is contained in:
111
scripts/ui/PauseMenu.gd
Normal file
111
scripts/ui/PauseMenu.gd
Normal file
@@ -0,0 +1,111 @@
|
||||
class_name PauseMenu
|
||||
extends CanvasLayer
|
||||
|
||||
## PauseMenu - In-game pause/escape menu
|
||||
|
||||
signal resume_game
|
||||
signal restart_game
|
||||
signal return_to_menu
|
||||
|
||||
# UI Components
|
||||
var panel: PanelContainer
|
||||
var resume_button: Button
|
||||
var restart_button: Button
|
||||
var menu_button: Button
|
||||
|
||||
var menu_is_visible: bool = false
|
||||
|
||||
func _ready() -> void:
|
||||
_create_menu()
|
||||
hide_menu()
|
||||
|
||||
func _create_menu() -> void:
|
||||
# Semi-transparent background
|
||||
var bg = ColorRect.new()
|
||||
add_child(bg)
|
||||
bg.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
bg.color = Color(0, 0, 0, 0.7)
|
||||
bg.mouse_filter = Control.MOUSE_FILTER_STOP
|
||||
|
||||
# Center container
|
||||
var center = CenterContainer.new()
|
||||
add_child(center)
|
||||
center.set_anchors_preset(Control.PRESET_FULL_RECT)
|
||||
|
||||
# Panel
|
||||
panel = PanelContainer.new()
|
||||
center.add_child(panel)
|
||||
|
||||
var style = StyleBoxFlat.new()
|
||||
style.bg_color = Color(0.15, 0.15, 0.2)
|
||||
style.border_color = Color(0.3, 0.3, 0.4)
|
||||
style.set_border_width_all(2)
|
||||
style.set_corner_radius_all(10)
|
||||
style.set_content_margin_all(30)
|
||||
panel.add_theme_stylebox_override("panel", style)
|
||||
|
||||
var vbox = VBoxContainer.new()
|
||||
panel.add_child(vbox)
|
||||
vbox.add_theme_constant_override("separation", 15)
|
||||
|
||||
# Title
|
||||
var title = Label.new()
|
||||
title.text = "Game Paused"
|
||||
title.add_theme_font_size_override("font_size", 28)
|
||||
title.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER
|
||||
vbox.add_child(title)
|
||||
|
||||
# Spacer
|
||||
var spacer = Control.new()
|
||||
spacer.custom_minimum_size = Vector2(0, 10)
|
||||
vbox.add_child(spacer)
|
||||
|
||||
# Resume button
|
||||
resume_button = _create_menu_button("Resume")
|
||||
vbox.add_child(resume_button)
|
||||
resume_button.pressed.connect(_on_resume_pressed)
|
||||
|
||||
# Restart button
|
||||
restart_button = _create_menu_button("Restart Game")
|
||||
vbox.add_child(restart_button)
|
||||
restart_button.pressed.connect(_on_restart_pressed)
|
||||
|
||||
# Return to menu button
|
||||
menu_button = _create_menu_button("Main Menu")
|
||||
vbox.add_child(menu_button)
|
||||
menu_button.pressed.connect(_on_menu_pressed)
|
||||
|
||||
func _create_menu_button(text: String) -> Button:
|
||||
var button = Button.new()
|
||||
button.text = text
|
||||
button.custom_minimum_size = Vector2(180, 45)
|
||||
button.add_theme_font_size_override("font_size", 18)
|
||||
return button
|
||||
|
||||
func show_menu() -> void:
|
||||
visible = true
|
||||
menu_is_visible = true
|
||||
get_tree().paused = true
|
||||
|
||||
func hide_menu() -> void:
|
||||
visible = false
|
||||
menu_is_visible = false
|
||||
get_tree().paused = false
|
||||
|
||||
func toggle_menu() -> void:
|
||||
if menu_is_visible:
|
||||
hide_menu()
|
||||
else:
|
||||
show_menu()
|
||||
|
||||
func _on_resume_pressed() -> void:
|
||||
hide_menu()
|
||||
resume_game.emit()
|
||||
|
||||
func _on_restart_pressed() -> void:
|
||||
hide_menu()
|
||||
restart_game.emit()
|
||||
|
||||
func _on_menu_pressed() -> void:
|
||||
hide_menu()
|
||||
return_to_menu.emit()
|
||||
Reference in New Issue
Block a user