mirror of
https://github.com/AlexMacocian/MonoGame.Extended.git
synced 2026-07-24 12:06:37 +00:00
50 lines
1.8 KiB
C#
50 lines
1.8 KiB
C#
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
using MonoGame.Extended.Entities.Components;
|
|
using MonoGame.Extended.Particles;
|
|
using MonoGame.Extended.Sprites;
|
|
|
|
namespace MonoGame.Extended.Entities.Systems
|
|
{
|
|
public class SpriteBatchSystem : ComponentSystem
|
|
{
|
|
private readonly Camera2D _camera;
|
|
private readonly SpriteBatch _spriteBatch;
|
|
|
|
public SpriteBatchSystem(GraphicsDevice graphicsDevice, Camera2D camera)
|
|
{
|
|
_camera = camera;
|
|
_spriteBatch = new SpriteBatch(graphicsDevice);
|
|
}
|
|
|
|
public Effect Effect { get; set; }
|
|
public RasterizerState RasterizerState { get; set; }
|
|
public DepthStencilState DepthStencilState { get; set; }
|
|
public SamplerState SamplerState { get; set; }
|
|
public BlendState BlendState { get; set; }
|
|
public SpriteSortMode SortMode { get; set; } = SpriteSortMode.Deferred;
|
|
|
|
public override void Draw(GameTime gameTime)
|
|
{
|
|
var spriteComponents = GetComponents<TransformableComponent<Sprite>>();
|
|
var particleEmitterComponents = GetComponents<TransformableComponent<ParticleEmitter>>();
|
|
var transformMatrix = _camera.GetViewMatrix();
|
|
|
|
_spriteBatch.Begin(SortMode, BlendState, SamplerState, DepthStencilState, RasterizerState, Effect, transformMatrix);
|
|
|
|
foreach (var spriteComponent in spriteComponents)
|
|
{
|
|
var sprite = spriteComponent.Target;
|
|
_spriteBatch.Draw(sprite);
|
|
}
|
|
|
|
foreach (var particleEmitterComponent in particleEmitterComponents)
|
|
{
|
|
var particleEmitter = particleEmitterComponent.Target;
|
|
_spriteBatch.Draw(particleEmitter);
|
|
}
|
|
|
|
_spriteBatch.End();
|
|
}
|
|
}
|
|
} |