diff options
Diffstat (limited to 'client/global.gd')
| -rw-r--r-- | client/global.gd | 81 | 
1 files changed, 47 insertions, 34 deletions
| diff --git a/client/global.gd b/client/global.gd index 9521eed7..6d261814 100644 --- a/client/global.gd +++ b/client/global.gd @@ -43,35 +43,47 @@ var languages := language_array()  var using_joypad := false  var using_touch := false -var default_settings := { -	"language": DropdownSetting.new(tr("Language"), 0, languages.map(func(e): return e[1])), -	"master_volume": RangeSetting.new(tr("Master Volume"), 0, -30, 0), -	"music_volume": RangeSetting.new(tr("Music Volume"), 0, -30, 0), -	"sfx_volume": RangeSetting.new(tr("SFX Volume"), 0, -30, 0), -	"fullscreen": DropdownSetting.new(tr("Fullscreen"), 0, [tr("Keep"), tr("Always"), tr("Never")]), -	"touch_controls": DropdownSetting.new(tr("Enable touch screen controls"), 0, [tr("Automatic"), tr("Enabled"), tr("Disabled")]), -	"interpolate_camera_rotation": ToggleSetting.new(tr("Smooth camera rotation"), true), -	"invert_camera": ToggleSetting.new(tr("Invert camera movement"), false), -	"usernames": ToggleSetting.new(tr("Show username tags"), true), -	"server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), "", tr("Enter path")), -	"server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), "", tr("Enter path")), -	"ui_scale_mode": DropdownSetting.new(tr("UI scale mode"), 0, [tr("Resize"), tr("Disabled")]), -	"ui_scale_factor": RangeSetting.new(tr("UI scale factor"), 1. if not on_mobile() else 1.5, 0.5, 1.5, 3), -	"aa": DropdownSetting.new(tr("Anti-aliasing"), 2 if on_high_end() else 0, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]), -	"ssao": ToggleSetting.new(tr("Ambient occlusion"), true if on_high_end() else false), -	"taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false), -	"gi": DropdownSetting.new(tr("Global illumination"), 0, [tr("Disabled"), tr("SDFGI"), tr("Voxel GI")]), -	"shadows": ToggleSetting.new(tr("Enable shadows"), true if on_high_end() else false), -	"glow": ToggleSetting.new(tr("Enable glow"), true if on_high_end() else false), -	"debug_info": ToggleSetting.new(tr("Display debug info (Framerate, etc.)"), false), -	"grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16 if on_high_end() else 0, 0, 32, false), -	"lq_trees": ToggleSetting.new(tr("Low-poly trees"), false if on_high_end() else true), -	"setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false), -	"tutorial_started": ToggleSetting.new(tr("Tutorial started"), false), -	"latch_boost": ToggleSetting.new(tr("Always extend boost to maximum duration"), true), -	"ui_blur": ToggleSetting.new(tr("Enable UI blur"), true) -} +var default_settings := [ +		SettingsCategory.new(tr("Gameplay"), "gameplay", { +			"touch_controls": DropdownSetting.new(tr("Enable touch screen controls"), 0, [tr("Automatic"), tr("Enabled"), tr("Disabled")]), +			"interpolate_camera_rotation": ToggleSetting.new(tr("Smooth camera rotation"), true), +			"invert_camera": ToggleSetting.new(tr("Invert camera movement"), false), +			"usernames": ToggleSetting.new(tr("Show username tags"), true), +			"setup_complete": ToggleSetting.new(tr("Initial setup complete. (Uncheck and restart to reenter)"), false), +			"tutorial_started": ToggleSetting.new(tr("Tutorial started"), false), +			"latch_boost": ToggleSetting.new(tr("Always extend boost to maximum duration"), true), +		}), +		SettingsCategory.new(tr("User interface"), "ui", { +			"language": DropdownSetting.new(tr("Language"), 0, languages.map(func(e): return e[1])), +			"ui_scale_mode": DropdownSetting.new(tr("UI scale mode"), 0, [tr("Resize"), tr("Disabled")]), +			"ui_scale_factor": RangeSetting.new(tr("UI scale factor"), 1. if not on_mobile() else 1.5, 0.5, 1.5, 3), +		}), +		SettingsCategory.new(tr("Graphics"), "graphics", { +			"fullscreen": DropdownSetting.new(tr("Fullscreen"), 0, [tr("Keep"), tr("Always"), tr("Never")]), +			"aa": DropdownSetting.new(tr("Anti-aliasing"), 2 if on_high_end() else 0, [tr("Disabled"), "FXAA", "MSAA 2x", "MSAA 4x"]), +			"ssao": ToggleSetting.new(tr("Ambient occlusion"), true if on_high_end() else false), +			"taa": ToggleSetting.new(tr("Temporal Anti-Aliasing"), false), +			"gi": DropdownSetting.new(tr("Global illumination"), 0, [tr("Disabled"), tr("SDFGI"), tr("Voxel GI")]), +			"shadows": ToggleSetting.new(tr("Enable shadows"), true if on_high_end() else false), +			"glow": ToggleSetting.new(tr("Enable glow"), true if on_high_end() else false), +			"grass_amount": RangeSetting.new(tr("3D grass amount per grass tile"), 16 if on_high_end() else 0, 0, 32, false), +			"lq_trees": ToggleSetting.new(tr("Low-poly trees"), false if on_high_end() else true), +			"ui_blur": ToggleSetting.new(tr("Enable UI blur"), true) +		}), +		SettingsCategory.new(tr("Audio"), "audio", { +			"master_volume": RangeSetting.new(tr("Master Volume"), 0, -30, 0), +			"music_volume": RangeSetting.new(tr("Music Volume"), 0, -30, 0), +			"sfx_volume": RangeSetting.new(tr("SFX Volume"), 0, -30, 0), +		}), +		SettingsCategory.new(tr("Other"), "other", { +			"server_binary": TextSetting.new(tr("Server binary (leave empty to search PATH)"), "", tr("Enter path")), +			"server_data": TextSetting.new(tr("Server data directory (leave empty to auto-detect)"), "", tr("Enter path")), +			"debug_info": ToggleSetting.new(tr("Display debug info (Framerate, etc.)"), false), +		}) +	] +# Profile and settings are stored in a Dictionary[String, GameSetting] +# Unlike the default settings, the settings dictionary is not split into categories.  var profile: Dictionary  var settings: Dictionary @@ -262,7 +274,10 @@ func load_dict(path: String, default: Dictionary) -> Dictionary:  	return saved_dict  func load_settings(path: String): -	settings = default_settings +	for category: SettingsCategory in default_settings: +		for k: String in category.settings.keys(): +			settings[k] = category.settings[k] +	  	if not FileAccess.file_exists(path):  		print("Skip settings load")  		return @@ -270,11 +285,9 @@ func load_settings(path: String):  	var saved_dict = f.get_var()  	if saved_dict != null and saved_dict is Dictionary: -		for k in default_settings.keys(): -			var setting: GameSetting = default_settings[k] -			if saved_dict.has(k) and typeof(setting.get_value()) == typeof(saved_dict[k]): -				setting.set_value(saved_dict[k]) -			settings[k] = setting +		for k in settings.keys(): +			if saved_dict.has(k) and typeof(settings[k].get_value()) == typeof(saved_dict[k]): +				settings[k].set_value(saved_dict[k])  	save_settings() # Save updated keys | 
