package com.tacoid.pweekmini.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.InputProcessor; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.GLCommon; import com.badlogic.gdx.graphics.Texture; import com.badlogic.gdx.graphics.g2d.BitmapFont; import com.badlogic.gdx.graphics.g2d.TextureRegion; import com.badlogic.gdx.math.Vector2; import com.badlogic.gdx.scenes.scene2d.InputEvent; import com.badlogic.gdx.scenes.scene2d.InputListener; import com.badlogic.gdx.scenes.scene2d.Stage; import com.badlogic.gdx.scenes.scene2d.Touchable; import com.badlogic.gdx.scenes.scene2d.ui.Button; import com.badlogic.gdx.scenes.scene2d.ui.Image; import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable; import com.tacoid.pweek.Controller; import com.tacoid.pweek.MusicPlayer; import com.tacoid.pweekmini.PweekMini; import com.tacoid.pweek.SoundPlayer; import com.tacoid.pweek.IGameService.Achievement; import com.tacoid.pweek.Pweek.ScreenOrientation; import com.tacoid.pweek.ScoreManager.GameType; import com.tacoid.pweek.SoundPlayer.SoundType; import com.tacoid.pweekmini.actors.GameOverActor; import com.tacoid.pweek.actors.GridActor; import com.tacoid.pweekmini.actors.HighScoreActor; import com.tacoid.pweek.actors.MusicButtonActor; import com.tacoid.pweek.actors.NextPieceActor; import com.tacoid.pweekmini.actors.PauseMenu; import com.tacoid.pweekmini.actors.PortraitPanelActor; import com.tacoid.pweek.actors.ExplosionActor; import com.tacoid.pweek.actors.ScoreActor; import com.tacoid.pweek.actors.SoundButtonActor; import com.tacoid.pweek.actors.StartActor; import com.tacoid.pweekmini.actors.GameOverActor.GameOverType; import com.tacoid.pweek.logic.GameLogic; import com.tacoid.pweek.logic.State; import com.tacoid.pweek.screens.GameScreen; import com.tacoid.tracking.TrackingManager; public abstract class GameScreenPortrait implements GameScreen { private static final int VIRTUAL_WIDTH = 480; private static final int VIRTUAL_HEIGHT = 800; private int puyoSize = 48; protected boolean end = false; protected float elapsedTime; protected PauseMenu pauseMenu; protected PauseButton pauseButton; protected Stage stage; protected GameLogic gameLogic; private GridActor gridActor; private InputProcessor controller; protected boolean gamePaused; private GameOverActor gameOver; private StartActor startActor; private NextPieceActor nextPieceActor; private boolean started = false; private int volumeStart; protected class PauseButton extends Button { public PauseButton(TextureRegion region) { super(new TextureRegionDrawable(region)); addListener(new InputListener() { @Override public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) { SoundPlayer.getInstance().playSound(SoundType.TOUCH_MENU, 0.5f, true); pauseMenu.show(); return true; } }); } } private void addButton(Button button, int x, int y) { stage.addActor(button); button.setX(x); button.setY(y); } public GameScreenPortrait() { elapsedTime = 0; gameLogic = new GameLogic(PweekMini.getInstance().getGameService(), false); } public int getPuyoSize() { return puyoSize; } protected void initGraphics() { stage = new Stage(Gdx.graphics.getWidth(), Gdx.graphics.getHeight(), false); controller = new Controller(gameLogic, this, stage, new Vector2(0, 0), new Vector2(VIRTUAL_WIDTH, VIRTUAL_HEIGHT)); gridActor = new GridActor(PweekMini.getInstance().atlasPuyo, gameLogic, PweekMini.getInstance().manager.get("images/font_score.fnt", BitmapFont.class), 148, 130, 50, puyoSize); ExplosionActor explosionActor = new ExplosionActor(PweekMini.getInstance().atlasPuyo, gameLogic, PweekMini.getInstance().manager.get("images/font_score.fnt", BitmapFont.class), 148, 130, 50, puyoSize); nextPieceActor = new NextPieceActor(PweekMini.getInstance().atlasPuyo, gameLogic, 21, 590, puyoSize); ScoreActor scoreActor = new ScoreActor(PweekMini.getInstance().manager.get("images/font_score.fnt", BitmapFont.class), gameLogic, 300, 786); HighScoreActor highScoreActor = new HighScoreActor(PweekMini.getInstance().manager.get("images/font_score.fnt", BitmapFont.class), this, 76, 440); TextureRegion pauseRegion = new TextureRegion(PweekMini.getInstance().atlasBouttons.findRegion("pause_button")); stage.addActor(new Image(new TextureRegion(PweekMini.getInstance().manager.get("images/background.png", Texture.class), 480, 800))); stage.addActor(new PortraitPanelActor(PweekMini.getInstance().atlasPanelsPortrait)); stage.addActor(gridActor); stage.addActor(nextPieceActor); stage.addActor(scoreActor); stage.addActor(highScoreActor); stage.addActor(explosionActor); pauseButton = new PauseButton(pauseRegion); addButton(pauseButton,10,VIRTUAL_HEIGHT-10-pauseRegion.getRegionHeight()); addButton(MusicButtonActor.createMusicButton(PweekMini.getInstance().atlasBouttons),VIRTUAL_WIDTH-64, VIRTUAL_HEIGHT-64); addButton(SoundButtonActor.createSoundButton(PweekMini.getInstance().atlasBouttons),VIRTUAL_WIDTH-2*64-10, VIRTUAL_HEIGHT-64); boolean show = false; if (gameOver != null) { show = gameOver.isVisible(); } gameOver = new GameOverActor(PweekMini.getInstance().atlasPlank, PweekMini.getInstance().atlasPanelsPortrait, PweekMini.getInstance().atlasBouttons, PweekMini.getInstance().manager.get("images/font_score.fnt", BitmapFont.class), this, VIRTUAL_WIDTH/2, 2*VIRTUAL_HEIGHT/3); stage.addActor(gameOver); if (show) { gameOver(); } else { gameOver.hide(); } pauseMenu = new PauseMenu(PweekMini.getInstance().atlasPlank, this, PweekMini.getInstance().getHandler(), ScreenOrientation.PORTRAIT, !gamePaused); stage.addActor(pauseMenu); show = true; if (startActor != null) { show = startActor.isVisible(); } startActor = new StartActor(PweekMini.getInstance().atlasPlank, this); stage.addActor(startActor); if (show) { startActor.show(); } else { startActor.setVisible(false); startActor.setTouchable(Touchable.disabled); if (gamePaused) { pauseMenu.show(); } } } @Override public void dispose() { Gdx.app.log("Portrait", "paused"); } @Override public void hide() { // TODO Auto-generated method stub } @Override public void pause() { if (!gamePaused && !gameEnded()) { pauseMenu.show(); } } protected boolean gameEnded() { return gameLogic.getState() == State.LOST; } @Override public void render(float delta) { if (!gameEnded()) { if (!gamePaused) { this.elapsedTime += delta; } // Update model gameLogic.update(delta); if(gameEnded()) { gameOver(); } } else { //Gdx.input.setInputProcessor(null); end = true; // TODO } draw(delta); } private void draw(float delta) { GLCommon gl = Gdx.gl; gl.glClear(GL20.GL_COLOR_BUFFER_BIT); stage.act(delta); stage.draw(); } @Override public void resize(int arg0, int arg1) { stage.setViewport(VIRTUAL_WIDTH, VIRTUAL_HEIGHT, false); stage.getCamera().position.set(VIRTUAL_WIDTH / 2, VIRTUAL_HEIGHT / 2, 0); } @Override public void resume() { show(); } @Override public void show() { PweekMini.getInstance().getHandler().showAds(!startActor.isVisible() && (gamePaused || gameEnded())); resize(0, 0); Gdx.input.setInputProcessor(controller); } public float getElapsedTime() { return elapsedTime; } @Override public void init() { gameLogic.init(); gameOver.hide(); startActor.show(); elapsedTime = 0; started = false; } private void gameOver() { int volumeEnd; if (!MusicPlayer.getInstance().isMuted()) { volumeEnd = PweekMini.getInstance().getHandler().getVolume(); } else { volumeEnd = 0; } if (volumeEnd > 80 && volumeStart > 80 && elapsedTime > 600) { PweekMini.getInstance().getGameService().unlockAchievement(Achievement.DEAF); } pauseButton.setTouchable(Touchable.disabled); gameOver.show(GameOverType.GAMEOVER); } @Override public void gamePause() { gamePaused = true; gameLogic.pause(); gridActor.setVisible(false); nextPieceActor.setVisible(false); pauseButton.setTouchable(Touchable.disabled); } @Override public void gameResume() { gamePaused = false; gameLogic.resume(); gridActor.setVisible(true); nextPieceActor.setVisible(true); pauseButton.setTouchable(Touchable.enabled); } public ScreenOrientation getOrientation() { return ScreenOrientation.PORTRAIT; } @Override public float getHeight() { return VIRTUAL_HEIGHT; } @Override public float getWidth() { return VIRTUAL_WIDTH; } @Override public int getScore() { return gameLogic.getScore(); } @Override public void quit() { pauseMenu.hide(); GameType type = getGameType(); TrackingManager.getTracker().trackEvent("UI", "button_click",type.toString() + " quit before end", null); PweekMini.getInstance().setScreen(MainMenuScreen.getInstance()); } @Override public void hidePause() { pauseMenu.hide(); } @Override public boolean isGamePaused() { return gamePaused; } @Override public void gameStart() { if (!MusicPlayer.getInstance().isMuted()) { this.volumeStart = PweekMini.getInstance().getHandler().getVolume(); } else { this.volumeStart = 0; } this.gameResume(); this.started = true; } @Override public boolean isGameStarted() { return this.started; } }