package com.cookbook.ashley;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.ashley.core.Engine;
import com.badlogic.ashley.core.Entity;
import com.badlogic.ashley.core.EntitySystem;
import com.badlogic.ashley.core.Family;
import com.badlogic.ashley.utils.ImmutableArray;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.OrthographicCamera;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.math.Vector2;
public class RenderSystem extends EntitySystem {
private ImmutableArray<Entity> entities;
private SpriteBatch batch;
private OrthographicCamera camera;
private ComponentMapper<TransformComponent> tm = ComponentMapper.getFor(TransformComponent.class);
private ComponentMapper<TextureComponent> vm = ComponentMapper.getFor(TextureComponent.class);
private ComponentMapper<SizeComponent> sm = ComponentMapper.getFor(SizeComponent.class);
public RenderSystem(OrthographicCamera camera){
batch = new SpriteBatch();
this.camera = camera;
}
@Override
public void addedToEngine(Engine engine) {
entities = engine.getEntitiesFor(Family.all(TransformComponent.class, TextureComponent.class, SizeComponent.class).get());
}
@Override
public void update(float deltaTime) {
camera.update();
batch.begin();
batch.setProjectionMatrix(camera.combined);
for (int i = 0; i < entities.size(); ++i) {
Entity e = entities.get(i);
TransformComponent transform = tm.get(e);
TextureComponent visual = vm.get(e);
SizeComponent size = sm.get(e);
batch.draw(visual.region,
transform.pos.x, transform.pos.y,
size.width*.5f, size.height*.5f,
size.width, size.height,
transform.scale.x, transform.scale.y,
transform.rotation);
}
batch.end();
}
}