mv levelModel field up to superclass

This commit is contained in:
Daniel Langbein 2024-11-07 15:30:55 +01:00
parent 99db8d4956
commit f896028199
Signed by: langfingaz
GPG Key ID: 6C47C753F0823002
8 changed files with 643 additions and 640 deletions

View File

@ -0,0 +1,11 @@
package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.LevelModel;
public abstract class AbstractLevelController {
protected LevelModel levelModel;
public AbstractLevelController(LevelModel levelModel) {
this.levelModel = levelModel;
}
}

View File

@ -7,7 +7,7 @@ import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
/**
* ElementPositionUpdateHelper
*
* <p>
* Updates position of all elements displayed on the map, according to their
* next potential position. Each object has a weight, which is used to compare
* their power to destroy in the food chain. Sorry for that Darwinism.
@ -15,8 +15,7 @@ import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class BoulderAndDiamondController implements Runnable {
private LevelModel levelModel;
public class BoulderAndDiamondController extends AbstractLevelController implements Runnable {
private AudioLoadHelper audioLoadHelper;
private Thread elementMovingThread;
@ -26,7 +25,7 @@ public class BoulderAndDiamondController implements Runnable {
* @param levelModel Level model
*/
public BoulderAndDiamondController(LevelModel levelModel, AudioLoadHelper audioLoadHelper) {
this.levelModel = levelModel;
super(levelModel);
this.audioLoadHelper = audioLoadHelper;
// Start thread
@ -39,7 +38,7 @@ public class BoulderAndDiamondController implements Runnable {
*/
public void run() {
while (this.levelModel.isGameRunning()) {
if(!this.levelModel.getGamePaused()){
if (!this.levelModel.getGamePaused()) {
this.manageFallingObject();
}
try {
@ -61,7 +60,7 @@ public class BoulderAndDiamondController implements Runnable {
// Gets the spriteName of actual DisplayableElementModel object scanned
DisplayableElementModel elementModel = this.levelModel.getGroundLevelModel()[x][y];
if(elementModel == null) {
if (elementModel == null) {
elementModel = new DirtModel();
}
@ -70,8 +69,8 @@ public class BoulderAndDiamondController implements Runnable {
// If it is a boulder or a diamond...
if (spriteName == "boulder" || spriteName == "diamond") {
this.manageFall(x, y);
} else if(spriteName == "expandingwall"){
if(this.expandWall(x,y).equals("left")){
} else if (spriteName == "expandingwall") {
if (this.expandWall(x, y).equals("left")) {
x -= 1;
}
}
@ -92,12 +91,12 @@ public class BoulderAndDiamondController implements Runnable {
String spriteNameRight = elementRight.getSpriteName();
String way = "";
if(spriteNameLeft == "black"){
this.levelModel.expandThisWallToLeft(x,y);
if (spriteNameLeft == "black") {
this.levelModel.expandThisWallToLeft(x, y);
way = "left";
}
if(spriteNameRight == "black"){
this.levelModel.expandThisWallToRight(x,y);
if (spriteNameRight == "black") {
this.levelModel.expandThisWallToRight(x, y);
way = "right";
}
return way;
@ -143,9 +142,9 @@ public class BoulderAndDiamondController implements Runnable {
this.levelModel.setGameRunning(false);
} else if (spriteNameBelow == "magicwall") {
if (this.levelModel.getGroundLevelModel()[x][y].getSpriteName() == "boulder"
&& (this.levelModel.getGroundLevelModel()[x][y+2].getSpriteName() == "dirt" ||
this.levelModel.getGroundLevelModel()[x][y+2].getSpriteName() == "black")) {
if(this.levelModel.getGroundLevelModel()[x][y].isConvertible()) {
&& (this.levelModel.getGroundLevelModel()[x][y + 2].getSpriteName() == "dirt" ||
this.levelModel.getGroundLevelModel()[x][y + 2].getSpriteName() == "black")) {
if (this.levelModel.getGroundLevelModel()[x][y].isConvertible()) {
this.levelModel.transformThisBoulderIntoADiamond(x, y);
} else {
this.levelModel.deleteThisBoulder(x, y);

View File

@ -2,7 +2,6 @@ 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;
@ -12,15 +11,14 @@ import java.awt.event.ActionListener;
/**
* 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 implements ActionListener {
private LevelModel levelModel;
public class GameController extends AbstractLevelController implements ActionListener {
private AudioLoadHelper audioLoadHelper;
private boolean firstClickOnPause;
private MenuView menuView;
@ -34,11 +32,12 @@ public class GameController implements ActionListener {
* @param navigationBetweenViewController
*/
public GameController(LevelModel levelModel, AudioLoadHelper audioLoadHelper, NavigationBetweenViewController navigationBetweenViewController) {
super(levelModel);
this.firstClickOnPause = true;
this.navigationBetweenViewController = navigationBetweenViewController;
this.levelModel = levelModel;
this.audioLoadHelper = audioLoadHelper;
this.gameView = new GameView(this, levelModel);
this.menuView = navigationBetweenViewController.getMenuView();
@ -53,11 +52,11 @@ public class GameController implements ActionListener {
* @param event Action event
*/
public void actionPerformed(ActionEvent event) {
switch(event.getActionCommand()) {
switch (event.getActionCommand()) {
case "pause":
if(this.firstClickOnPause) {
if (this.firstClickOnPause) {
this.levelModel.setGamePaused(true);
} else if(!this.firstClickOnPause) {
} else if (!this.firstClickOnPause) {
this.levelModel.setGamePaused(false);
}
@ -85,7 +84,7 @@ public class GameController implements ActionListener {
private void resetGame(String source) {
this.gameView.dispose();
if(source.equals("restart")){
if (source.equals("restart")) {
this.levelModel = new LevelModel(this.navigationBetweenViewController.getPickedLevelIdentifier(), audioLoadHelper);
this.gameView = new GameView(this, levelModel);
this.gameView.setVisible(true);
@ -103,6 +102,7 @@ public class GameController implements ActionListener {
/**
* Return the game view
*
* @return gameView
*/
public GameView getGameView() {
@ -111,6 +111,7 @@ public class GameController implements ActionListener {
/**
* Set the gameView
*
* @param gameView
*/
public void setGameView(GameView gameView) {

View File

@ -2,8 +2,6 @@ package fr.enssat.BoulderDash.controllers;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.controllers.RockfordUpdateController;
import fr.enssat.BoulderDash.controllers.BoulderAndDiamondController;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import java.awt.event.KeyEvent;
@ -12,22 +10,22 @@ import java.awt.event.KeyListener;
/**
* GameKeyController
*
* <p>
* Manages the key events controller.
*
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class GameKeyController implements KeyListener {
private LevelModel levelModel;
public class GameKeyController extends AbstractLevelController implements KeyListener {
private RockfordUpdateController updatePosRockford;
/**
* Class constructor
*
* @param levelModel Level model
*/
public GameKeyController(LevelModel levelModel, AudioLoadHelper audioLoadHelper) {
this.levelModel = levelModel;
super(levelModel);
new BoulderAndDiamondController(levelModel, audioLoadHelper);
this.updatePosRockford = new RockfordUpdateController(levelModel);
}

View File

@ -9,20 +9,18 @@ import fr.enssat.BoulderDash.helpers.LevelSaveHelper;
import fr.enssat.BoulderDash.models.LevelModel;
import fr.enssat.BoulderDash.views.HelpView;
import fr.enssat.BoulderDash.views.LevelEditorView;
import fr.enssat.BoulderDash.controllers.NavigationBetweenViewController;
import javax.swing.*;
/**
* LevelEditorController
*
* <p>
* Manages the level editor controller.
*
* @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-19
*/
public class LevelEditorController implements ActionListener {
private LevelModel levelModel;
public class LevelEditorController extends AbstractLevelController implements ActionListener {
private LevelEditorView levelEditorView;
private NavigationBetweenViewController nav;
@ -32,7 +30,7 @@ public class LevelEditorController implements ActionListener {
* @param levelModel Level model
*/
public LevelEditorController(LevelModel levelModel, NavigationBetweenViewController nav) {
this.levelModel = levelModel;
super(levelModel);
this.levelModel.setShowCursor(true);
this.nav = nav;
@ -50,7 +48,7 @@ public class LevelEditorController implements ActionListener {
* @param event Action event
*/
public void actionPerformed(ActionEvent event) {
switch(event.getActionCommand()) {
switch (event.getActionCommand()) {
case "menu":
this.levelEditorView.setVisible(false);
this.nav.setMenuView();
@ -67,7 +65,7 @@ public class LevelEditorController implements ActionListener {
String levelId = this.levelEditorView.getSelectedLevel();
LevelSaveHelper levelSave;
if(levelId == null || levelId.isEmpty()) {
if (levelId == null || levelId.isEmpty()) {
// Create a new level
levelSave = new LevelSaveHelper(levelModel.getGroundLevelModel());
} else {
@ -79,7 +77,7 @@ public class LevelEditorController implements ActionListener {
JOptionPane.showMessageDialog(frameDialog, "Level saved");
this.levelEditorView.openedLevelChange(levelSave.getLevelId());
} catch(LevelConstraintNotRespectedException e) {
} catch (LevelConstraintNotRespectedException e) {
JFrame frameDialog = new JFrame("Error");
JOptionPane.showMessageDialog(frameDialog, e.getMessage());
}
@ -90,7 +88,7 @@ public class LevelEditorController implements ActionListener {
String levelId = this.levelEditorView.getSelectedLevel();
JFrame frameDialog = new JFrame("Info");
if(levelId == null || levelId.isEmpty()) {
if (levelId == null || levelId.isEmpty()) {
JOptionPane.showMessageDialog(frameDialog, "Level not yet saved, no need to delete it!");
} else {
new LevelRemoveHelper(levelId);

View File

@ -9,14 +9,13 @@ import java.awt.event.KeyListener;
/**
* LevelEditorKeyController
*
* <p>
* Manages the key events controller.
*
* @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-21
*/
public class LevelEditorKeyController implements KeyListener {
private LevelModel levelModel;
public class LevelEditorKeyController extends AbstractLevelController implements KeyListener {
private LevelEditorView levelEditorView;
private boolean capLocks;
@ -27,7 +26,7 @@ public class LevelEditorKeyController implements KeyListener {
* @param levelEditorView Level editor view
*/
public LevelEditorKeyController(LevelModel levelModel, LevelEditorView levelEditorView) {
this.levelModel = levelModel;
super(levelModel);
this.capLocks = false;
this.levelEditorView = levelEditorView;
}
@ -72,7 +71,7 @@ public class LevelEditorKeyController implements KeyListener {
}
// Hold block change (quick edit)
if(capLocks) {
if (capLocks) {
this.levelModel.triggerBlockChange(this.levelEditorView.getPickedBlockValue());
}
}

View File

@ -13,13 +13,11 @@ import fr.enssat.BoulderDash.controllers.GameController;
* Controller to navigate between the different views
*
* @author Colin Leverger <me@colinleverger.fr>
*
*/
public class NavigationBetweenViewController implements ActionListener {
private LevelEditorController levelEditorController;
private MenuView menuView;
private AudioLoadHelper audioLoadHelper;
private LevelModel levelModelForGame, levelModelForEditor;
private GameController gameController;
private String pickedLevelIdentifier;
@ -50,8 +48,8 @@ public class NavigationBetweenViewController implements ActionListener {
case "editor":
// New blank model for editor
this.levelModelForEditor = new LevelModel(audioLoadHelper);
this.levelEditorController = new LevelEditorController(this.levelModelForEditor, this);
LevelModel levelModelForEditor = new LevelModel(audioLoadHelper);
this.levelEditorController = new LevelEditorController(levelModelForEditor, this);
this.levelEditorController.getLevelEditorView().setVisible(true);
this.levelEditorController.getLevelEditorView().getLevelEditorGroundView().grabFocus();
@ -66,7 +64,7 @@ public class NavigationBetweenViewController implements ActionListener {
// Reinit the levelModelForGame...
pickedLevelIdentifier = this.menuView.getLevelIdentifier();
this.levelModelForGame = new LevelModel(pickedLevelIdentifier, audioLoadHelper);
LevelModel levelModelForGame = new LevelModel(pickedLevelIdentifier, audioLoadHelper);
this.gameController = new GameController(levelModelForGame, audioLoadHelper, this);
if (levelEditorController != null) {

View File

@ -4,7 +4,7 @@ import fr.enssat.BoulderDash.models.LevelModel;
/**
* ElementPositionUpdateHelper
*
* <p>
* Updates position of all elements displayed on the map, according to their
* next potential position. Each object has a weight, which is used to compare
* their power to destroy in the food chain. Sorry for that Darwinism.
@ -12,8 +12,7 @@ import fr.enssat.BoulderDash.models.LevelModel;
* @author Colin Leverger <me@colinleverger.fr>
* @since 2015-06-19
*/
public class RockfordUpdateController implements Runnable {
private LevelModel levelModel;
public class RockfordUpdateController extends AbstractLevelController implements Runnable {
private Thread elementMovingThread;
private int rockfordPositionX;
private int rockfordPositionY;
@ -25,7 +24,7 @@ public class RockfordUpdateController implements Runnable {
* @param levelModel Level model
*/
public RockfordUpdateController(LevelModel levelModel) {
this.levelModel = levelModel;
super(levelModel);
this.elementMovingThread = new Thread(this);
this.elementMovingThread.start();
this.rockfordHasMoved = false;
@ -36,7 +35,7 @@ public class RockfordUpdateController implements Runnable {
*/
public void run() {
while (this.levelModel.isGameRunning()) {
if(!this.levelModel.getGamePaused()){
if (!this.levelModel.getGamePaused()) {
if (this.rockfordHasMoved) {
this.levelModel.setPositionOfRockford(rockfordPositionX, rockfordPositionY);
this.rockfordHasMoved = false;