103 lines
2.4 KiB
Java
103 lines
2.4 KiB
Java
package fr.enssat.BoulderDash.controllers;
|
|
|
|
import fr.enssat.BoulderDash.models.LevelModel;
|
|
import fr.enssat.BoulderDash.views.MenuView;
|
|
import fr.enssat.BoulderDash.views.GameView;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import static fr.enssat.BoulderDash.helpers.AudioLoadHelper.AUDIO_LOAD_HELPER;
|
|
|
|
|
|
/**
|
|
* GameController
|
|
* <p>
|
|
* This system creates the view.
|
|
* The game loop is also handled there.
|
|
*
|
|
* @author Colin Leverger <me@colinleverger.fr>
|
|
* @since 2015-06-19
|
|
*/
|
|
public class GameController extends AbstractNavController {
|
|
private boolean firstClickOnPause;
|
|
private MenuView menuView;
|
|
private GameView gameView;
|
|
|
|
/**
|
|
* Class constructor
|
|
*
|
|
* @param levelModel Level model
|
|
* @param nav
|
|
*/
|
|
public GameController(LevelModel levelModel, NavigationBetweenViewController nav) {
|
|
super(levelModel, nav);
|
|
|
|
this.firstClickOnPause = true;
|
|
|
|
this.gameView = new GameView(this, levelModel);
|
|
this.menuView = nav.getMenuView();
|
|
|
|
AUDIO_LOAD_HELPER.stopMusic();
|
|
AUDIO_LOAD_HELPER.playSound("new");
|
|
}
|
|
|
|
/**
|
|
* Handles the 'action performed' event
|
|
*
|
|
* @param event Action event
|
|
*/
|
|
public void actionPerformed(ActionEvent event) {
|
|
switch (event.getActionCommand()) {
|
|
case "pause":
|
|
if (this.firstClickOnPause) {
|
|
this.levelModel.setGamePaused(true);
|
|
} else if (!this.firstClickOnPause) {
|
|
this.levelModel.setGamePaused(false);
|
|
}
|
|
|
|
this.firstClickOnPause = !this.firstClickOnPause;
|
|
this.gameView.getGameFieldView().grabFocus();
|
|
break;
|
|
|
|
case "restart":
|
|
this.resetGame("restart");
|
|
AUDIO_LOAD_HELPER.playSound("new");
|
|
this.gameView.getGameFieldView().grabFocus();
|
|
break;
|
|
|
|
case "menu":
|
|
this.menuView.setVisible(true);
|
|
AUDIO_LOAD_HELPER.startMusic("game");
|
|
this.resetGame("menu");
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Function to reset the game
|
|
*/
|
|
private void resetGame(String source) {
|
|
this.gameView.dispose();
|
|
|
|
if (source.equals("restart")) {
|
|
this.levelModel = new LevelModel(this.nav.getPickedLevelIdentifier());
|
|
this.gameView = new GameView(this, levelModel);
|
|
this.gameView.setVisible(true);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return the game view
|
|
*
|
|
* @return gameView
|
|
*/
|
|
public GameView getGameView() {
|
|
return gameView;
|
|
}
|
|
|
|
// dead code
|
|
//
|
|
//public void setGameView(GameView gameView) {
|
|
// this.gameView = gameView;
|
|
//}
|
|
} |