Files
Voile/DaggerFramework/Source/SceneGraph/Scene.cs
2024-01-20 19:25:05 +01:00

88 lines
2.3 KiB
C#

using System.Numerics;
using DaggerFramework.Audio;
using DaggerFramework.Rendering;
using DaggerFramework.Resources;
namespace DaggerFramework.SceneGraph
{
public class Scene : IMainLoop
{
public Renderer Renderer { get => _renderer; set => _renderer = value; }
public InputHandler Input { get => _input; set => _input = value; }
public AudioBackend Audio => _audioBackend;
public ResourceManager ResourceManager => _resourceManager;
public double DeltaTime => Renderer.GetFrameTime();
public bool ShouldRun => Renderer.ShouldRun;
public Scene(Renderer renderer, InputHandler input, AudioBackend audioBackend, ResourceManager resourceManager)
{
_renderer = renderer;
_input = input;
_audioBackend = audioBackend;
_resourceManager = resourceManager;
_layers = new Dictionary<string, Layer>();
}
public Scene(Renderer renderer)
{
_renderer = renderer;
}
public void Init() => SetupRenderer();
public void Start()
{
foreach (var layer in _layers.Values)
{
layer.Input = _input;
layer.Start();
}
}
public void Update()
{
foreach (var layer in _layers)
{
layer.Value.Update(DeltaTime);
}
Draw();
}
public void AddLayer(string name, Layer layer)
{
layer.Scene = this;
_layers.Add(name, layer);
}
private void Draw()
{
Renderer.BeginFrame();
Renderer.ClearBackground(Color.Black);
foreach (var layer in _layers.Values)
{
layer.BeginDraw(_renderer);
layer.Draw(_renderer);
layer.EndDraw(_renderer);
}
Renderer.EndFrame();
Audio.Update();
}
private void SetupRenderer()
{
Renderer.Initialize(new RendererSettings { Msaa = Msaa.Msaa4x, UseVSync = true });
}
private Dictionary<string, Layer> _layers;
private Renderer _renderer;
private AudioBackend _audioBackend;
private InputHandler _input;
private ResourceManager _resourceManager;
}
}