diff --git a/core/assets/sprites/archer.png b/core/assets/sprites/archer.png index b35e6e9..59f9f40 100644 Binary files a/core/assets/sprites/archer.png and b/core/assets/sprites/archer.png differ diff --git a/core/assets/sprites/backButton.png b/core/assets/sprites/backButton.png new file mode 100644 index 0000000..a277684 Binary files /dev/null and b/core/assets/sprites/backButton.png differ diff --git a/core/assets/sprites/controlsButton.png b/core/assets/sprites/controlsButton.png new file mode 100644 index 0000000..2188584 Binary files /dev/null and b/core/assets/sprites/controlsButton.png differ diff --git a/core/assets/sprites/settingsButton.png b/core/assets/sprites/settingsButton.png new file mode 100644 index 0000000..207ffb2 Binary files /dev/null and b/core/assets/sprites/settingsButton.png differ diff --git a/core/assets/sprites/swordsman.png b/core/assets/sprites/swordsman.png index 689fb68..fe6ac44 100644 Binary files a/core/assets/sprites/swordsman.png and b/core/assets/sprites/swordsman.png differ diff --git a/core/assets/sprites/volume.png b/core/assets/sprites/volume.png new file mode 100644 index 0000000..16e19d9 Binary files /dev/null and b/core/assets/sprites/volume.png differ diff --git a/core/assets/sprites/volumeButton.png b/core/assets/sprites/volumeButton.png new file mode 100644 index 0000000..d9ee060 Binary files /dev/null and b/core/assets/sprites/volumeButton.png differ diff --git a/core/assets/sprites/volumeDownButton.png b/core/assets/sprites/volumeDownButton.png new file mode 100644 index 0000000..72560c1 Binary files /dev/null and b/core/assets/sprites/volumeDownButton.png differ diff --git a/core/assets/sprites/volumeUpButton.png b/core/assets/sprites/volumeUpButton.png new file mode 100644 index 0000000..83b98dd Binary files /dev/null and b/core/assets/sprites/volumeUpButton.png differ diff --git a/core/src/com/dungeoncrawler/control/Controller.java b/core/src/com/dungeoncrawler/control/Controller.java index 9c2992c..99773e6 100644 --- a/core/src/com/dungeoncrawler/control/Controller.java +++ b/core/src/com/dungeoncrawler/control/Controller.java @@ -30,10 +30,18 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ SpriteBatch batch; Dungeon d; DungeonGenerator dg; - MainMenu v; Timer tEntities; - GameScreen m; + //SCREENS + + MainMenuScreen mm; + GameScreen gs; + HudContainer hc; + PauseScreen ps; + SettingsScreen ss; + ControlsScreen cs; + + // int tileX; int tileY; @@ -48,7 +56,6 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int roomAmount; float volume; - Entity[] arrows; Texture verticalAttack; Texture horizontalAttack; @@ -57,18 +64,17 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ Timer entityMovement; - HudContainer hc; + @Override public void create(){ - volume = 0.01f; + volume = 0.05f; - arrows = new Entity[10]; roomX = 10; roomY = 6; batch = new SpriteBatch(); - v = new MainMenu(volume); + mm = new MainMenuScreen(volume); dg = new DungeonGenerator(); @@ -97,14 +103,14 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ entityMovement.scheduleTask(new Timer.Task() { @Override public void run() { - if(m != null){ + if(gs != null){ //m.updateEntitySprite(d.getCurrentEntities()); for(int i = 0; i < d.getCurrentEntities().length; i++){ if(d.getCurrentEntities()[i] != null){ // Gets the collisions relevant sprites - MapObjects mapObjects = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects(); - Rectangle playerSprite = m.getPlayer().getCollisionSprite(); + MapObjects mapObjects = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers().get(0).getObjects(); + Rectangle playerSprite = gs.getPlayer().getCollisionSprite(); Entity temp = d.getCurrentEntities()[i]; @@ -112,7 +118,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ int y = (int) temp.getyPos(); Entity arrow = d.getCurrentEntities()[i].move((int) d.getPlayer().getxPos(), (int) d.getPlayer().getyPos()); - Sprite tempObject = m.entitySprites[i]; + Sprite tempObject = gs.entitySprites[i]; tempObject.setPosition(temp.getxPos(), temp.getyPos()); @@ -142,10 +148,10 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } if(d.getCurrentEntities()[i].getId() != 2){ - for(int j = 0; j < m.entitySprites.length; j++){ + for(int j = 0; j < gs.entitySprites.length; j++){ if(i != j){ if(d.getCurrentEntities()[j] != null && d.getCurrentEntities()[j].getId() != 2){ - if(Intersector.overlaps(tempObject.getBoundingRectangle(), m.entitySprites[j].getBoundingRectangle())){ + if(Intersector.overlaps(tempObject.getBoundingRectangle(), gs.entitySprites[j].getBoundingRectangle())){ overlaps = true; break; } @@ -163,13 +169,13 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ tempObject.setPosition(x, y); } - m.entitySprites[i] = tempObject; + gs.entitySprites[i] = tempObject; if(arrow != null){ for(int k = 5; k < d.getCurrentEntities().length; k++){ if(d.getCurrentEntities()[k] == null){ d.getCurrentEntities()[k] = arrow; - m.updateEntitySprite(d.getCurrentEntities()); + gs.updateEntitySprite(d.getCurrentEntities()); break; } } @@ -177,7 +183,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ if(delete && d.getCurrentEntities()[i].getId() == 2 || d.getCurrentEntities()[i].getToDelete()){ d.getCurrentEntities()[i] = null; - m.updateEntitySprite(d.getCurrentEntities()); + gs.updateEntitySprite(d.getCurrentEntities()); } } @@ -194,14 +200,20 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public void render(){ //PASSIERT IN MAINMENU - if(v != null){ - v.render(batch); + if(mm != null){ + mm.render(batch); + } + if(ss != null){ + ss.render(batch, volume); + } + if(cs != null){ + cs.render(batch); } //PASSIERT IN GAMESCREEN - if(m != null){ + if(gs != null){ - if(v == null){ + if(mm == null){ // Position des Players, etc. werden aktualisiert updateObjects(level, roomPosX, roomPosY); @@ -217,7 +229,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ // Render methode zum rendern der einzelnen Sprites wird aufgerufen - m.render(batch, d.getPlayer(), d.getCurrentEntities(), arrows, tileX, tileY, level, roomPosX, roomPosY); + gs.render(batch, d.getPlayer(), d.getCurrentEntities(), tileX, tileY, level, roomPosX, roomPosY); hc.updateHud(batch, d.getPlayer()); d.getPlayer().updateItems(); } @@ -232,7 +244,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public void updateObjects(int level, int roomPosX, int roomPosY){ - MapLayers layers = m.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers(); + MapLayers layers = gs.getM().getMaps()[level][roomPosX][roomPosY].getMap().getLayers(); MapObjects objects = layers.get(0).getObjects(); //System.out.println(objects.getCount()); @@ -244,12 +256,12 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ float x = d.getPlayer().getxPos(); d.getPlayer().updateX(); - m.getPlayer().updateCollisionX((int) d.getPlayer().getxPos()); + gs.getPlayer().updateCollisionX((int) d.getPlayer().getxPos()); for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){ Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(rectangle, m.getPlayer().getCollisionSprite())){ + if(Intersector.overlaps(rectangle, gs.getPlayer().getCollisionSprite())){ d.getPlayer().setxPos(x); @@ -259,12 +271,12 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ float y = d.getPlayer().getyPos(); d.getPlayer().updateY(); - m.getPlayer().updateCollision((int) d.getPlayer().getxPos(),(int) d.getPlayer().getyPos()); + gs.getPlayer().updateCollision((int) d.getPlayer().getxPos(),(int) d.getPlayer().getyPos()); for(RectangleMapObject rectangleObject : objects.getByType(RectangleMapObject.class)){ Rectangle rectangle = rectangleObject.getRectangle(); - if(Intersector.overlaps(rectangle, m.getPlayer().getCollisionSprite())){ + if(Intersector.overlaps(rectangle, gs.getPlayer().getCollisionSprite())){ d.getPlayer().setyPos(y); @@ -296,7 +308,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ roomPosY += 1; d.getPlayer().setxPos((roomX / 2)* 48); d.getPlayer().setyPos(48); - m.startLoadingScreen(); + gs.startLoadingScreen(); } // rechts @@ -306,7 +318,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ roomPosX += 1; d.getPlayer().setxPos(48); d.getPlayer().setyPos((roomY / 2)*48); - m.startLoadingScreen(); + gs.startLoadingScreen(); } // unten @@ -316,7 +328,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ roomPosY -= 1; d.getPlayer().setxPos((roomX / 2)*48); d.getPlayer().setyPos(roomY*48 - 48); - m.startLoadingScreen(); + gs.startLoadingScreen(); } // links @@ -326,7 +338,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ roomPosX -= 1; d.getPlayer().setxPos((roomX*48) - 48); d.getPlayer().setyPos((roomY / 2)*48); - m.startLoadingScreen(); + gs.startLoadingScreen(); } if(roomPosX == d.getCurrentLevel().getExit()[0] && roomPosY == d.getCurrentLevel().getExit()[1]){ @@ -335,7 +347,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ d.getPlayer().setMovementY(0f); d.getPlayer().setMovementX(0f); - m.startLoadingScreen(); + gs.startLoadingScreen(); level++; @@ -360,11 +372,11 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public ArrayList playerPickUp(){ ArrayList tempItems = d.getCurrentRoom().getItems(); - ArrayList tempSprites = m.getM().getMaps()[level][roomPosX][roomPosY].getMapItems(); + ArrayList tempSprites = gs.getM().getMaps()[level][roomPosX][roomPosY].getMapItems(); ArrayList garbageCollector = new ArrayList<>(); for(int i = 0; i < tempItems.size(); i++){ - if(Intersector.overlaps(m.getPlayer().getCollisionSprite(), tempSprites.get(i).getSprite().getBoundingRectangle())){ + if(Intersector.overlaps(gs.getPlayer().getCollisionSprite(), tempSprites.get(i).getSprite().getBoundingRectangle())){ garbageCollector.add(tempItems.get(i)); tempItems.remove(i); @@ -382,46 +394,46 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public boolean keyDown(int keycode) { if(keycode == Input.Keys.A){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementX(-3f); } } if(keycode == Input.Keys.D){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementX(+3f); } } if(keycode == Input.Keys.S){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementY(-3f); } } if(keycode == Input.Keys.W){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementY(3f); } } if(keycode == Input.Keys.E){ - if(v != null){} - if(m != null && m.getIsLoading() == false){ - d.setCurrentEntities(m.playerAttack(d.getCurrentEntities(), d.getPlayer(), batch)); + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ + d.setCurrentEntities(gs.playerAttack(d.getCurrentEntities(), d.getPlayer(), batch)); } } if(keycode == Input.Keys.F){ - if(v != null){} - if(m != null && m.getIsLoading() == false){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ //Item k = new Sword(1); //m.addItem(k); //d.setCurrentItemContainer(m.playerPickUp(d.getCurrentItemContainer(), d.getPlayer())); @@ -434,38 +446,16 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } if(keycode == Input.Keys.R){ - if(v != null){} - if(m != null && m.getIsLoading() == false){ + if(mm != null){} + if(gs != null && gs.getIsLoading() == false){ d.getPlayer().getInv().equipItem(); } } - if(keycode == Input.Keys.UP){ - volume += 0.1f; - - if(v != null){ - v.music.setVolume(volume); - } - if(m != null){ - m.music.setVolume(volume); - } - } - if(keycode == Input.Keys.DOWN){ - if(volume >= 0.1f){ - volume -= 0.1f; - } - - if(v != null){ - v.music.setVolume(volume); - } - if(m != null){ - m.music.setVolume(volume); - } - } if(keycode == Input.Keys.Q){ - if(m != null && m.getIsLoading() == false){ + if(gs != null && gs.getIsLoading() == false){ d.getPlayer().getInv().dropItem(); } } @@ -475,33 +465,33 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ @Override public boolean keyUp(int keycode) { if(keycode == Input.Keys.A){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementX(0); } } if(keycode == Input.Keys.D){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementX(0); } } if(keycode == Input.Keys.S){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementY(0); } } if(keycode == Input.Keys.W){ - if(v != null){ + if(mm != null){ } - if(m != null){ + if(gs != null){ d.getPlayer().setMovementY(0); } } @@ -518,38 +508,88 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ public boolean touchDown(int screenX, int screenY, int pointer, int button) { if(button == Input.Buttons.LEFT){ - if(v != null){ - switch(v.click(screenX, screenY)){ - case -1: - - return true; - case 0: - v.cleanUp(); - v = null; - m = new GameScreen(d, volume); - hc = new HudContainer(); - m.startLoadingScreen(); - return true; - - case 1: - v.cleanUp(); - v = null; - m = new GameScreen(d, volume); - return true; - - } + switch(click(screenX, screenY)){ + case -1: // -1: nothing hit -- 0: go ingame -- 1: EXIT game -- 2: goto settings -- 3: goto controls -- 4: goto MainMenuScreen -- 9: volume down -- 10: volume up + + return true; + case 0: + mm.cleanUp(); + mm = null; + gs = new GameScreen(d, volume); + hc = new HudContainer(); + gs.startLoadingScreen(); + return true; + + case 1: + mm.cleanUp(); + mm = null; + gs = new GameScreen(d, volume); + return true; + + case 2: + mm.hide(); + cs = null; + ss = new SettingsScreen(); + return true; + + case 3: + mm.hide(); + ss = null; + cs = new ControlsScreen(); + return true; + + case 4: + ss = null; + cs = null; + mm.appear(); + return true; + + case 9: + if(volume > 0f){ + volume -= 0.05f; + } + if(mm != null){ + mm.music.setVolume(volume); + } + if(gs != null){ + gs.music.setVolume(volume); + } + return true; + case 10: + volume += 0.05f; + + if(mm != null){ + mm.music.setVolume(volume); + } + if(gs != null){ + gs.music.setVolume(volume); + } + return true; + } - return true; - } - if(m != null && m.getIsLoading() == false){ - - - return true; - } + if(gs != null && gs.getIsLoading() == false){ + + + return true; + } } return true; } + public int click(int x, int y){ + if(mm != null && mm.getHidden() == false){ + return mm.click(x, y); + } + if(ss != null){ + return ss.click(x, y); + } + if(cs != null){ + return cs.click(x, y); + } + return -1; + } + + @Override public boolean touchUp(int i, int i1, int i2, int i3) { return false; @@ -567,7 +607,7 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ @Override public boolean scrolled(int i) { - if(m != null){ + if(gs != null){ if(i == -1 && d.getPlayer().getInv().getSelected() == 0){return true;} else if(i == 1 && d.getPlayer().getInv().getSelected() == 7){return true;} else{ diff --git a/core/src/com/dungeoncrawler/model/Inventory.java b/core/src/com/dungeoncrawler/model/Inventory.java index 5f40daa..dc9d57a 100644 --- a/core/src/com/dungeoncrawler/model/Inventory.java +++ b/core/src/com/dungeoncrawler/model/Inventory.java @@ -18,18 +18,11 @@ public class Inventory { public void addItem(Item i) { for(int n = 2; n < items.length; n++){ - if(i.getId() == 2){ - if(items[1] == null){ - items[1] = i; - n = items.length + 1; - break; - } - } - if(items[n] == null){ - items[n] = i; - n = items.length + 1; - break; - } + if(items[n] == null){ + items[n] = i; + n = items.length + 1; + break; + } } } diff --git a/core/src/com/dungeoncrawler/view/ControlsScreen.java b/core/src/com/dungeoncrawler/view/ControlsScreen.java new file mode 100644 index 0000000..e0e3bb9 --- /dev/null +++ b/core/src/com/dungeoncrawler/view/ControlsScreen.java @@ -0,0 +1,65 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.Gdx; +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.math.Intersector; +import com.badlogic.gdx.math.Rectangle; + +/** + * + * @author bfz + */ +public class ControlsScreen { + float w; + float h; + + Texture backButtonTexture; + + + Sprite backButtonSprite; + + public ControlsScreen(){ + w = Gdx.graphics.getWidth(); + h = Gdx.graphics.getHeight(); + float wc = w/2; + + backButtonTexture = new Texture("sprites/backButton.png"); + + + backButtonSprite = new Sprite(backButtonTexture); + + } + + public void render (SpriteBatch batch) { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + batch.begin(); + //batch.setProjectionMatrix(camera.combined); + 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 2; //go settingScreen + } + + return -1; + + } + + + +} diff --git a/core/src/com/dungeoncrawler/view/GameScreen.java b/core/src/com/dungeoncrawler/view/GameScreen.java index 1f93ec7..d819118 100644 --- a/core/src/com/dungeoncrawler/view/GameScreen.java +++ b/core/src/com/dungeoncrawler/view/GameScreen.java @@ -176,7 +176,7 @@ public class GameScreen { } - public void render (SpriteBatch batch, Player p, Entity[] e, Entity[] arrows, int tileX, int tileY, int level, int roomPosX, int roomPosY) { + public void render (SpriteBatch batch, Player p, Entity[] e, int tileX, int tileY, int level, int roomPosX, int roomPosY) { Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); diff --git a/core/src/com/dungeoncrawler/view/MainMenu.java b/core/src/com/dungeoncrawler/view/MainMenuScreen.java similarity index 63% rename from core/src/com/dungeoncrawler/view/MainMenu.java rename to core/src/com/dungeoncrawler/view/MainMenuScreen.java index 6ff595b..0660939 100644 --- a/core/src/com/dungeoncrawler/view/MainMenu.java +++ b/core/src/com/dungeoncrawler/view/MainMenuScreen.java @@ -14,7 +14,7 @@ import com.badlogic.gdx.math.Intersector; import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.utils.Timer; -public class MainMenu{ +public class MainMenuScreen{ @@ -22,9 +22,14 @@ public class MainMenu{ Texture startButtonTexture; Texture quitButtonTexture; Texture backgroundTexture; + Texture settingsButtonTexture; + Sprite startButtonSprite; Sprite quitButtonSprite; Sprite backgroundSprite; + Sprite settingsButtonSprite; + + boolean hidden; //CAMERA @@ -32,32 +37,38 @@ public class MainMenu{ float h = Gdx.graphics.getHeight(); OrthographicCamera camera; + // Sound public Music music; - public MainMenu(float volume) { + public MainMenuScreen(float volume) { //MENU-SCREEN w = Gdx.graphics.getWidth(); h = Gdx.graphics.getHeight(); float wc = w/2; + hidden = false; - + backgroundTexture = new Texture("sprites/MAINSCREEN.png"); startButtonTexture = new Texture("sprites/startButton.png"); quitButtonTexture = new Texture("sprites/quitButton.png"); - backgroundTexture = new Texture("sprites/MAINSCREEN.png"); + settingsButtonTexture = new Texture("sprites/settingsButton.png"); + backgroundSprite = new Sprite(backgroundTexture); startButtonSprite = new Sprite(startButtonTexture); quitButtonSprite = new Sprite(quitButtonTexture); - backgroundSprite = new Sprite(backgroundTexture); + settingsButtonSprite = new Sprite(settingsButtonTexture); - startButtonSprite.setX(100); - startButtonSprite.setY(350); - quitButtonSprite.setX(50); - quitButtonSprite.setY(50); backgroundSprite.setX(0); backgroundSprite.setY(0); + startButtonSprite.setX(backgroundSprite.getX() + 100); + startButtonSprite.setY(backgroundSprite.getY() + 350); + quitButtonSprite.setX(backgroundSprite.getX() + 50); + quitButtonSprite.setY(backgroundSprite.getY() + 50); + + settingsButtonSprite.setX(backgroundSprite.getX() + 100); + settingsButtonSprite.setY(backgroundSprite.getY() + 250); //camera = new OrthographicCamera(1, h/w); @@ -89,22 +100,30 @@ public class MainMenu{ batch.begin(); //batch.setProjectionMatrix(camera.combined); - backgroundSprite.draw(batch); - startButtonSprite.draw(batch); - quitButtonSprite.draw(batch); + if(hidden == false){ + backgroundSprite.draw(batch); + startButtonSprite.draw(batch); + quitButtonSprite.draw(batch); + settingsButtonSprite.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, startButtonSprite.getBoundingRectangle())){ - return 0; - } - if(Intersector.overlaps(r, quitButtonSprite.getBoundingRectangle())){ - return 1; + if(hidden == false){ + + Rectangle r = new Rectangle(); + r.set(x, h-y, 1, 1); + if(Intersector.overlaps(r, startButtonSprite.getBoundingRectangle())){ + return 0; //go ingame + } + if(Intersector.overlaps(r, quitButtonSprite.getBoundingRectangle())){ + return 1; //Exit Game + } + if(Intersector.overlaps(r, settingsButtonSprite.getBoundingRectangle())){ + return 2; //Settings + } } return -1; @@ -114,6 +133,17 @@ public class MainMenu{ music.dispose(); } + public void hide(){ + hidden = true; + } + + public void appear(){ + hidden = false; + } + + public boolean getHidden(){ + return hidden; + } diff --git a/core/src/com/dungeoncrawler/view/MenuScreen.java b/core/src/com/dungeoncrawler/view/PauseScreen.java similarity index 88% rename from core/src/com/dungeoncrawler/view/MenuScreen.java rename to core/src/com/dungeoncrawler/view/PauseScreen.java index f2e43a8..51aa9a4 100644 --- a/core/src/com/dungeoncrawler/view/MenuScreen.java +++ b/core/src/com/dungeoncrawler/view/PauseScreen.java @@ -14,9 +14,9 @@ import com.badlogic.gdx.graphics.GL20; * * @author bfz */ -public class MenuScreen{ +public class PauseScreen{ - public MenuScreen() { + public PauseScreen() { } diff --git a/core/src/com/dungeoncrawler/view/SettingsScreen.java b/core/src/com/dungeoncrawler/view/SettingsScreen.java new file mode 100644 index 0000000..8e03081 --- /dev/null +++ b/core/src/com/dungeoncrawler/view/SettingsScreen.java @@ -0,0 +1,127 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ +package com.dungeoncrawler.view; + +import com.badlogic.gdx.Gdx; +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 SettingsScreen { + float w = Gdx.graphics.getWidth(); + float h = Gdx.graphics.getHeight(); + + Texture controlsButtonTexture; + Texture volumeButtonTexture; + Texture volumeUpTexture; + Texture volumeDownTexture; + Texture volumeTexture; + Texture backButtonTexture; + + Sprite controlsButtonSprite; + Sprite volumeButtonSprite; + Sprite volumeUpSprite; + Sprite volumeDownSprite; + Sprite volumeSprite; + Sprite backButtonSprite; + + public SettingsScreen(){ + + w = Gdx.graphics.getWidth(); + h = Gdx.graphics.getHeight(); + float wc = w/2; + + controlsButtonTexture = new Texture("sprites/controlsButton.png"); + 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"); + + controlsButtonSprite = new Sprite(controlsButtonTexture); + volumeButtonSprite = new Sprite(volumeButtonTexture); + volumeUpSprite = new Sprite(volumeUpTexture); + volumeDownSprite = new Sprite(volumeDownTexture); + volumeSprite = new Sprite(volumeTexture); + backButtonSprite = new Sprite(backButtonTexture); + + } + + + public void render (SpriteBatch batch, float volume) { + Gdx.gl.glClearColor(0, 0, 0, 1); + Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); + + + controlsButtonSprite.setPosition(200, 600); + volumeButtonSprite.setPosition(200, 500); + volumeDownSprite.setPosition(volumeButtonSprite.getX() + 230, volumeButtonSprite.getY()+28); + volumeUpSprite.setPosition(volumeButtonSprite.getX() + 340, volumeButtonSprite.getY()+28); + backButtonSprite.setPosition(50, 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(); + controlsButtonSprite.draw(batch); + 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, controlsButtonSprite.getBoundingRectangle())){ + return 3; //ControlsScreen + } + if(Intersector.overlaps(r, backButtonSprite.getBoundingRectangle())){ + return 4; //MainMenuScreen + } + if(Intersector.overlaps(r, volumeDownSprite.getBoundingRectangle())){ + return 9; //volume DOWN + } + if(Intersector.overlaps(r, volumeUpSprite.getBoundingRectangle())){ + return 10; //volume UP + } + + return -1; + + } + + +}