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 *