using System.Drawing; using System.Numerics; using DaggerFramework.Audio; using DaggerFramework.Rendering; namespace DaggerFramework { 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 double DeltaTime => Renderer.GetFrameTime(); public Scene(Renderer renderer, InputHandler input, AudioBackend audioBackend) { _renderer = renderer; _input = input; _audioBackend = audioBackend; _layers = new Dictionary(); } 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); } public bool ShouldStop() => Renderer.WindowShouldClose(); private void Draw() { Renderer.BeginFrame(); Renderer.ClearBackground(Color.Black); foreach (var layer in _layers.Values) { layer.Draw(in _renderer); } Renderer.EndFrame(); Audio.Update(); } private void SetupRenderer() { Renderer.CreateWindow("Game", new Vector2(1280, 720)); Renderer.Initialize(new RendererSettings { Msaa = Msaa.Msaa4x, UseVSync = true }); Renderer.SetTargetFps(60); } private Dictionary _layers; private Renderer _renderer; private AudioBackend _audioBackend; private InputHandler _input; } }