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"?>
<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" />
</component>
</project>

View File

@ -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 <me@colinleverger.fr>
* @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);
}

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