Scene serialization progress

This commit is contained in:
2024-01-21 20:56:04 +01:00
parent 62e0e013f1
commit 8b82e83c60
5 changed files with 20 additions and 11 deletions

View File

@@ -6,10 +6,10 @@ namespace DaggerFramework.SceneGraph
{ {
public class Entity public class Entity
{ {
public EntityLayer? Layer { get; set; } [JsonIgnore] public EntityLayer? Layer { get; set; }
public InputHandler Input => Layer!.Scene.Input; [JsonIgnore] public InputHandler Input => Layer!.Scene.Input;
public AudioBackend Audio => Layer!.Scene.Audio; [JsonIgnore] public AudioBackend Audio => Layer!.Scene.Audio;
public Renderer Renderer => Layer!.Scene.Renderer; [JsonIgnore] public Renderer Renderer => Layer!.Scene.Renderer;
public int Id { get; set; } public int Id { get; set; }
public void Start() => OnStart(); public void Start() => OnStart();

View File

@@ -6,7 +6,7 @@ namespace DaggerFramework.SceneGraph
{ {
public class EntityLayer : Layer public class EntityLayer : Layer
{ {
[JsonInclude] public List<Entity> Entities { get; set; } public List<Entity> Entities { get; set; }
public Camera2d? CurrentCamera { get; set; } public Camera2d? CurrentCamera { get; set; }
public EntityLayer(List<Entity> entities) public EntityLayer(List<Entity> entities)
@@ -105,4 +105,12 @@ namespace DaggerFramework.SceneGraph
} }
private List<Camera2d> _cameraEntities = new(); private List<Camera2d> _cameraEntities = new();
} }
[JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(EntityLayer))]
[JsonSerializable(typeof(Entity))]
[JsonSerializable(typeof(List<Entity>))]
internal partial class EntityLayerContext : JsonSerializerContext
{
}
} }

View File

@@ -13,6 +13,10 @@ namespace DaggerFramework.SceneGraph
[JsonSourceGenerationOptions(WriteIndented = true)] [JsonSourceGenerationOptions(WriteIndented = true)]
[JsonSerializable(typeof(SerializedScene))] [JsonSerializable(typeof(SerializedScene))]
[JsonSerializable(typeof(Dictionary<string, Layer>))]
[JsonSerializable(typeof(Entity2d))]
[JsonSerializable(typeof(Layer))]
[JsonSerializable(typeof(EntityLayer))]
internal partial class SerializedSceneContext : JsonSerializerContext internal partial class SerializedSceneContext : JsonSerializerContext
{ {

View File

@@ -39,12 +39,11 @@ namespace DaggerFramework.SceneGraph
Layers = _layers Layers = _layers
}; };
var sourceGenOptions = new JsonSerializerOptions
serializedScene.Buffer = JsonSerializer.SerializeToUtf8Bytes(serializedScene, new JsonSerializerOptions
{ {
TypeInfoResolver = SerializedSceneContext.Default TypeInfoResolver = SerializedSceneContext.Default
}; });
serializedScene.Buffer = JsonSerializer.SerializeToUtf8Bytes(serializedScene, typeof(SerializedScene), sourceGenOptions);
serializedScene.BufferSize = serializedScene.Buffer.LongLength; serializedScene.BufferSize = serializedScene.Buffer.LongLength;
return true; return true;

View File

@@ -5,8 +5,6 @@ using DaggerFramework.Rendering;
using DaggerFramework.Audio; using DaggerFramework.Audio;
using DaggerFramework.Resources; using DaggerFramework.Resources;
using DaggerFramework.SceneGraph; using DaggerFramework.SceneGraph;
using System.Text.Json;
using System.Text.Json.Serialization;
public class TestGame : Game public class TestGame : Game