82 lines
2.2 KiB
C#
Executable File
82 lines
2.2 KiB
C#
Executable File
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<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);
|
|
}
|
|
|
|
public bool ShouldStop() => Renderer.WindowShouldClose();
|
|
|
|
private void Draw()
|
|
{
|
|
Renderer.BeginFrame();
|
|
Renderer.ClearBackground(Color.Black);
|
|
foreach (var layer in _layers.Values)
|
|
{
|
|
layer.Draw(ref _renderer);
|
|
}
|
|
Renderer.EndFrame();
|
|
|
|
Audio.Update();
|
|
}
|
|
|
|
private void SetupRenderer()
|
|
{
|
|
Renderer.CreateWindow("RogueMine", new Vector2(1280, 720));
|
|
Renderer.Initialize(new RendererSettings { Msaa = Msaa.Msaa4x, UseVSync = true });
|
|
Renderer.SetTargetFps(60);
|
|
}
|
|
|
|
private Dictionary<string, Layer> _layers;
|
|
private Renderer _renderer;
|
|
private AudioBackend _audioBackend;
|
|
private InputHandler _input;
|
|
}
|
|
} |