From dff8de829cf0436abbb9ab843dd72a1a45a2acf6 Mon Sep 17 00:00:00 2001 From: Sagi Dayan Date: Sat, 19 Mar 2016 04:25:38 +0200 Subject: [PATCH] Stage management --- .../sagi/dayan/Games/Engine/GameEngine.java | 93 ++++++++++--------- .../sagi/dayan/Games/Stage/FirstStage.java | 4 +- .../dayan/Games/Stage/SettingsMenuScene.java | 2 +- src/com/sagi/dayan/Games/Stage/Stage.java | 4 +- .../sagi/dayan/Games/Utils/WaveConfigs.java | 8 +- 5 files changed, 59 insertions(+), 52 deletions(-) diff --git a/src/com/sagi/dayan/Games/Engine/GameEngine.java b/src/com/sagi/dayan/Games/Engine/GameEngine.java index 73894f0..66f881a 100644 --- a/src/com/sagi/dayan/Games/Engine/GameEngine.java +++ b/src/com/sagi/dayan/Games/Engine/GameEngine.java @@ -29,8 +29,8 @@ public class GameEngine { private int pWidth, pHeight, numOfPlayers; //panel dimensions private Random r; private Stage stage; - private Vector scenes; - private int currentScene, p1CreditTime, p2CreditTime, creditTickTime = 1; + private Scene scene; + private int p1CreditTime, p2CreditTime, creditTickTime = 1; public static final int PLAYER_WIDTH = 120, PLAYER_HEIGHT = 120; public static final int UP=0,RIGHT=1,DOWN=2, LEFT=3, FIRE=4, SPECIAL=5; @@ -44,18 +44,16 @@ public class GameEngine { private Font gameFont; private WaveConfigs waveConfigs; + private int currentLevel; public GameEngine(int width, int height, Stage stage){ - this.currentScene = 0; this.isFirstGame = true; this.gameOver = true; this.pWidth = width; this.pHeight = height; - this.scenes = new Vector<>(); this.stage = stage; - scenes.add(new MainMenuScene(width, height, this)); - stage.addKeyListener(scenes.get(currentScene)); - stage.addMouseListener(scenes.get(currentScene)); + currentLevel = -1; + goToMenu(); r = new Random(); try{ gameFont = Font.createFont(Font.TRUETYPE_FONT,Utils.getFontStream("transformers.ttf")); @@ -68,11 +66,7 @@ public class GameEngine { } this.waveConfigs = new WaveConfigs(); startNewGame(); - resetPlayerHealth(0); - resetPlayerHealth(1); - credits = 3; - p1Lives = 1; - p2Lives = 1; + } @@ -103,6 +97,7 @@ public class GameEngine { */ private void startNewGame(){ this.gameOn = true; + this.currentLevel = -1; initGame(); } @@ -110,6 +105,11 @@ public class GameEngine { * Setup all actors in the game to a new game - reset timer */ private void initGame(){ + resetPlayerHealth(0); + resetPlayerHealth(1); + credits = 3; + p1Lives = 1; + p2Lives = 1; } public int getP1CreditTime() { @@ -153,51 +153,49 @@ public class GameEngine { p2CreditTime--; lastP2CreditTick = now; } - scenes.get(currentScene).update(); + scene.update(); } public void render(JPanel p) { - scenes.get(currentScene).render(p); + scene.render(p); } public BufferedImage getScene() { - return scenes.get(currentScene).getSceneImage(); - } - - private void changeScene(int index) { - if (index >= scenes.size()){ - throw new IllegalArgumentException("Invalid Index. scenes size: "+scenes.size()); - } - stage.removeKeyListener(scenes.get(currentScene)); - stage.removeMouseListener(scenes.get(currentScene)); - currentScene = index; - stage.addKeyListener(scenes.get(currentScene)); - stage.addMouseListener(scenes.get(currentScene)); + return scene.getSceneImage(); } public void startGame(int numOfPlayers){ this.numOfPlayers = numOfPlayers; - scenes.add(new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 20})); - changeScene(currentScene+1); + startNewGame(); + changeLevel(); + } + + public void changeLevel(){ + currentLevel++; + stage.removeMouseListener(scene); + stage.removeKeyListener(scene); + switch (currentLevel){ + case 0: + scene = new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.0 =-", new int[]{5, 20}); + break; + case 1: + scene = new FirstStage(pWidth, pHeight, numOfPlayers, this, "-= STAGE 1.1 =-", new int[]{5, 20}); + break; + + } + stage.addKeyListener(scene); + stage.addMouseListener(scene); } public void goToSettings() { - scenes.add(new SettingsMenuScene(pWidth, pHeight, this)); - changeScene(currentScene+1); + stage.removeMouseListener(scene); + stage.removeKeyListener(scene); + scene = new SettingsMenuScene(pWidth, pHeight, this); + stage.addKeyListener(scene); + stage.addMouseListener(scene); } - public void goToMainMenu() { - - changeScene(0); - for(int i = scenes.size() -1 ; i > 0 ; i--){ - scenes.remove(i); - } - } - - public int getScenesSize(){ - return scenes.size(); - } public int[] getP1Controlles(){ return p1Controlles; @@ -275,11 +273,20 @@ public class GameEngine { } } + public void goToMenu(){ + stage.removeMouseListener(scene); + stage.removeKeyListener(scene); + scene = new MainMenuScene(pWidth, pHeight, this); + stage.addKeyListener(scene); + stage.addMouseListener(scene); + } + public void setGameOver(boolean gameOver) { if(gameOver){ - changeScene(0); - this.gameOver = false; + goToMenu(); + this.gameOver = true; } + } } \ No newline at end of file diff --git a/src/com/sagi/dayan/Games/Stage/FirstStage.java b/src/com/sagi/dayan/Games/Stage/FirstStage.java index 260fac7..33c0072 100644 --- a/src/com/sagi/dayan/Games/Stage/FirstStage.java +++ b/src/com/sagi/dayan/Games/Stage/FirstStage.java @@ -27,14 +27,14 @@ public class FirstStage extends Level{ fireDelay = 0.1; launchDelay = 0.5; numOfHits = 1; - wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO); + wc = engine.getWaveConfigs().getWaveConfig(6); break; case 1: numOfEnemies = 5; fireDelay = 0.1; launchDelay = 1; numOfHits = 1; - wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO); + wc = engine.getWaveConfigs().getWaveConfig(3); break; default: wc = engine.getWaveConfigs().getWaveConfig(WaveConfigs.DEMO); diff --git a/src/com/sagi/dayan/Games/Stage/SettingsMenuScene.java b/src/com/sagi/dayan/Games/Stage/SettingsMenuScene.java index 2f5036b..6f9873f 100644 --- a/src/com/sagi/dayan/Games/Stage/SettingsMenuScene.java +++ b/src/com/sagi/dayan/Games/Stage/SettingsMenuScene.java @@ -51,7 +51,7 @@ public class SettingsMenuScene extends Scene { switch (keyEvent.getKeyCode()){ case KeyEvent.VK_ESCAPE: Utils.playSound("menuItem.wav"); - engine.goToMainMenu(); + engine.goToMenu(); break; } } diff --git a/src/com/sagi/dayan/Games/Stage/Stage.java b/src/com/sagi/dayan/Games/Stage/Stage.java index 9d52c14..d7d05a5 100644 --- a/src/com/sagi/dayan/Games/Stage/Stage.java +++ b/src/com/sagi/dayan/Games/Stage/Stage.java @@ -92,9 +92,9 @@ public class Stage extends JPanel implements Runnable{ if (System.currentTimeMillis() - lastTimer > 1000) { lastTimer += 1000; if(frames <= 35){ - System.err.println("Ticks: " + ticks + "\tFps: " + frames + "\tScenes Size: " + engine.getScenesSize()); + System.err.println("Ticks: " + ticks + "\tFps: " + frames); }else{ - System.out.println("Ticks: " + ticks + "\tFps: " + frames + "\tScenes Size: " + engine.getScenesSize()); + System.out.println("Ticks: " + ticks + "\tFps: " + frames); } frames = 0; ticks = 0; diff --git a/src/com/sagi/dayan/Games/Utils/WaveConfigs.java b/src/com/sagi/dayan/Games/Utils/WaveConfigs.java index a300cf7..89c29ce 100644 --- a/src/com/sagi/dayan/Games/Utils/WaveConfigs.java +++ b/src/com/sagi/dayan/Games/Utils/WaveConfigs.java @@ -27,16 +27,16 @@ public class WaveConfigs { configs.add(new WaveConfig(new int[]{90,90,120, 120, 150, 150, 270} , 0.5, 8,900 , -30)); //right buttom to middle buttom - configs.add(new WaveConfig(new int[]{270,270,300, 300, 330, 330, 90} , 0.5, 8,100 , 0)); + configs.add(new WaveConfig(new int[]{270,270,300, 300, 330, 330, 90} , 0.5, 8,100 , 1000)); //left buttom to middle buttom - configs.add(new WaveConfig(new int[]{270,270,240, 240, 210, 210, 90} , 0.5, 8,900 , 0)); + configs.add(new WaveConfig(new int[]{270,270,240, 240, 210, 210, 90} , 0.5, 8,900 , 1000)); //middle right to middle right - configs.add(new WaveConfig(new int[]{180,180,180,90, 90, 0} , 0.5, 8,1010 , 400)); + configs.add(new WaveConfig(new int[]{180,180,180,180,180,90, 90, 0} , 0.5, 8,1010 , 400)); //middle left to middle left - configs.add(new WaveConfig(new int[]{0,0,0,90, 90, 180} , 0.5, 8,-30 , 400)); + configs.add(new WaveConfig(new int[]{0,0,0,0,0,90, 90, 180} , 0.5, 8,-10 , 400)); }