package net.onedaybeard.dominatrix.demo.system.render;
import net.onedaybeard.dominatrix.demo.component.Renderable;
import net.onedaybeard.dominatrix.demo.component.Rotation;
import net.onedaybeard.dominatrix.demo.component.Tint;
import com.artemis.Aspect;
import com.artemis.ComponentMapper;
import com.artemis.Entity;
import com.artemis.systems.EntityProcessingSystem;
import com.badlogic.gdx.graphics.Color;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public final class SpriteRenderSystem extends EntityProcessingSystem
{
private SpriteBatch batch;
private OrthographicCamera camera;
private ComponentMapper<Renderable> renderableMapper;
private ComponentMapper<Rotation> rotationMapper;
private ComponentMapper<Tint> tintMapper;
private Color defaultTint;
@SuppressWarnings("unchecked")
public SpriteRenderSystem(SpriteBatch batch, OrthographicCamera camera)
{
super(Aspect.getAspectForAll(Renderable.class));
this.batch = batch;
this.camera = camera;
defaultTint = Color.WHITE;
}
@Override
protected void initialize()
{
renderableMapper = world.getMapper(Renderable.class);
rotationMapper = world.getMapper(Rotation.class);
tintMapper = world.getMapper(Tint.class);
}
@Override
protected void begin()
{
batch.setProjectionMatrix(camera.combined);
batch.begin();
}
@Override
protected void process(Entity e)
{
Renderable renderable = renderableMapper.get(e);
Sprite sprite = renderable.getSprite();
Rotation rotationComponent = rotationMapper.getSafe(e);
if (rotationComponent != null)
sprite.setRotation(rotationComponent.degrees());
Tint tint = tintMapper.getSafe(e);
sprite.setColor((tint != null ? tint.color() : defaultTint));
sprite.draw(batch);
}
@Override
protected void end()
{
batch.end();
}
}