Merge remote-tracking branch 'origin/master' into 1.9

This commit is contained in:
Wojtek Figat
2024-08-05 11:08:51 +02:00
62 changed files with 9529 additions and 2700 deletions

View File

@@ -429,6 +429,60 @@ namespace FlaxEngine.Json
}
}
internal sealed class JsonAssetReferenceConverter : JsonConverter
{
/// <inheritdoc />
public override unsafe void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer)
{
var asset = (JsonAsset)value.GetType().GetField("Asset").GetValue(value);
var id = asset?.ID ?? Guid.Empty;
writer.WriteValue(JsonSerializer.GetStringID(&id));
}
/// <inheritdoc />
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer)
{
var result = Activator.CreateInstance(objectType);
if (reader.TokenType == JsonToken.String)
{
JsonSerializer.ParseID((string)reader.Value, out var id);
var asset = Content.LoadAsync<JsonAsset>(id);
objectType.GetField("Asset").SetValue(result, asset);
}
else if (reader.TokenType == JsonToken.StartObject)
{
// [Deprecated on 26.07.2024, expires on 26.07.2026]
while (reader.Read() && reader.TokenType != JsonToken.EndObject)
{
switch (reader.TokenType)
{
case JsonToken.PropertyName:
{
var propertyName = (string)reader.Value;
reader.Read();
if (propertyName == "Asset" && reader.TokenType == JsonToken.String)
{
JsonSerializer.ParseID((string)reader.Value, out var id);
var asset = Content.LoadAsync<JsonAsset>(id);
objectType.GetField("Asset").SetValue(result, asset);
}
break;
}
}
}
}
return result;
}
/// <inheritdoc />
public override bool CanConvert(Type objectType)
{
return objectType.Name.StartsWith("JsonAssetReference");
}
}
/*
/// <summary>
/// Serialize Guid values using `N` format