diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index c824691..d4a89db 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -27,6 +27,8 @@ import com.dungeoncrawler.model.ItemContainer; import java.util.ArrayList; public class Controller extends ApplicationAdapter implements InputProcessor{ + + SpriteBatch batch; Dungeon d; DungeonGenerator dg; @@ -64,10 +66,15 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ Timer entityMovement; + boolean isPaused; + @Override public void create(){ + + isPaused = false; + volume = 0.05f; roomX = 10; @@ -210,6 +217,8 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } } },0, 0.03f); + + } @@ -228,11 +237,13 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(cs != null){ cs.render(batch); } + if(ps != null){ + ps.render(batch, volume); + } //PASSIERT IN GAMESCREEN - if(gs != null){ + if(gs != null && mm == null && isPaused == false){ - if(mm == null){ // Position des Players, etc. werden aktualisiert updateObjects(level, roomPosX, roomPosY); @@ -251,7 +262,6 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ gs.render(batch, d.getPlayer(), d.getCurrentEntities(), tileX, tileY, level, roomPosX, roomPosY); hc.updateHud(batch, d.getPlayer()); d.getPlayer().updateItems(); - } } } @@ -480,6 +490,17 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().getInv().dropItem(); } } + if(keycode == Input.Keys.ESCAPE){ + if(gs != null && gs.getIsLoading() == false){ + stop(); + } + } + if(keycode == Input.Keys.TAB){ + if(gs != null && gs.getIsLoading() == false){ + resume(); + } + } + return true; } @@ -565,6 +586,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ cs = null; mm.appear(); return true; + + case 5: + resume(); + return true; case 9: if(volume > 0f){ @@ -609,6 +634,9 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } if(cs != null){ return cs.click(x, y); + } + if(gs != null && isPaused == true){ + } return -1; } @@ -643,4 +671,19 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ return true; } + public void stop(){ + entityMovement.stop(); + isPaused = true; + gs.stop(); + + ps = new PauseScreen(); + } + public void resume(){ + isPaused = false; + entityMovement.start(); + gs.resume(); + + ps = null; + } + } diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index f9afcf9..0d343a0 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -213,12 +213,12 @@ public class GameScreen { //MAP tmr.setView(camera); tmr.render(); - + camera.zoom = 700f; // Standart 700f camera.update(); batch.setProjectionMatrix(camera.combined); - + updateEntitySprites(e); //BATCH @@ -419,5 +419,16 @@ public class GameScreen { public Map getM() { return m; } + + public void stop(){ + animations.stop(); + animatePlayer.stop(); + camera = null; + } + public void resume(){ + animations.start(); + animatePlayer.start(); + + } } diff --git a/core/src/com/dungeoncrawler/view/PauseScreen.java b/core/src/com/dungeoncrawler/view/PauseScreen.java index 51aa9a4..02c4b1c 100644 --- a/core/src/com/dungeoncrawler/view/PauseScreen.java +++ b/core/src/com/dungeoncrawler/view/PauseScreen.java @@ -9,17 +9,113 @@ import com.badlogic.gdx.Game; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.Input; import com.badlogic.gdx.graphics.GL20; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.g2d.Sprite; +import com.badlogic.gdx.graphics.g2d.SpriteBatch; +import com.badlogic.gdx.graphics.g2d.TextureRegion; +import com.badlogic.gdx.math.Intersector; +import com.badlogic.gdx.math.Rectangle; /** * * @author bfz */ public class PauseScreen{ + float w = Gdx.graphics.getWidth(); + float h = Gdx.graphics.getHeight(); + + Texture volumeButtonTexture; + Texture volumeUpTexture; + Texture volumeDownTexture; + Texture volumeTexture; + Texture backButtonTexture; + + Sprite volumeButtonSprite; + Sprite volumeUpSprite; + Sprite volumeDownSprite; + Sprite volumeSprite; + Sprite backButtonSprite; + + public PauseScreen(){ + + w = Gdx.graphics.getWidth(); + h = Gdx.graphics.getHeight(); + float wc = w/2; + + volumeButtonTexture = new Texture("sprites/volumeButton.png"); + volumeUpTexture = new Texture("sprites/volumeUpButton.png"); + volumeDownTexture = new Texture("sprites/volumeDownButton.png"); + volumeTexture = new Texture("sprites/volume.png"); + backButtonTexture = new Texture("sprites/backButton.png"); + + volumeButtonSprite = new Sprite(volumeButtonTexture); + volumeUpSprite = new Sprite(volumeUpTexture); + volumeDownSprite = new Sprite(volumeDownTexture); + volumeSprite = new Sprite(volumeTexture); + backButtonSprite = new Sprite(backButtonTexture); - public PauseScreen() { } + public void render (SpriteBatch batch, float volume) { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + + volumeButtonSprite.setPosition(-140, 150); + volumeDownSprite.setPosition(volumeButtonSprite.getX() + 230, volumeButtonSprite.getY()+28); + volumeUpSprite.setPosition(volumeButtonSprite.getX() + 340, volumeButtonSprite.getY()+28); + backButtonSprite.setPosition(-140, 50); + + + float n = 0; + if(volume != 0){ + n = volume / 1f; + } + + int newWidth = (int) (n * volumeTexture.getWidth()); + if(newWidth == 0){ + TextureRegion[][] volumeRegion = TextureRegion.split(volumeTexture,1, volumeTexture.getHeight()); + volumeSprite = new Sprite(volumeRegion[0][0]); + volumeSprite.setPosition(-5,-5); + } + else{ + TextureRegion[][] volumeRegion = TextureRegion.split(volumeTexture,newWidth, volumeTexture.getHeight()); + volumeSprite = new Sprite(volumeRegion[0][0]); + volumeSprite.setPosition(volumeButtonSprite.getX() + 278, volumeButtonSprite.getY()+34); + } + + + batch.begin(); + volumeButtonSprite.draw(batch); + volumeUpSprite.draw(batch); + volumeDownSprite.draw(batch); + volumeSprite.draw(batch); + backButtonSprite.draw(batch); + batch.end(); + } + + + public int click(int x, int y){ // prueft ob cursor mit button (START) ueberlappt + + + + Rectangle r = new Rectangle(); + r.set(x, h-y, 1, 1); + if(Intersector.overlaps(r, backButtonSprite.getBoundingRectangle())){ + return 5; //proceed Game + } + if(Intersector.overlaps(r, volumeDownSprite.getBoundingRectangle())){ + return 9; //volume DOWN + } + if(Intersector.overlaps(r, volumeUpSprite.getBoundingRectangle())){ + return 10; //volume UP + } + + return -1; + + } + }