36 lines
1.1 KiB
GDScript
36 lines
1.1 KiB
GDScript
@tool
|
|
extends RefCounted
|
|
class_name PresetApplier
|
|
|
|
var presets_path: String
|
|
|
|
func _init(p_path: String) -> void:
|
|
presets_path = p_path
|
|
|
|
func get_preset_key(is_active: bool) -> String:
|
|
return "on" if is_active else "off"
|
|
|
|
func apply_preset(editor_settings: EditorSettings, is_active: bool) -> void:
|
|
var data: Dictionary = JsonUtils.load_dict_from_file(presets_path)
|
|
if data.is_empty():
|
|
push_warning("Failed to load presets: %s" % presets_path)
|
|
return
|
|
|
|
var new_preset_key := get_preset_key(is_active)
|
|
var previous_preset_key := get_preset_key(not is_active)
|
|
|
|
if not data.has(new_preset_key):
|
|
push_warning("Preset '%s' not found in presets.json" % new_preset_key)
|
|
return
|
|
|
|
var new_preset := data[new_preset_key] as Dictionary
|
|
# Reset keys from previous preset that are missing in the new preset
|
|
if data.has(previous_preset_key):
|
|
var previous_preset := data[previous_preset_key] as Dictionary
|
|
for key in previous_preset:
|
|
if not new_preset.has(key):
|
|
editor_settings.set_setting(str(key), editor_settings.property_get_revert(str(key)))
|
|
# Apply the new preset
|
|
for key in new_preset:
|
|
editor_settings.set_setting(str(key), new_preset[key])
|