-
Notifications
You must be signed in to change notification settings - Fork 37
/
Copy pathsettings_manager.gd
54 lines (41 loc) · 1.37 KB
/
settings_manager.gd
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
extends Node
const INPUT_NONE = 0
const INPUT_AREAS = 1
const INPUT_BUTTONS = 2
const default_settings = {
fullscreen = false,
music = true,
sound = true,
input_mode = INPUT_AREAS
}
const DATA_DELIMITER = ":"
var options_path = "user://options.txt"
var cache = default_settings
func read_settings():
# Read the file
var settings_lines = FileManager.get_file_lines(options_path)
if settings_lines.size() == 0: # Either no data was stored, or the file wasn't there, save first
save_settings(default_settings)
settings_lines = FileManager.get_file_lines(options_path)
var data = default_settings
for line in settings_lines:
var line_parts = line.split(DATA_DELIMITER)
if line_parts.size() >= 2 and default_settings.has(line_parts[0]):
var data_type = typeof(default_settings[line_parts[0]])
if data_type == TYPE_BOOL:
data[line_parts[0]] = (line_parts[1] == str(true))
else:
data[line_parts[0]] = convert(line_parts[1], data_type)
cache = data
return data
func get_settings():
return cache
func save_settings(data):
var lines = []
for setting in default_settings:
var data_line = default_settings[setting]
if data.has(setting):
data_line = convert(data[setting], typeof(default_settings[setting]))
lines.push_back(str(setting, DATA_DELIMITER, data_line))
FileManager.set_file_lines(options_path, lines)
read_settings() # Updating cache