online multiplayer chess game (note server currently down)
Diffstat (limited to 'ui/menus/settings/Settings.gd')
-rw-r--r--ui/menus/settings/Settings.gd132
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