Small ResourceManager refactor, add ResourceSaver<T>.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
using System.Numerics;
|
||||
using System.Text.Json;
|
||||
using DaggerFramework.Audio;
|
||||
using DaggerFramework.Rendering;
|
||||
using DaggerFramework.Resources;
|
||||
@@ -16,20 +16,43 @@ namespace DaggerFramework.SceneGraph
|
||||
public double DeltaTime => _renderer.FrameTime;
|
||||
public bool ShouldRun => Renderer.ShouldRun;
|
||||
|
||||
public Scene(Renderer renderer, InputHandler input, AudioBackend audioBackend, ResourceManager resourceManager)
|
||||
public Scene(SceneSettings settings)
|
||||
{
|
||||
_renderer = renderer;
|
||||
_input = input;
|
||||
_audioBackend = audioBackend;
|
||||
_resourceManager = resourceManager;
|
||||
|
||||
_layers = new Dictionary<string, Layer>();
|
||||
_renderer = settings.Renderer;
|
||||
_input = settings.InputHandler;
|
||||
_audioBackend = settings.AudioBackend;
|
||||
_resourceManager = settings.ResourceManager;
|
||||
}
|
||||
|
||||
public Scene(Renderer renderer, ResourceManager resourceManager)
|
||||
public static Scene FromSerialized(SerializedScene serializedScene, SceneSettings settings)
|
||||
{
|
||||
_renderer = renderer;
|
||||
_resourceManager = resourceManager;
|
||||
var scene = new Scene(settings);
|
||||
scene.WithLayers(serializedScene.Layers);
|
||||
|
||||
return scene;
|
||||
}
|
||||
|
||||
public bool TrySerialize(out SerializedScene serializedScene)
|
||||
{
|
||||
serializedScene = new SerializedScene(string.Empty, new byte[] { })
|
||||
{
|
||||
Layers = _layers
|
||||
};
|
||||
|
||||
var sourceGenOptions = new JsonSerializerOptions
|
||||
{
|
||||
TypeInfoResolver = SerializedSceneContext.Default
|
||||
};
|
||||
|
||||
serializedScene.Buffer = JsonSerializer.SerializeToUtf8Bytes(serializedScene, typeof(SerializedScene), sourceGenOptions);
|
||||
serializedScene.BufferSize = serializedScene.Buffer.LongLength;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void WithLayers(Dictionary<string, Layer> layers)
|
||||
{
|
||||
_layers = layers;
|
||||
}
|
||||
|
||||
public void Init() => SetupRenderer();
|
||||
@@ -97,4 +120,12 @@ namespace DaggerFramework.SceneGraph
|
||||
private InputHandler? _input;
|
||||
private ResourceManager _resourceManager;
|
||||
}
|
||||
|
||||
public struct SceneSettings
|
||||
{
|
||||
public Renderer Renderer { get; set; }
|
||||
public AudioBackend AudioBackend { get; set; }
|
||||
public InputHandler InputHandler { get; set; }
|
||||
public ResourceManager ResourceManager { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user