96 lines
3.8 KiB
GDScript
96 lines
3.8 KiB
GDScript
extends "res://scripts/ui/menu_modal.gd"
|
||
|
||
var _volume: HSlider
|
||
var _music: HSlider
|
||
var _resolution: OptionButton
|
||
var _language: OptionButton
|
||
var _fullscreen: CheckButton
|
||
var _error: Label
|
||
|
||
func _ready() -> void:
|
||
heading = "OPCJE"
|
||
subtitle = "Dostosuj dźwięk, ekran i język swojej wyprawy."
|
||
marker = "USTAWIENIA / KOMPUTER POKŁADOWY"
|
||
preferred_size = Vector2(800,650)
|
||
super._ready()
|
||
var audio := _section("01 / DŹWIĘK")
|
||
_volume = _slider(audio,"Głośność ogólna",GameSettings.volume)
|
||
_music = _slider(audio,"Głośność muzyki",GameSettings.music_volume)
|
||
var columns := HBoxContainer.new()
|
||
columns.add_theme_constant_override("separation",16)
|
||
body.add_child(columns)
|
||
var display := _section("02 / OBRAZ",columns)
|
||
label(display,tr("Rozdzielczość"),12,MUTED)
|
||
_resolution = OptionButton.new()
|
||
_resolution.custom_minimum_size.y = 42
|
||
display.add_child(_resolution)
|
||
input_style(_resolution)
|
||
for value in GameSettings.RESOLUTIONS: _resolution.add_item("%d × %d" % [value.x,value.y])
|
||
_resolution.select(maxi(0,GameSettings.RESOLUTIONS.find(GameSettings.resolution)))
|
||
_fullscreen = CheckButton.new()
|
||
_fullscreen.text = tr("Pełny ekran")
|
||
_fullscreen.button_pressed = GameSettings.fullscreen
|
||
_fullscreen.add_theme_font_override("font",ThemeDB.fallback_font)
|
||
_fullscreen.add_theme_font_size_override("font_size",14)
|
||
display.add_child(_fullscreen)
|
||
var language := _section("03 / JĘZYK",columns)
|
||
label(language,tr("Język interfejsu"),12,MUTED)
|
||
_language = OptionButton.new()
|
||
_language.custom_minimum_size.y = 42
|
||
language.add_child(_language)
|
||
input_style(_language)
|
||
for name in GameSettings.LANGUAGES: _language.add_item(name)
|
||
_language.select(GameSettings.LOCALES.find(GameSettings.locale))
|
||
var note := label(language,tr("Ustawienia są zapamiętywane między uruchomieniami."),12,MUTED)
|
||
note.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||
for select in [_resolution,_language]:
|
||
select.get_popup().add_theme_stylebox_override("panel",box(Color("102431"),Color("416471"),10))
|
||
select.get_popup().add_theme_font_override("font",ThemeDB.fallback_font)
|
||
_error = label(body,"",12,Color("ef9e8b"))
|
||
_error.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART
|
||
button(footer,tr("Anuluj"),_close)
|
||
button(footer,tr("Zastosuj"),_apply,true)
|
||
|
||
func _section(caption: String, parent: Node = null) -> VBoxContainer:
|
||
var card := PanelContainer.new()
|
||
card.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
card.add_theme_stylebox_override("panel",box(Color("0e202d"),Color("263e4a"),16))
|
||
(parent if parent != null else body).add_child(card)
|
||
var column := VBoxContainer.new()
|
||
column.add_theme_constant_override("separation",14)
|
||
card.add_child(column)
|
||
label(column,tr(caption),11,GOLD)
|
||
return column
|
||
|
||
func _slider(parent: Node, caption: String, value: float) -> HSlider:
|
||
var row := HBoxContainer.new()
|
||
row.add_theme_constant_override("separation",18)
|
||
parent.add_child(row)
|
||
var title := label(row,tr(caption),14)
|
||
title.custom_minimum_size.x = 174
|
||
var slider := HSlider.new()
|
||
slider.max_value = 100
|
||
slider.step = 1
|
||
slider.value = roundf(value*100)
|
||
slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
slider.custom_minimum_size = Vector2(120,28)
|
||
row.add_child(slider)
|
||
var percentage := label(row,"%d%%" % slider.value,16,GOLD)
|
||
percentage.custom_minimum_size.x = 48
|
||
percentage.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT
|
||
slider.value_changed.connect(func(amount: float) -> void: percentage.text = "%d%%" % amount)
|
||
return slider
|
||
|
||
func _apply() -> void:
|
||
GameSettings.volume = _volume.value/100.0
|
||
GameSettings.music_volume = _music.value/100.0
|
||
GameSettings.resolution = GameSettings.RESOLUTIONS[_resolution.selected]
|
||
GameSettings.fullscreen = _fullscreen.button_pressed
|
||
GameSettings.locale = GameSettings.LOCALES[_language.selected]
|
||
GameSettings.apply()
|
||
if GameSettings.save_settings() != OK:
|
||
_error.text = tr("Nie udało się zapisać ustawień.")
|
||
return
|
||
_close()
|
||
|