extends Control
class_name Settings
const file = "user://chess.settings"
onready var piece_sets: PoolStringArray = Utils.walk_dir("res://assets/pieces")
onready var piece_set_button: GridMenuButton = $"%PieceSet"
onready var preview: Preview = $"%Preview"
onready var board_color1: ColorPickerButtonBetter = $"%boardcolor1"
onready var board_color2: ColorPickerButtonBetter = $"%boardcolor2"
onready var settings: Dictionary = default_settings_data setget set_settings
const default_settings_data := {
vsync = false,
fullscreen = false,
borderless = false,
premoves = false,
piece_set = "california",
board_color1 = Color(0.870588, 0.890196, 0.901961),
board_color2 = Color(0.54902, 0.635294, 0.678431),
rainbow = false
}
onready var node_map := {
vsync = $"%VsyncButton",
fullscreen = $"%FullscreenButton",
borderless = $"%Borderless",
premoves = $"%premoves",
rainbow = $"%rainbow",
}
var ignore_set_settings = false
func set_settings(new_settings: Dictionary) -> void:
if not ignore_set_settings:
update_button_visuals(new_settings)
settings = new_settings
SaveLoad.save(file, settings)
func update_button_visuals(set: Dictionary = settings) -> void:
ignore_set_settings = true
for k in settings:
if k in node_map:
node_map[k].pressed = set[k]
board_color1.color = set.board_color1
board_color2.color = set.board_color2
preview.update_preview(set.board_color1, set.board_color2, set.piece_set)
ignore_set_settings = false
func _ready() -> void:
var lod = SaveLoad.load(file)
settings = lod if Utils.dict_cmp(lod, default_settings_data) else default_settings_data
if OS.has_feature("HTML5"):
node_map.borderless.queue_free()
for i in piece_sets: # add the items
piece_set_button.add_icon_item(load("res://assets/pieces/" + i + "/wP.png"), i, Vector2(75, 75))
piece_set_button.selected = Array(piece_sets).find(settings.piece_set)
update_vars()
update_button_visuals()
save()
func update_vars() -> void:
Globals.premoves = settings.premoves
Globals.piece_set = settings.piece_set
Globals.board_color1 = settings.board_color1
Globals.board_color2 = settings.board_color2
OS.vsync_enabled = settings.vsync
OS.window_fullscreen = settings.fullscreen
OS.window_borderless = settings.borderless
ColorBack.rainbow = settings.rainbow
func save() -> void:
SaveLoad.save(file, settings)
func _on_PieceSet_selected(index: int) -> void:
Globals.piece_set = piece_sets[index]
self.settings.piece_set = piece_sets[index]
func _on_VsyncButton_toggled(button_pressed: bool) -> void:
OS.vsync_enabled = button_pressed
self.settings.vsync = button_pressed
func _on_FullscreenButton_toggled(button_pressed: bool) -> void:
OS.window_fullscreen = button_pressed
self.settings.fullscreen = button_pressed
func _on_Borderless_toggled(button_pressed: bool) -> void:
self.settings.borderless = !button_pressed
OS.window_borderless = !button_pressed
func _on_boardcolor1_newcolor(color: Color) -> void:
Globals.board_color1 = color
self.settings.board_color1 = color
func _on_boardcolor1_changed(color: Color):
preview.update_preview(color, settings.board_color2, settings.piece_set)
func _on_boardcolor2_newcolor(color: Color) -> void:
Globals.board_color2 = color
self.settings.board_color2 = color
func _on_boardcolor2_changed(color: Color):
preview.update_preview(settings.board_color1, color, settings.piece_set)
func _on_resetbutton_pressed() -> void:
self.settings = default_settings_data.duplicate()
update_vars()
func _on_rainbow_toggled(button_pressed: bool) -> void:
ColorBack.rainbow = button_pressed
self.settings.rainbow = button_pressed
func set_premoves(button_pressed: bool) -> void:
self.settings.premoves = button_pressed
Globals.premoves = button_pressed