Files
step3/scripts/ui/settings_screen.gd

100 lines
3.5 KiB
GDScript

extends VBoxContainer
const Brand := preload("res://scripts/ui/medmind_style.gd")
var main: Control
var theme_toggle: CheckButton
var sound_toggle: CheckButton
func _ready() -> void:
set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
add_theme_constant_override("separation", 18)
var eyebrow := Label.new()
eyebrow.text = "PREFERENCES"
eyebrow.add_theme_font_override("font", Brand.font)
eyebrow.add_theme_font_size_override("font_size", 14)
eyebrow.add_theme_color_override("font_color", Brand.SKY_BLUE)
add_child(eyebrow)
var title := Label.new()
title.text = "Settings"
title.add_theme_font_override("font", Brand.font)
title.add_theme_font_size_override("font_size", 34)
add_child(title)
var subtitle := Label.new()
subtitle.text = "Adjust RanaZe's appearance and interface sounds."
subtitle.add_theme_font_override("font", Brand.font)
subtitle.add_theme_font_size_override("font_size", 17)
subtitle.add_theme_color_override("font_color", Brand.SLATE)
add_child(subtitle)
var panel := PanelContainer.new()
panel.custom_minimum_size = Vector2(520, 0)
panel.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
panel.add_theme_stylebox_override("panel", Brand.panel_box(UIThemeService.is_dark_mode()))
add_child(panel)
var content := VBoxContainer.new()
content.add_theme_constant_override("separation", 18)
panel.add_child(content)
theme_toggle = CheckButton.new()
theme_toggle.text = "Dark mode"
theme_toggle.custom_minimum_size = Vector2(0, 52)
theme_toggle.toggled.connect(_on_theme_toggled)
content.add_child(theme_toggle)
sound_toggle = CheckButton.new()
sound_toggle.text = "Interface sounds"
sound_toggle.custom_minimum_size = Vector2(0, 52)
sound_toggle.toggled.connect(UISoundService.set_sounds_enabled)
content.add_child(sound_toggle)
var legal_panel := PanelContainer.new()
legal_panel.custom_minimum_size = Vector2(520, 0)
legal_panel.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN
legal_panel.add_theme_stylebox_override("panel", Brand.panel_box(UIThemeService.is_dark_mode()))
legal_panel.set_meta("legal_panel", true)
add_child(legal_panel)
var legal_content := VBoxContainer.new()
legal_content.add_theme_constant_override("separation", 10)
legal_panel.add_child(legal_content)
var legal_heading := Label.new()
legal_heading.text = "Legal"
legal_heading.add_theme_font_override("font", Brand.font)
legal_heading.add_theme_font_size_override("font_size", 20)
legal_content.add_child(legal_heading)
for spec in [["Terms of Service", "terms"], ["Privacy Policy", "privacy"]]:
var button := Button.new()
button.text = spec[0]
button.alignment = HORIZONTAL_ALIGNMENT_LEFT
button.pressed.connect(_open_legal_document.bind(str(spec[1])))
legal_content.add_child(button)
UIThemeService.theme_changed.connect(_on_theme_changed)
func on_show(_payload: Variant = null) -> void:
theme_toggle.set_pressed_no_signal(UIThemeService.is_dark_mode())
sound_toggle.set_pressed_no_signal(UISoundService.are_sounds_enabled())
func _on_theme_toggled(enabled: bool) -> void:
UIThemeService.set_dark_mode(enabled)
func _open_legal_document(kind: String) -> void:
main.open_legal_document(kind)
func _on_theme_changed(is_dark: bool) -> void:
theme_toggle.set_pressed_no_signal(is_dark)
var panel := theme_toggle.get_parent().get_parent() as PanelContainer
if panel != null:
panel.add_theme_stylebox_override("panel", Brand.panel_box(is_dark))
for node in get_children():
if node is PanelContainer and node.has_meta("legal_panel"):
node.add_theme_stylebox_override("panel", Brand.panel_box(is_dark))