package com.amaya.game; import com.amaya.game.entities.environment.Alien; import com.amaya.game.entities.environment.Asteroid; import com.amaya.game.entities.modifiers.CommandsFactory; import com.amaya.game.entities.modifiers.Mandate; import com.amaya.game.entities.modifiers.MoveTo; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.SpriteBatch; import com.badlogic.gdx.graphics.glutils.ShapeRenderer; import com.badlogic.gdx.math.Rectangle; import static com.amaya.game.Spacefish.Dimensions.ICON_HEIGHT; import static com.amaya.game.Spacefish.Dimensions.ICON_WIDTH; import static com.amaya.game.Spacefish.Dimensions.VIRTUAL_SCREEN_HEIGHT; import static com.amaya.game.Spacefish.Dimensions.VIRTUAL_SCREEN_WIDTH; /** Class responsible for rendering of the Entities states. */ public class GameRenderer { /* [ MEMBERS ] =========================================================================================================================================== */ /** Reference on controller. */ private final GameController mController; /* [ CONSTRUCTORS ] ====================================================================================================================================== */ public GameRenderer(final GameController controller) { mController = controller; } /* [ GET/SET METHODS ] =================================================================================================================================== */ /** Reference on controller. */ public GameController getController() { return mController; } /* [ IMPLEMENTATION & HELPERS ] ========================================================================================================================== */ private void drawAliens(final SpriteBatch batch) { for (Alien al : getController().getCurrentLevel().Aliens) { final Rectangle rc = al.Bounds; batch.draw(GameResources.getInstance().getAlien(al), rc.x, rc.y, ICON_WIDTH, ICON_HEIGHT); if (Spacefish.Debug.ALIEN_BEHAVIOR) { final MoveTo mtc = (MoveTo) CommandsFactory.moveTo(al); ShapeRenderer sr = getController().getGame().getDebugShapes(); sr.setProjectionMatrix(batch.getProjectionMatrix()); sr.setColor(Color.GREEN); sr.begin(ShapeRenderer.ShapeType.Line); sr.line(mtc.StartX, mtc.StartY, mtc.EndX, mtc.EndY); sr.circle(rc.x, rc.y, ICON_WIDTH / 4); sr.end(); } if (Spacefish.Debug.UI_BOUNDS) { batch.draw(GameResources.getInstance().getDebugBounds(), rc.x, rc.y, rc.width, rc.height); } } } private void drawAsteroids(final SpriteBatch batch) { for (Asteroid as : getController().getCurrentLevel().Asteroids) { final Rectangle rc = as.Bounds; batch.draw(GameResources.getInstance().getAsteroid(as), rc.x, rc.y, ICON_WIDTH, ICON_HEIGHT); if (Spacefish.Debug.ASTEROID_BEHAVIOR) { final MoveTo mtc = (MoveTo) CommandsFactory.moveTo(as); ShapeRenderer sr = getController().getGame().getDebugShapes(); sr.setProjectionMatrix(batch.getProjectionMatrix()); sr.setColor(Color.BLUE); sr.begin(ShapeRenderer.ShapeType.Line); sr.line(mtc.StartX, mtc.StartY, mtc.EndX, mtc.EndY); sr.circle(rc.x, rc.y, ICON_WIDTH / 4); sr.end(); } if (Spacefish.Debug.UI_BOUNDS) { batch.draw(GameResources.getInstance().getDebugBounds(), rc.x, rc.y, rc.width, rc.height); } } } private void drawFish(final SpriteBatch batch) { final Rectangle rc = getController().getGame().getFish().Bounds; batch.draw(GameResources.getInstance().getFish(), rc.x, rc.y, rc.width, rc.height); // DEBUG logic if (Spacefish.Debug.FISH_BEHAVIOR) { final MoveTo mtc = Mandate.findFirst(getController().getMandates(), MoveTo.class); if (null != mtc) { ShapeRenderer sr = getController().getGame().getDebugShapes(); sr.setProjectionMatrix(batch.getProjectionMatrix()); sr.setColor(Color.RED); sr.begin(ShapeRenderer.ShapeType.Line); sr.line(mtc.StartX, mtc.StartY, mtc.EndX, mtc.EndY); sr.circle(rc.x, rc.y, ICON_WIDTH / 4); sr.end(); } } if (Spacefish.Debug.UI_BOUNDS) { batch.draw(GameResources.getInstance().getDebugBounds(), rc.x, rc.y, rc.width, rc.height); } } private void drawState(final SpriteBatch batch) { if (GameController.KnownStates.PAUSED == getController().getState()) { final BitmapFont font = GameResources.getInstance().getFont(); final BitmapFont.TextBounds bounds = font.getBounds(Texts.PAUSED); font.draw(batch, Texts.PAUSED, (VIRTUAL_SCREEN_WIDTH - bounds.width) / 2, (VIRTUAL_SCREEN_HEIGHT - bounds.height) / 2); } } public void render(final SpriteBatch batch) { drawAsteroids(batch); drawAliens(batch); drawFish(batch); drawState(batch); } /* [ NESTED DECLARATIONS ] =============================================================================================================================== */ private interface Texts { String PAUSED = "Game Paused"; } }