using System.Text.Json; using System.Text.Json.Serialization; namespace Ghost.Editor.Core.AssetHandle; /// /// Metadata for an asset, stored in .gmeta files. /// Contains GUID, version, tags, and importer settings. /// FileHash and Dependencies are stored in the database only, not in .gmeta files. /// internal class AssetMeta { /// /// Unique identifier for the asset. /// [JsonPropertyName("Guid")] public Guid Guid { get; set; } /// /// Version of the asset pipeline (not the asset itself). /// Used for migration when the asset pipeline is redesigned. /// [JsonPropertyName("Version")] public int Version { get; set; } = 1; /// /// Tags for categorizing and searching assets. /// [JsonPropertyName("Tags")] public List Tags { get; set; } = new(); /// /// Importer settings specific to this asset. /// The key is the importer type name, and the value is a JSON element containing the settings. /// Use GetImporterSettings<T>() and SetImporterSettings<T>() to work with strongly-typed settings. /// [JsonPropertyName("ImporterSettings")] public Dictionary ImporterSettings { get; set; } = new(); /// /// Get importer settings of a specific type. /// public T? GetImporterSettings(string importerName) where T : ImporterSettings { if (ImporterSettings.TryGetValue(importerName, out var element)) { return element.Deserialize(); } return null; } /// /// Set importer settings. /// public void SetImporterSettings(string importerName, T settings) where T : ImporterSettings { var element = JsonSerializer.SerializeToElement(settings); ImporterSettings[importerName] = element; } /// /// Set importer settings (non-generic overload). /// internal void SetImporterSettings(string importerName, ImporterSettings settings) { var element = JsonSerializer.SerializeToElement(settings, settings.GetType()); ImporterSettings[importerName] = element; } }