foitin/engine/scenes/settings_menu.gd
m3ultra 4e2004e740 Settings page, pause menu, menu navigation; fix packed-app portraits
- select screen portraits load via pck-safe loader (the blank-cards bug
  in the shipped build)
- Settings (title menu + persisted user://settings.json): fullscreen,
  hitbox viewer default, master volume
- Esc: pause menu in fights (resume/rematch/select/menu), back-to-title
  from select/editor/settings
- FOITIN_SHOT env hook smoke-tests exported builds end-to-end

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-29 21:31:16 +10:00

61 lines
1.8 KiB
GDScript

extends Node2D
## Settings page: fullscreen, hitbox viewer default, master volume.
func _ready() -> void:
var bg := ColorRect.new()
bg.color = Color("#14161c")
bg.size = Vector2(1280, 720)
add_child(bg)
var title := Label.new()
title.text = "SETTINGS"
title.add_theme_font_size_override("font_size", 48)
title.position = Vector2(540, 80)
add_child(title)
var fs := CheckBox.new()
fs.text = "Fullscreen"
fs.button_pressed = Settings.fullscreen
fs.position = Vector2(480, 220)
fs.add_theme_font_size_override("font_size", 26)
fs.toggled.connect(func(v): Settings.fullscreen = v; Settings.save())
add_child(fs)
var boxes := CheckBox.new()
boxes.text = "Show hitboxes (training)"
boxes.button_pressed = Settings.show_boxes
boxes.position = Vector2(480, 280)
boxes.add_theme_font_size_override("font_size", 26)
boxes.toggled.connect(func(v): Settings.show_boxes = v; Settings.save())
add_child(boxes)
var vol_label := Label.new()
vol_label.text = "Master volume"
vol_label.position = Vector2(480, 360)
vol_label.add_theme_font_size_override("font_size", 26)
add_child(vol_label)
var vol := HSlider.new()
vol.min_value = 0
vol.max_value = 100
vol.value = Settings.volume
vol.position = Vector2(480, 400)
vol.size = Vector2(320, 30)
vol.value_changed.connect(func(v): Settings.volume = v; Settings.save())
add_child(vol)
var back := Button.new()
back.text = "BACK (Esc)"
back.position = Vector2(540, 520)
back.size = Vector2(200, 52)
back.add_theme_font_size_override("font_size", 24)
back.pressed.connect(_back)
add_child(back)
func _back() -> void:
get_tree().change_scene_to_file("res://engine/scenes/Title.tscn")
func _input(event: InputEvent) -> void:
if event is InputEventKey and event.pressed and event.keycode == KEY_ESCAPE:
_back()