Files
mrgameeng/src/MrGameEng.Graphics/Tilemaps/SceneTilemapExtensions.cs
T

36 lines
1.1 KiB
C#

using MrGameEng.Core;
using MrGameEng.Graphics;
namespace MrGameEng.Tilemaps;
/// <summary>Wires the tilemaps module into a <see cref="Scene"/>.</summary>
public static class SceneTilemapExtensions
{
/// <summary>
/// Adds <see cref="TilemapRenderSystem"/> to the scene's draw phase, right before the
/// renderer flush. Call from <c>OnLoad</c> after <c>UseRenderer2D()</c>.
/// </summary>
public static void UseTilemaps(this Scene scene)
{
var renderer =
scene.Context.Services.GetOrDefault<Renderer2D>()
?? throw new InvalidOperationException(
"UseTilemaps requires UseRenderer2D to be called first."
);
var systems = scene.DrawSystems.ChildSystems;
for (var i = 0; i < systems.Count; i++)
{
if (systems[i] is RenderFlushSystem)
{
scene.DrawSystems.Insert(i, new TilemapRenderSystem(renderer));
return;
}
}
throw new InvalidOperationException(
"RenderFlushSystem not found (is UseRenderer2D wired on this scene?)."
);
}
}