diff options
Diffstat (limited to 'client/global.gd')
| -rw-r--r-- | client/global.gd | 69 | 
1 files changed, 59 insertions, 10 deletions
| diff --git a/client/global.gd b/client/global.gd index f25845a6..35244fa7 100644 --- a/client/global.gd +++ b/client/global.gd @@ -17,6 +17,15 @@  #  extends Node +# Each setting contains a dictionary with the following keys: +# "type": The type of the setting. Can be "toggle", "line", "dropdown", or "dropdown_preset" +# "value": The value of the setting. When using "dropdown", this contains an int +#	as the index for the respecitve element in the "options" array. +# "apply": Only for type "dropdown_preset": A dictionary to override all other settings. +# "description": The setting name displayed in the settings menu. +# (Optional: Only when type = "dropdown") "options": An array which contains all +# 	possible values. +  const DEFAULT_PROFILE := {  	"username": "Giovanni",  	"character": 0, @@ -25,27 +34,62 @@ const DEFAULT_PROFILE := {  var default_settings := {  	"interpolate_camera_rotation": { +		"type": "toggle",  		"value": true,  		"description": tr("Interpolate the camera rotation")  	},  	"server_binary": { +		"type": "line",  		"value": "",  		"description": tr("Server binary (leave empty to search PATH)")  	},  	"server_data": { +		"type": "line",  		"value": "",  		"description": tr("Server data directory (leave empty to auto-detect)")  	}, +	"graphics_preset": { +		"type": "dropdown_preset", +		"options": [tr("Low"), tr("Medium"), tr("High"), tr("Ultra")], +		"value":1, +		"description": tr("Graphics preset"), +		"apply": GRAPHICS_PRESETS +	},  	"voxel_gi": { +		"type": "toggle",  		"value": false,  		"description": tr("Use VoxelGI (Blocks the game on map update)")  	},  	"sdfgi": { +		"type": "toggle",  		"value": false,  		"description": tr("Use SDFGI (Doesn't block the game but is more resource-hungry)") -	}, +	}  } +const GRAPHICS_PRESETS = [ +	# Low: +	{ +		"voxel_gi": false, +		"sdfgi": false +	}, +	# Medium: +	{ +		"voxel_gi": false, +		"sdfgi": false +	}, +	# High: +	{ +		"voxel_gi": false, +		"sdfgi": true +	}, +	# Ultra: +	{ +		"voxel_gi": true, +		"sdfgi": false +	} +] +  var profile: Dictionary  var settings: Dictionary @@ -54,9 +98,10 @@ var error_message = ""  var fade_next := false # Set true when transitioning from another scene (fade in requried) -func _ready(): +func _init():  	profile = load_dict("user://profile", DEFAULT_PROFILE)  	settings = load_dict("user://settings", default_settings) +	print("DONE LOADING")  func save_profile():  	save_dict("user://profile", profile) @@ -75,16 +120,12 @@ func load_dict(path: String, default: Dictionary) -> Dictionary:  		return default  	var f = FileAccess.open(path, FileAccess.READ)  	var saved_dict = f.get_var() -	var res: Dictionary = {} +	  	if saved_dict != null and saved_dict is Dictionary: -		for i in default.keys(): -			if saved_dict.has(i): -				res[i] = saved_dict[i] -			else: -				res[i] = default[i] +		add_missing_keys(saved_dict, default) -	print("Loaded dict: ", res) -	return res +	print("Loaded dict: ", saved_dict) +	return saved_dict  func on_vulkan() -> bool:  	return ProjectSettings.get_setting("rendering/rendering_device/driver") == "vulkan" @@ -98,3 +139,11 @@ func focus_first_button(node: Node) -> bool:  		if focus_first_button(c):  			return true  	return false + +func add_missing_keys(dict: Dictionary, reference: Dictionary): +	for k in reference.keys(): +		if !dict.has(k): +			dict[k] = reference +		else: +			if dict[k] is Dictionary: +				add_missing_keys(dict[k], reference[k]) | 
