Stage management

This commit is contained in:
Sagi Dayan 2016-03-19 04:25:38 +02:00
parent 7a43d77ef4
commit dff8de829c
5 changed files with 59 additions and 52 deletions

View file

@ -29,8 +29,8 @@ public class GameEngine {
private int pWidth, pHeight, numOfPlayers; //panel dimensions
private Random r;
private Stage stage;
private Vector<Scene> 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;
}
}
}

View file

@ -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);

View file

@ -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;
}
}

View file

@ -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;

View file

@ -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));
}