ColorRunner/core/src/de/samdev/colorrunner/game/renderer/CRGameRenderer.java

102 lines
3.8 KiB
Java

package de.samdev.colorrunner.game.renderer;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer.ShapeType;
import com.badlogic.gdx.math.Vector2;
import com.badlogic.gdx.math.Vector3;
import de.samdev.colorrunner.CRGame;
import de.samdev.colorrunner.game.world.CRGameWorld;
import de.samdev.colorrunner.game.world.entities.CRGameEntity;
import de.samdev.colorrunner.game.world.entities.MovingEntity;
import de.samdev.colorrunner.game.world.map.provider.EndlessMapProvider;
import de.samdev.colorrunner.game.world.map.provider.StaticMapProvider;
public class CRGameRenderer extends AbstractGameRenderer {
private CRGameWorld gameworld;
public double avgExecTime = 0;
public CRGameRenderer(CRGameWorld _world, float width, float height) {
super(width, height);
gameworld = _world;
}
@Override
public void doRender() {
updateCameraOffset(gameworld.player.bounds.x + gameworld.player.bounds.width/2);
gameworld.camViewBoundaries = getCamViewRectangle();
renderMain();
renderHud();
if (CRGame.DEBUG) renderDebugBoxes();
if (CRGame.DEBUG) renderDebugInfo();
}
private void renderDebugBoxes() {
shapeRenderer.begin(ShapeType.Line);
shapeRenderer.setColor(1, 0, 1, 1);
for (CRGameEntity e : gameworld.entities) {
shapeRenderer.rect(e.bounds.x, e.bounds.y, e.bounds.width, e.bounds.height);
if (e instanceof MovingEntity) {
MovingEntity me = (MovingEntity) e;
shapeRenderer.line(me.bounds.getCenter(new Vector2()), me.bounds.getCenter(new Vector2()).add(me.getVelocity().x / 15f, 0));
shapeRenderer.line(me.bounds.getCenter(new Vector2()), me.bounds.getCenter(new Vector2()).add(0 , me.getVelocity().y / 15f));
}
}
shapeRenderer.end();
}
private void renderMain() {
spriteBatch.begin();
for (CRGameEntity e : gameworld.entities) {
TextureRegion tr = new TextureRegion(e.getTexture());
spriteBatch.draw(new TextureRegion(e.getTexture()),
e.bounds.x + (e.bounds.width - tr.getRegionWidth())/2, e.bounds.y + (e.bounds.height - tr.getRegionHeight())/2,
tr.getRegionWidth()/2, tr.getRegionHeight()/2,
tr.getRegionWidth(), tr.getRegionHeight(),
e.visualZoomX, e.visualZoomY,
e.visualRotation, true);
}
spriteBatch.enableBlending();
Vector3 cw_coords = cam.unproject(new Vector3(Gdx.graphics.getWidth(), 0, 0));
spriteBatch.draw(CRAssets.TEX_COLORWHEEL, cw_coords.x - 70, cw_coords.y - 70, 64, 64);
spriteBatch.disableBlending();
spriteBatch.end();
}
private void renderDebugInfo() {
beginDebug();
renderDebug("FPS: " + (int)gameworld.fps.getFPS());
renderDebug("Entitys: " + gameworld.entities.size());
renderDebug("ExecTime: " + (int)(avgExecTime*100) / 100.0+ " / " + (int)(10000/gameworld.fps.getFPS())/10.0 + "ms (" + (int)((avgExecTime/(1000/gameworld.fps.getFPS()))*1000) / 10.0 + "%)");
renderDebug("CameraOffset: (" + (int)cam.position.x + "|" + (int)cam.position.y + ")");
renderDebug("Player(x): " + (int)gameworld.player.bounds.x);
if (gameworld.mapprovider instanceof EndlessMapProvider)
renderDebug("Procedural Piece: \"" + ((EndlessMapProvider)gameworld.mapprovider).getCurrentSection(gameworld.player.bounds).piece_name + "\"");
else if (gameworld.mapprovider instanceof StaticMapProvider)
renderDebug("Level Progress: " + ((StaticMapProvider)gameworld.mapprovider).mapPlayerPos + "/" + ((StaticMapProvider)gameworld.mapprovider).mapMaxWidth);
endDebug();
}
private void renderHud(){
beginHud();
renderHud("Points:", 10);
renderHud("Time:", (Gdx.graphics.getWidth() / 2) - 10);
if (gameworld.mapprovider instanceof EndlessMapProvider)renderDebug("Procedural Piece: \"" + ((EndlessMapProvider)gameworld.mapprovider).getCurrentSection(gameworld.player.bounds).piece_name + "\"");
endHud();
}
}