using System.Reflection; using UnityEngine; namespace Unity.VisualScripting { public sealed class ProjectSettingMetadata : PluginConfigurationItemMetadata { public ProjectSettingMetadata(PluginConfiguration configuration, MemberInfo member, Metadata parent) : base(configuration, member, parent) { } public override bool exists => storage != null && storage.ContainsKey(key); private DictionaryAsset storage => configuration.projectSettingsAsset; public override void Load() { if (!definedType.IsAssignableFrom(valueType)) { Debug.LogWarning($"Failed to cast project setting '{configuration.plugin.id}.{key}' as '{definedType.CSharpFullName()}', reverting to default."); value = defaultValue; } value = storage[key]; } internal override void SaveImmediately(bool immediately = true) { if (storage == null) configuration.LoadOrCreateProjectSettingsAsset(); if (storage.ContainsKey(key)) { storage[key] = value; } else { storage.Add(key, value); } configuration.SaveProjectSettingsAsset(immediately); } public override void Save() { SaveImmediately(false); } } }