diff --git a/src/de/miaurizius/jgame2d/core/GamePanel.java b/src/de/miaurizius/jgame2d/core/GamePanel.java index 82b17f0..7ce3ee3 100644 --- a/src/de/miaurizius/jgame2d/core/GamePanel.java +++ b/src/de/miaurizius/jgame2d/core/GamePanel.java @@ -199,6 +199,7 @@ public class GamePanel extends JPanel implements Runnable { // MUSIC public void playMusic(int i) { Clip c = music.clips[i]; + music.clip = c; music.fc = (FloatControl) c.getControl(FloatControl.Type.MASTER_GAIN); music.checkVolume(); if(c.isRunning()) c.stop(); diff --git a/src/de/miaurizius/jgame2d/core/UI.java b/src/de/miaurizius/jgame2d/core/UI.java index 29602d1..08b66e8 100644 --- a/src/de/miaurizius/jgame2d/core/UI.java +++ b/src/de/miaurizius/jgame2d/core/UI.java @@ -236,6 +236,7 @@ public class UI { case OVERVIEW -> optionsTop(frameX, frameY); case SCREENNF -> optionsFSNotify(frameX, frameY); case CONTROLS -> optionsControls(frameX, frameY); + case QUITNF -> optionsQuitNotify(frameX, frameY); } panel.keyH.spacePressed = false; } @@ -372,7 +373,10 @@ public class UI { graphics2d.drawString("Quit Game", textX, textY); if(commandNum == 4) { graphics2d.drawString(">", textX-25, textY); - if(panel.keyH.spacePressed) System.exit(0); + if(panel.keyH.spacePressed) { + optionState = OptionState.QUITNF; + commandNum = 0; + } } // BACK @@ -383,6 +387,10 @@ public class UI { if(panel.keyH.spacePressed) panel.gameState = GameState.PLAY; } + // + // FUNCTIONALITY + // + // FULL SCREEN CHECKBOX textX = frameX + (int)(panel.tileSize*4.5); textY = frameY + panel.tileSize*2 - panel.tileSize/2; @@ -402,6 +410,39 @@ public class UI { graphics2d.drawRect(textX, textY, 120, panel.tileSize/2); // 120/5 = 24 graphics2d.fillRect(textX, textY, 24 * panel.se.volumeScale, panel.tileSize/2); } + public void optionsControls(int frameX, int frameY) { + int textX; + int textY; + + // TITLE + String text = "Controls"; + textX = getCenteredX(text); + textY = frameY + panel.tileSize; + graphics2d.drawString(text, textX, textY); + + textX = frameX + panel.tileSize; + textY +=panel.tileSize; + String[] options = {"Move", "Confirm/Attack", "Shoot/Cast", "Inventory", "Pause/Settings"}; + for(String option : options) { + graphics2d.drawString(option, textX, textY); + textY += panel.tileSize; + } + + textX = frameX + panel.tileSize*6; + textY = frameY + panel.tileSize*2; + options = new String[]{"WASD", "SPACE", "F", "C", "ESC"}; + for(String option : options) { + graphics2d.drawString(option, textX, textY); + textY += panel.tileSize; + } + + // BACK + textX = frameX + panel.tileSize; + textY = frameY + panel.tileSize*9; + graphics2d.drawString("Back", textX, textY); + graphics2d.drawString(">", textX-25, textY); + if(panel.keyH.spacePressed) optionState = OptionState.OVERVIEW; + } public void optionsFSNotify(int frameX, int frameY) { int textX = frameX + panel.tileSize; int textY = frameY + panel.tileSize*3; @@ -421,22 +462,36 @@ public class UI { } } - public void optionsControls(int frameX, int frameY) { - int textX; - int textY; + public void optionsQuitNotify(int frameX, int frameY) { + int textX = frameX + panel.tileSize; + int textY = frameY + panel.tileSize*3; - // TITLE - String text = "Controls"; + currentDialogue = "Quit the game and \nreturn to the title screen?"; + for(String line : currentDialogue.split("\n")) { + graphics2d.drawString(line, textX, textY); + textY += 40; + } + + // DISPLAY OPTIONS + String text = "Yes"; textX = getCenteredX(text); - textY = frameY + panel.tileSize; + textY += panel.tileSize*3; graphics2d.drawString(text, textX, textY); + if(commandNum == 0) { + graphics2d.drawString(">", textX-25, textY); + if(panel.keyH.spacePressed) { + panel.gameState = GameState.TITLE; + panel.stopMusic(); + } + } - textX = frameX + panel.tileSize; - textY +=panel.tileSize; - String[] options = {"Move", "Confirm/Attack", "Shoot/Cast", "Inventory", "Pause/Settings"}; - for(String option : options) { - graphics2d.drawString(option, textX, textY); - textY += panel.tileSize; + text = "No"; + textX = getCenteredX(text); + textY += panel.tileSize; + graphics2d.drawString(text, textX, textY); + if(commandNum == 1) { + graphics2d.drawString(">", textX-25, textY); + if(panel.keyH.spacePressed) optionState = OptionState.OVERVIEW; } } @@ -444,6 +499,7 @@ public class UI { OVERVIEW, SCREENNF, CONTROLS, + QUITNF; } } diff --git a/src/de/miaurizius/jgame2d/core/handlers/KeyHandler.java b/src/de/miaurizius/jgame2d/core/handlers/KeyHandler.java index 0f522a7..bc1e582 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/KeyHandler.java +++ b/src/de/miaurizius/jgame2d/core/handlers/KeyHandler.java @@ -26,7 +26,7 @@ public class KeyHandler implements KeyListener { case KeyEvent.VK_DOWN -> { if(panel.ui.commandNum != 2) panel.ui.commandNum++; } - case KeyEvent.VK_ENTER -> { + case KeyEvent.VK_ENTER, KeyEvent.VK_SPACE -> { switch (panel.ui.commandNum) { case 0: panel.gameState = GameState.PLAY; @@ -72,6 +72,7 @@ public class KeyHandler implements KeyListener { switch (panel.ui.optionState) { case OVERVIEW -> maxCommandNum = 5; + case QUITNF -> maxCommandNum = 1; } switch(code) { diff --git a/src/de/miaurizius/jgame2d/core/handlers/Sound.java b/src/de/miaurizius/jgame2d/core/handlers/Sound.java index e94bc55..40feeed 100644 --- a/src/de/miaurizius/jgame2d/core/handlers/Sound.java +++ b/src/de/miaurizius/jgame2d/core/handlers/Sound.java @@ -12,7 +12,7 @@ import java.util.logging.Level; public class Sound { - Clip clip; + public Clip clip; URL[] soundURL = new URL[30]; public Clip[] clips = new Clip[30]; public FloatControl fc;