DreamBall/settings.gd

79 lines
3.2 KiB
GDScript3
Raw Permalink Normal View History

extends Node
const settings_file_name := "user://settings.save"
var fullscreen := false : set = _set_fullscreen, get = _get_fullscreen
func _get_fullscreen() -> bool:
return fullscreen
func _set_fullscreen(new_fullscreen: bool) -> void:
fullscreen = new_fullscreen
var new_state := DisplayServer.WindowMode.WINDOW_MODE_FULLSCREEN if new_fullscreen else DisplayServer.WindowMode.WINDOW_MODE_WINDOWED
DisplayServer.window_set_mode(new_state)
save_settings()
var sound_on_gravity_change := true : set = _set_sound_on_gravity_change, get = _get_sound_on_gravity_change
func _get_sound_on_gravity_change() -> bool:
return sound_on_gravity_change
func _set_sound_on_gravity_change(new_sound_on_gravity_change: bool) -> void:
sound_on_gravity_change = new_sound_on_gravity_change
save_settings()
var volume_music := 0.0 : set = _set_volume_music, get = _get_volume_music
func _get_volume_music() -> float:
return volume_music
func _set_volume_music(new_volume_music: float) -> void:
volume_music = new_volume_music
for i in AudioServer.bus_count:
var bus_name := AudioServer.get_bus_name(i)
if bus_name != "Master" and bus_name != "Sounds":
AudioServer.set_bus_volume_db(i, volume_music)
AudioServer.set_bus_mute(i, volume_music <= -15.0)
save_settings()
var volume_sounds := 0.0 : set = _set_volume_sounds, get = _get_volume_sounds
func _get_volume_sounds() -> float:
return volume_sounds
func _set_volume_sounds(new_volume_sounds: float) -> void:
var bus_index := AudioServer.get_bus_index("Sounds")
if bus_index == -1:
print("The Sounds audio bus is missing, can't set new volume!")
return
volume_sounds = new_volume_sounds
AudioServer.set_bus_mute(bus_index, volume_sounds <= -15.0)
AudioServer.set_bus_volume_db(bus_index, volume_sounds)
save_settings()
func _ready() -> void:
if not FileAccess.file_exists(settings_file_name):
print("The settings file has not been found, not reading from it")
return
var settings_file := FileAccess.open(settings_file_name, FileAccess.READ)
var json := JSON.new()
var json_string := settings_file.get_line()
if json.parse(json_string) != OK:
print("(SETTINGS) JSON Parse Error: ", json.get_error_message(), " in ", json_string, " at line ", json.get_error_line())
return
if json.data.has("fullscreen") and typeof(json.data["fullscreen"]) == TYPE_BOOL:
fullscreen = json.data["fullscreen"]
if json.data.has("sound_on_gravity_change") and typeof(json.data["sound_on_gravity_change"]) == TYPE_BOOL:
sound_on_gravity_change = json.data["sound_on_gravity_change"]
if json.data.has("volume_music") and typeof(json.data["volume_music"]) == TYPE_FLOAT:
volume_music = json.data["volume_music"]
if json.data.has("volume_sounds") and typeof(json.data["volume_sounds"]) == TYPE_FLOAT:
volume_sounds = json.data["volume_sounds"]
func save_settings() -> void:
var settings_file := FileAccess.open(settings_file_name, FileAccess.WRITE)
var json_string := JSON.stringify({
"fullscreen": fullscreen,
"sound_on_gravity_change": sound_on_gravity_change,
"volume_music": volume_music,
"volume_sounds": volume_sounds,
})
settings_file.store_line(json_string)
settings_file.store_line("FOR YOUR SAFETY, ALWAYS CHECK IF THE DATA OF THE FILES YOU DOWNLOAD LOOKS OKAY")