using System.Text.Json.Nodes; using System.Text.Json.Serialization; namespace Sandbox.Resources; /// /// A JSON definition of an embedded resource. This is a resource that can be either standalone (in a .vtex file) or /// embedded in a GameResource's Json data. /// /// When it's detected in a GameResource we will create the named compiler and create the resource. When compiling the /// GameResource this can optionally create a compiled version of the resource on disk. /// /// When we compile a regular resource that contains this $compiler structure, it operates like any other compile, except /// it's totally managed by c# instead of resourcecompiler. /// public struct EmbeddedResource { /// /// The name of the ResourceCompiler to use /// [JsonPropertyName( "$compiler" )] public string ResourceCompiler { get; set; } /// /// The name of the ResourceGenerator that created this resource. This is basically a sub-compiler. /// [JsonPropertyName( "$source" )] public string ResourceGenerator { get; set; } /// /// Sometimes we'll want to embed a child class of a resource /// [JsonPropertyName( $"$type" ), JsonIgnore( Condition = JsonIgnoreCondition.WhenWritingNull )] public string TypeName { get; set; } /// /// Data that is serialized/deserialized from the ResourceGenerator /// [JsonPropertyName( "data" )] public JsonObject Data { get; set; } /// /// If this resource has been compiled to disk then this is the path to that resource. /// This avoids the need to generate this resource again. /// [JsonPropertyName( "compiled" )] public string CompiledPath { get; set; } }