package fi.hbp.angr.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputMultiplexer; import com.badlogic.gdx.Screen; import com.badlogic.gdx.graphics.GL10; import fi.hbp.angr.BodyFactory; import fi.hbp.angr.G; import fi.hbp.angr.GdxGame; import fi.hbp.angr.Preloadable; import fi.hbp.angr.hud.Hud; import fi.hbp.angr.hud.HudGameStateDisplay; import fi.hbp.angr.models.levels.Level; import fi.hbp.angr.stage.GameStage; /** * Screen used to show the actual game contents. */ public class GameScreen implements Screen, Preloadable { /** * GdxGame reference. */ private final GdxGame game; /** * Game stage where game is played. */ private GameStage stage; /** * Current level. */ private Level level; /** * HUD shown on screen. */ private final Hud hud = new Hud(); /** * Start the game. * @param game the GdxGame. */ public GameScreen(GdxGame game) { this.game = game; } @Override public void preload() { BodyFactory.preload(); level.preload(); } @Override public void unload() { level.unload(); } /** * Load next level. * @param level next level to be loaded. */ public void loadLevel(Level level) { this.level = level; Screen splash = new SplashScreen(game, this, 0.5f); game.setScreen(splash); } @Override public void render(float delta) { Gdx.gl.glClearColor(0f, 0.75f, 1f, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.act(delta); stage.draw(); hud.draw(); if (stage.hasGameEnded()) { game.endOfGame(stage.getGameState()); } if (Gdx.input.isKeyPressed(G.pauseButton) || Gdx.input.isKeyPressed(G.pauseButton1)) { game.showPauseScreen(this); } } @Override public void resize(int width, int height) { stage.setViewport(width * 2, height * 2, true); hud.resize(width, height); } @Override public void create() { int xsize = Gdx.graphics.getWidth() * 2; int ysize = Gdx.graphics.getHeight() * 2; stage = new GameStage(xsize, ysize, level.getLevelWidth()); /* Create input multiplexer */ InputMultiplexer inputMultiplexer = new InputMultiplexer(); Gdx.input.setInputProcessor(inputMultiplexer); inputMultiplexer.addProcessor(stage); /* Create score counter for HUD */ HudGameStateDisplay score; score = new HudGameStateDisplay(stage.getGameState()); hud.clear(); hud.addActor(score); /* Create and add map/level actor */ BodyFactory bf = new BodyFactory(stage, inputMultiplexer); level.levelCreate(bf, stage.getGameState()); stage.addActor(level); } @Override public void show() { level.show(); } @Override public void hide() { level.hide(); } @Override public void pause() { game.showPauseScreen(this); } @Override public void resume() { } @Override public void dispose() { this.unload(); stage.dispose(); this.unload(); } }