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);
}
}
}