diff --git a/.idea/misc.xml b/.idea/misc.xml
index 4b09d600..9b2ea2a4 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,9 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/src/fr/enssat/BoulderDash/controllers/GameController.java b/src/fr/enssat/BoulderDash/controllers/GameController.java
index 2a921c9c..fe964e6f 100644
--- a/src/fr/enssat/BoulderDash/controllers/GameController.java
+++ b/src/fr/enssat/BoulderDash/controllers/GameController.java
@@ -2,12 +2,10 @@ package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
-import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import fr.enssat.BoulderDash.views.MenuView;
import fr.enssat.BoulderDash.views.GameView;
import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
/**
@@ -19,14 +17,12 @@ import java.awt.event.ActionListener;
* @author Colin Leverger
* @since 2015-06-19
*/
-public class GameController implements ActionListener {
- private LevelModel levelModel;
+public class GameController extends GameModuleController {
private AudioLoadHelper audioLoadHelper;
private boolean firstClickOnPause;
private MenuView menuView;
private GameView gameView;
- private NavigationBetweenViewController navigationBetweenViewController;
-
+
/**
* Class constructor
*
@@ -34,11 +30,9 @@ public class GameController implements ActionListener {
* @param navigationBetweenViewController
*/
public GameController(LevelModel levelModel, AudioLoadHelper audioLoadHelper, NavigationBetweenViewController navigationBetweenViewController) {
- this.firstClickOnPause = true;
-
- this.navigationBetweenViewController = navigationBetweenViewController;
-
- this.levelModel = levelModel;
+ super(levelModel, navigationBetweenViewController);
+ this.firstClickOnPause = true;
+
this.audioLoadHelper = audioLoadHelper;
this.gameView = new GameView(this, levelModel);
this.menuView = navigationBetweenViewController.getMenuView();
@@ -52,14 +46,12 @@ public class GameController implements ActionListener {
*
* @param event Action event
*/
+ @Override
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);
- }
+ LevelModel levelModel = getLevelModel();
+ levelModel.setGamePaused(this.firstClickOnPause);
this.firstClickOnPause = !this.firstClickOnPause;
this.gameView.getGameFieldView().grabFocus();
@@ -86,7 +78,8 @@ public class GameController implements ActionListener {
this.gameView.dispose();
if(source.equals("restart")){
- this.levelModel = new LevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
+ resetLevelModel(this.audioLoadHelper);
+ LevelModel levelModel = getLevelModel();
this.gameView = new GameView(this, levelModel);
this.gameView.setVisible(true);
}
diff --git a/src/fr/enssat/BoulderDash/controllers/GameModuleController.java b/src/fr/enssat/BoulderDash/controllers/GameModuleController.java
new file mode 100644
index 00000000..b263f5b9
--- /dev/null
+++ b/src/fr/enssat/BoulderDash/controllers/GameModuleController.java
@@ -0,0 +1,38 @@
+package fr.enssat.BoulderDash.controllers;
+
+import fr.enssat.BoulderDash.exceptions.LevelConstraintNotRespectedException;
+import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
+import fr.enssat.BoulderDash.models.LevelModel;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+public abstract class GameModuleController implements ActionListener {
+ private LevelModel levelModel;
+ private NavigationBetweenViewController nav;
+
+ public GameModuleController(LevelModel levelModel, NavigationBetweenViewController nav) {
+ this.levelModel = levelModel;
+ this.nav = nav;
+ }
+
+ public abstract void actionPerformed(ActionEvent event);
+
+ /**
+ * Gets level model
+ *
+ * @return Level model
+ */
+ public LevelModel getLevelModel() {
+ return this.levelModel;
+ }
+
+ protected void menuActionPerformed() {
+ this.nav.setMenuView();
+ this.nav.getAudioLoadHelper().startMusic("game");
+ }
+
+ protected void resetLevelModel(AudioLoadHelper audioLoadHelper) {
+ this.levelModel = new LevelModel(this.nav.getPickedLevelIdentifier(), audioLoadHelper);
+ }
+}
diff --git a/src/fr/enssat/BoulderDash/controllers/LevelEditorController.java b/src/fr/enssat/BoulderDash/controllers/LevelEditorController.java
index c5a7a410..248ae4e0 100644
--- a/src/fr/enssat/BoulderDash/controllers/LevelEditorController.java
+++ b/src/fr/enssat/BoulderDash/controllers/LevelEditorController.java
@@ -21,10 +21,8 @@ import javax.swing.*;
* @author Valerian Saliou
* @since 2015-06-19
*/
-public class LevelEditorController implements ActionListener {
- private LevelModel levelModel;
- private LevelEditorView levelEditorView;
- private NavigationBetweenViewController nav;
+public class LevelEditorController extends GameModuleController {
+ private LevelEditorView levelEditorView;
/**
* Class constructor'
@@ -32,16 +30,15 @@ public class LevelEditorController implements ActionListener {
* @param levelModel Level model
*/
public LevelEditorController(LevelModel levelModel, NavigationBetweenViewController nav) {
- this.levelModel = levelModel;
- this.levelModel.setShowCursor(true);
+ super(levelModel, nav);
+ levelModel.setShowCursor(true);
+
+ nav.getAudioLoadHelper().stopMusic();
- this.nav = nav;
- this.nav.getAudioLoadHelper().stopMusic();
-
this.levelEditorView = new LevelEditorView(this, levelModel, nav);
// Pre-bind event watcher (hack to fix a Java issue)
- this.levelModel.decrementCursorXPosition();
+ levelModel.decrementCursorXPosition();
}
/**
@@ -49,19 +46,21 @@ public class LevelEditorController implements ActionListener {
*
* @param event Action event
*/
+ @Override
public void actionPerformed(ActionEvent event) {
switch(event.getActionCommand()) {
case "menu":
this.levelEditorView.setVisible(false);
- this.nav.setMenuView();
- this.nav.getAudioLoadHelper().startMusic("game");
+ super.menuActionPerformed();
break;
case "save":
+ LevelModel levelModel = getLevelModel();
+
// Check constraints
try {
- this.levelModel.checkConstraints();
+ levelModel.checkConstraints();
// Save action (direct save)
String levelId = this.levelEditorView.getSelectedLevel();
@@ -121,15 +120,6 @@ public class LevelEditorController implements ActionListener {
return levelEditorView;
}
- /**
- * Gets level model
- *
- * @return Level model
- */
- public LevelModel getLevelModel() {
- return this.levelModel;
- }
-
/**
* Sets the level editor view
*