com.uwsoft.editor.renderer.systems.render.logic.TexturRegionDrawLogic Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of overlap2d-runtime-libgdx Show documentation
Show all versions of overlap2d-runtime-libgdx Show documentation
overlap2d-runtime-libgdx provides functionality to load, manipulate and render scenes generated by Overlap2D.
The newest version!
package com.uwsoft.editor.renderer.systems.render.logic;
import com.badlogic.ashley.core.ComponentMapper;
import com.badlogic.ashley.core.Entity;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch;
import com.badlogic.gdx.math.Vector2;
import com.uwsoft.editor.renderer.components.DimensionsComponent;
import com.uwsoft.editor.renderer.components.ShaderComponent;
import com.uwsoft.editor.renderer.components.TextureRegionComponent;
import com.uwsoft.editor.renderer.components.TintComponent;
import com.uwsoft.editor.renderer.components.TransformComponent;
public class TexturRegionDrawLogic implements Drawable {
private ComponentMapper tintComponentComponentMapper;
private ComponentMapper textureRegionMapper;
private ComponentMapper transformMapper;
private ComponentMapper dimensionsComponentComponentMapper;
private ComponentMapper shaderComponentMapper;
public TexturRegionDrawLogic() {
tintComponentComponentMapper = ComponentMapper.getFor(TintComponent.class);
textureRegionMapper = ComponentMapper.getFor(TextureRegionComponent.class);
transformMapper = ComponentMapper.getFor(TransformComponent.class);
dimensionsComponentComponentMapper = ComponentMapper.getFor(DimensionsComponent.class);
shaderComponentMapper = ComponentMapper.getFor(ShaderComponent.class);
}
@Override
public void draw(Batch batch, Entity entity) {
TextureRegionComponent entityTextureRegionComponent = textureRegionMapper.get(entity);
if(shaderComponentMapper.has(entity)){
ShaderComponent shaderComponent = shaderComponentMapper.get(entity);
if(shaderComponent.getShader() != null) {
batch.setShader(shaderComponent.getShader());
//System.out.println("asdasdsdas" + new Vector2(entityTextureRegionComponent.region.getRegionX(), entityTextureRegionComponent.region.getRegionY()));
GL20 gl = Gdx.gl20;
int error;
if ((error = gl.glGetError()) != GL20.GL_NO_ERROR) {
Gdx.app.log("opengl", "Error: " + error);
Gdx.app.log("opengl", shaderComponent.getShader().getLog());
//throw new RuntimeException( ": glError " + error);
}
}
}
if(entityTextureRegionComponent.polygonSprite != null) {
// if(entityTextureRegionComponent.isRepeat) {
drawTiledPolygonSprite(batch, entity);
// } else {
// drawPolygonSprite(batch, entity);
// }
} else {
drawSprite(batch, entity);
}
if(shaderComponentMapper.has(entity)){
batch.setShader(null);
}
}
public void drawSprite(Batch batch, Entity entity) {
TintComponent tintComponent = tintComponentComponentMapper.get(entity);
TransformComponent entityTransformComponent = transformMapper.get(entity);
TextureRegionComponent entityTextureRegionComponent = textureRegionMapper.get(entity);
DimensionsComponent dimensionsComponent = dimensionsComponentComponentMapper.get(entity);
batch.setColor(tintComponent.color);
batch.draw(entityTextureRegionComponent.region,
entityTransformComponent.x, entityTransformComponent.y,
entityTransformComponent.originX, entityTransformComponent.originY,
dimensionsComponent.width, dimensionsComponent.height,
entityTransformComponent.scaleX, entityTransformComponent.scaleY,
entityTransformComponent.rotation);
}
public void drawPolygonSprite(Batch batch, Entity entity) {
TintComponent tintComponent = tintComponentComponentMapper.get(entity);
TransformComponent entityTransformComponent = transformMapper.get(entity);
TextureRegionComponent entityTextureRegionComponent = textureRegionMapper.get(entity);
DimensionsComponent dimensionsComponent = dimensionsComponentComponentMapper.get(entity);
entityTextureRegionComponent.polygonSprite.setPosition(entityTransformComponent.x, entityTransformComponent.y);
entityTextureRegionComponent.polygonSprite.setRotation(entityTransformComponent.rotation);
entityTextureRegionComponent.polygonSprite.setOrigin(entityTransformComponent.originX, entityTransformComponent.originY);
entityTextureRegionComponent.polygonSprite.setColor(tintComponent.color);
entityTextureRegionComponent.polygonSprite.draw((PolygonSpriteBatch) batch);
}
public void drawTiledPolygonSprite(Batch batch, Entity entity) {
TintComponent tintComponent = tintComponentComponentMapper.get(entity);
TransformComponent entityTransformComponent = transformMapper.get(entity);
TextureRegionComponent entityTextureRegionComponent = textureRegionMapper.get(entity);
batch.getShader().setUniformi("isRepeat", 1);
batch.getShader().setUniformf("atlasCoord", new Vector2(entityTextureRegionComponent.region.getU(), entityTextureRegionComponent.region.getV()));
batch.getShader().setUniformf("atlasSize", new Vector2(entityTextureRegionComponent.region.getU2()-entityTextureRegionComponent.region.getU(), entityTextureRegionComponent.region.getV2()-entityTextureRegionComponent.region.getV()));
batch.setColor(tintComponent.color);
entityTextureRegionComponent.polygonSprite.setOrigin(entityTransformComponent.originX, entityTransformComponent.originY);
entityTextureRegionComponent.polygonSprite.setPosition(entityTransformComponent.x, entityTransformComponent.y);
entityTextureRegionComponent.polygonSprite.setRotation(entityTransformComponent.rotation);
entityTextureRegionComponent.polygonSprite.draw((PolygonSpriteBatch) batch);
}
}