sokoban
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
extends Control

var _settings := {
	resolution = Vector2(1280, 720), fullscreen = true, vsync = true, stopwatch = false
}
var starting = true

export(NodePath) onready var vsyncbutton = get_node(vsyncbutton)
export(NodePath) onready var fullscreenbutton = get_node(fullscreenbutton)
export(NodePath) onready var resolution_input = get_node(resolution_input)
export(NodePath) onready var stopwatchbox = get_node(stopwatchbox)


func _ready():
	var data = SaveLoad.files.settings.data
	_settings.stopwatch = data.stopwatch
	_settings.resolution = data.resolution
	_settings.vsync = data.vsync
	_settings.fullscreen = data.fullscreen
	update_settings(false)


func start():
	starting = false
	yield(get_tree().create_timer(.3), "timeout")
	$ColorRect/ExitButton.grab_focus()
	show()


func update_settings_visual():
	fullscreenbutton.pressed = _settings.fullscreen
	vsyncbutton.pressed = _settings.vsync
	var resolution_text_placeholder = (
		str(_settings.resolution.x)
		+ "x"
		+ str(_settings.resolution.y)
	)
	resolution_input.placeholder_text = resolution_text_placeholder
	stopwatchbox.pressed = _settings.stopwatch


func _on_VscynButton_toggled(button_pressed):
	if starting:
		return
	_settings.vsync = button_pressed
	update_settings()


func _on_FullscreenButton_toggled(button_pressed):
	if starting:
		return
	_settings.fullscreen = button_pressed
	update_settings()


func update_settings(open := true) -> void:
	if not open:
		_settings.vsync = OS.vsync_enabled
		_settings.fullscreen = OS.window_fullscreen
		_settings.resolution = OS.window_size
		var data = SaveLoad.files.settings.data
		_settings = data
	apply_settings()
	update_settings_visual()
	if open:
		MainInstances.console.Log("Settings applied.", .1, 1)
	$ColorRect/VBoxContainer/HBoxContainer2/ResolutionHolder.visible = !_settings.fullscreen
	SaveLoad.save("settings")


func apply_settings():
	resolution_input.placeholder_text = (
		str(_settings.resolution.x)
		+ "x"
		+ str(_settings.resolution.y)
	)
	OS.window_fullscreen = _settings.fullscreen
	if _settings.fullscreen:
		_settings.resolution = OS.get_screen_size()
	OS.set_window_size(_settings.resolution)
	OS.vsync_enabled = _settings.vsync
	globalsettings.stopwatch = _settings.stopwatch


func _on_ResolutionInput_text_entered(new_text: String):
	if starting:
		return
	var text = new_text.split("x")
	if text.size() < 2:
		MainInstances.console.Log("Please split text with a x (1270x720)", 2.5, 5)
		return
	var text_processed = []
	for number in text:
		number = int(number)
		number = round(number)
		number = clamp(number, 400, 4000)
		text_processed.append(number)
	var new_res = Vector2(text_processed[0], text_processed[1])
	_settings.resolution = new_res
	update_settings()


func _on_ResolutionButton_pressed():
	if starting:
		return
	resolution_input.visible = !resolution_input.visible


func _on_ExitButton_pressed():
	hide()
	update_settings(false)
	if get_parent().has_method("pause_toggle"):
		get_parent().pause_toggle(true)
	else:
		push_warning("Parent of %s not pausemenu" % self)


func _on_StopwatchBox_toggled(button_pressed):
	if starting:
		return
	_settings.stopwatch = button_pressed
	update_settings()