Created a superclass for GameController and LevelEditorController

This commit is contained in:
0nlineSam 2024-11-07 14:16:15 +01:00
parent db30b572ff
commit 2751521dd5
4 changed files with 64 additions and 40 deletions

5
.idea/misc.xml generated
View File

@ -1,6 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK"> <component name="PDMPlugin">
<option name="skipTestSources" value="false" />
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/classes" /> <output url="file://$PROJECT_DIR$/classes" />
</component> </component>
</project> </project>

View File

@ -2,12 +2,10 @@ package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.LevelModel; import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper; import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import fr.enssat.BoulderDash.views.MenuView; import fr.enssat.BoulderDash.views.MenuView;
import fr.enssat.BoulderDash.views.GameView; import fr.enssat.BoulderDash.views.GameView;
import java.awt.event.ActionEvent; import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/** /**
@ -19,14 +17,12 @@ import java.awt.event.ActionListener;
* @author Colin Leverger <me@colinleverger.fr> * @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19 * @since 2015-06-19
*/ */
public class GameController implements ActionListener { public class GameController extends GameModuleController {
private LevelModel levelModel;
private AudioLoadHelper audioLoadHelper; private AudioLoadHelper audioLoadHelper;
private boolean firstClickOnPause; private boolean firstClickOnPause;
private MenuView menuView; private MenuView menuView;
private GameView gameView; private GameView gameView;
private NavigationBetweenViewController navigationBetweenViewController;
/** /**
* Class constructor * Class constructor
* *
@ -34,11 +30,9 @@ public class GameController implements ActionListener {
* @param navigationBetweenViewController * @param navigationBetweenViewController
*/ */
public GameController(LevelModel levelModel, AudioLoadHelper audioLoadHelper, NavigationBetweenViewController navigationBetweenViewController) { public GameController(LevelModel levelModel, AudioLoadHelper audioLoadHelper, NavigationBetweenViewController navigationBetweenViewController) {
this.firstClickOnPause = true; super(levelModel, navigationBetweenViewController);
this.firstClickOnPause = true;
this.navigationBetweenViewController = navigationBetweenViewController;
this.levelModel = levelModel;
this.audioLoadHelper = audioLoadHelper; this.audioLoadHelper = audioLoadHelper;
this.gameView = new GameView(this, levelModel); this.gameView = new GameView(this, levelModel);
this.menuView = navigationBetweenViewController.getMenuView(); this.menuView = navigationBetweenViewController.getMenuView();
@ -52,14 +46,12 @@ public class GameController implements ActionListener {
* *
* @param event Action event * @param event Action event
*/ */
@Override
public void actionPerformed(ActionEvent event) { public void actionPerformed(ActionEvent event) {
switch(event.getActionCommand()) { switch(event.getActionCommand()) {
case "pause": case "pause":
if(this.firstClickOnPause) { LevelModel levelModel = getLevelModel();
this.levelModel.setGamePaused(true); levelModel.setGamePaused(this.firstClickOnPause);
} else if(!this.firstClickOnPause) {
this.levelModel.setGamePaused(false);
}
this.firstClickOnPause = !this.firstClickOnPause; this.firstClickOnPause = !this.firstClickOnPause;
this.gameView.getGameFieldView().grabFocus(); this.gameView.getGameFieldView().grabFocus();
@ -86,7 +78,8 @@ public class GameController implements ActionListener {
this.gameView.dispose(); this.gameView.dispose();
if(source.equals("restart")){ 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 = new GameView(this, levelModel);
this.gameView.setVisible(true); this.gameView.setVisible(true);
} }

View File

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

View File

@ -21,10 +21,8 @@ import javax.swing.*;
* @author Valerian Saliou <valerian@valeriansaliou.name> * @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-19 * @since 2015-06-19
*/ */
public class LevelEditorController implements ActionListener { public class LevelEditorController extends GameModuleController {
private LevelModel levelModel; private LevelEditorView levelEditorView;
private LevelEditorView levelEditorView;
private NavigationBetweenViewController nav;
/** /**
* Class constructor' * Class constructor'
@ -32,16 +30,15 @@ public class LevelEditorController implements ActionListener {
* @param levelModel Level model * @param levelModel Level model
*/ */
public LevelEditorController(LevelModel levelModel, NavigationBetweenViewController nav) { public LevelEditorController(LevelModel levelModel, NavigationBetweenViewController nav) {
this.levelModel = levelModel; super(levelModel, nav);
this.levelModel.setShowCursor(true); levelModel.setShowCursor(true);
nav.getAudioLoadHelper().stopMusic();
this.nav = nav;
this.nav.getAudioLoadHelper().stopMusic();
this.levelEditorView = new LevelEditorView(this, levelModel, nav); this.levelEditorView = new LevelEditorView(this, levelModel, nav);
// Pre-bind event watcher (hack to fix a Java issue) // 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 * @param event Action event
*/ */
@Override
public void actionPerformed(ActionEvent event) { public void actionPerformed(ActionEvent event) {
switch(event.getActionCommand()) { switch(event.getActionCommand()) {
case "menu": case "menu":
this.levelEditorView.setVisible(false); this.levelEditorView.setVisible(false);
this.nav.setMenuView(); super.menuActionPerformed();
this.nav.getAudioLoadHelper().startMusic("game");
break; break;
case "save": case "save":
LevelModel levelModel = getLevelModel();
// Check constraints // Check constraints
try { try {
this.levelModel.checkConstraints(); levelModel.checkConstraints();
// Save action (direct save) // Save action (direct save)
String levelId = this.levelEditorView.getSelectedLevel(); String levelId = this.levelEditorView.getSelectedLevel();
@ -121,15 +120,6 @@ public class LevelEditorController implements ActionListener {
return levelEditorView; return levelEditorView;
} }
/**
* Gets level model
*
* @return Level model
*/
public LevelModel getLevelModel() {
return this.levelModel;
}
/** /**
* Sets the level editor view * Sets the level editor view
* *