online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/menus/settings/Settings.gd')
| -rw-r--r-- | ui/menus/settings/Settings.gd | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/ui/menus/settings/Settings.gd b/ui/menus/settings/Settings.gd new file mode 100644 index 0000000..f9737a6 --- /dev/null +++ b/ui/menus/settings/Settings.gd @@ -0,0 +1,132 @@ +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 |