add Singleton in ModelConvertHelper

This commit is contained in:
Artem Semenovykh 2024-11-16 13:10:18 +01:00
parent 415abbc47b
commit 61e87948ab
3 changed files with 39 additions and 81 deletions

View File

@ -2,17 +2,8 @@ package fr.enssat.BoulderDash.helpers;
import fr.enssat.BoulderDash.exceptions.UnknownModelException; import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.RockfordModel; import fr.enssat.BoulderDash.models.RockfordModel;
import fr.enssat.BoulderDash.models.DisplayableElementModel; import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.EmptyModel;
import fr.enssat.BoulderDash.models.BrickWallModel;
import fr.enssat.BoulderDash.models.BoulderModel;
import fr.enssat.BoulderDash.models.DiamondModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.MagicWallModel;
import fr.enssat.BoulderDash.models.SteelWallModel;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
@ -258,8 +249,8 @@ public class LevelLoadHelper {
* @param lineIndex Position in line (vertical axis) * @param lineIndex Position in line (vertical axis)
*/ */
private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException { private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
ModelConvertHelper modelConvert = new ModelConvertHelper(); ModelConvertHelper modelConvert = ModelConvertHelper.getInstance();
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible); DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
// Custom actions? // Custom actions?
switch (spriteName) { switch (spriteName) {

View File

@ -16,13 +16,17 @@ import fr.enssat.BoulderDash.models.SteelWallModel;
/** /**
* ModelConvertHelper * ModelConvertHelper
*
* Provides model conversion services. * Provides model conversion services.
* *
* @author Valerian Saliou <valerian@valeriansaliou.name> * @author Valerian Saliou <valerian@valeriansaliou.name>
* @since 2015-06-22 * @since 2015-06-22
*/ */
public class ModelConvertHelper { public class ModelConvertHelper {
/**
* Holds the single instance of the class.
*/
private static ModelConvertHelper instance = null;
/** /**
* Class constructor * Class constructor
*/ */
@ -30,6 +34,18 @@ public class ModelConvertHelper {
// Nothing done. // Nothing done.
} }
/**
* Gets the single instance of the ModelConvertHelper.
* Creates the instance if it doesn't exist.
*
* @return The single instance of the ModelConvertHelper.
*/
public static synchronized ModelConvertHelper getInstance() {
if (instance == null) {
instance = new ModelConvertHelper();
}
return instance;
}
/** /**
* Gets the model associated to the string * Gets the model associated to the string
* *
@ -37,60 +53,19 @@ public class ModelConvertHelper {
* @return Model associated to given sprite name * @return Model associated to given sprite name
*/ */
public DisplayableElementModel toModel(String spriteName, boolean isConvertible) throws UnknownModelException { public DisplayableElementModel toModel(String spriteName, boolean isConvertible) throws UnknownModelException {
DisplayableElementModel element; // Instantiates the sprite element matching the given sprite name
return switch (spriteName) {
// Instanciates the sprite element matching the given sprite name case "black", "Black" -> new EmptyModel();
switch (spriteName) { case "boulder", "Boulder" -> new BoulderModel(isConvertible);
case "black": case "brickwall", "Brick Wall" -> new BrickWallModel();
case "Black": case "diamond", "Diamond" -> new DiamondModel();
element = new EmptyModel(); case "dirt", "Dirt" -> new DirtModel();
break; case "magicwall", "Magic Wall" -> new MagicWallModel();
case "rockford", "Rockford" -> new RockfordModel();
case "boulder": case "steelwall", "Steel Wall" -> new SteelWallModel();
case "Boulder": case "expandingwall", "Expanding Wall" -> new ExpandingWallModel();
element = new BoulderModel(isConvertible); default -> throw new UnknownModelException("Unknown model element > " + spriteName);
break; };
case "brickwall":
case "Brick Wall":
element = new BrickWallModel();
break;
case "diamond":
case "Diamond":
element = new DiamondModel();
break;
case "dirt":
case "Dirt":
element = new DirtModel();
break;
case "magicwall":
case "Magic Wall":
element = new MagicWallModel();
break;
case "rockford":
case "Rockford":
element = new RockfordModel();
break;
case "steelwall":
case "Steel Wall":
element = new SteelWallModel();
break;
case "expandingwall":
case "Expanding Wall":
element = new ExpandingWallModel();
break;
default:
throw new UnknownModelException("Unknown model element > " + spriteName);
}
return element;
} }
/** /**

View File

@ -5,16 +5,6 @@ import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.helpers.LevelLoadHelper; import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper; import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
import fr.enssat.BoulderDash.helpers.ModelConvertHelper; import fr.enssat.BoulderDash.helpers.ModelConvertHelper;
import fr.enssat.BoulderDash.models.DisplayableElementModel;
import fr.enssat.BoulderDash.models.RockfordModel;
import fr.enssat.BoulderDash.models.GameInformationModel;
import fr.enssat.BoulderDash.models.SteelWallModel;
import fr.enssat.BoulderDash.models.EmptyModel;
import fr.enssat.BoulderDash.models.DiamondModel;
import fr.enssat.BoulderDash.models.DoorModel;
import fr.enssat.BoulderDash.models.DirtModel;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.CursorModel;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.util.Observable; import java.util.Observable;
@ -48,6 +38,11 @@ public class LevelModel extends Observable implements Runnable {
private boolean gamePaused; private boolean gamePaused;
// Are we in editor or game mode ? // Are we in editor or game mode ?
private String mode; private String mode;
/**
* Gets the single instance of the ModelConvertHelper.
*/
private ModelConvertHelper modelConverter = ModelConvertHelper.getInstance();
/** /**
* Sprite animation thread * Sprite animation thread
@ -283,18 +278,15 @@ public class LevelModel extends Observable implements Runnable {
return; return;
} }
// Grab model value
ModelConvertHelper modelConverter = new ModelConvertHelper();
DisplayableElementModel targetModel;
int xPos, yPos; int xPos, yPos;
xPos = this.getCursorXPosition(); xPos = this.getCursorXPosition();
yPos = this.getCursorYPosition(); yPos = this.getCursorYPosition();
try { try {
targetModel = modelConverter.toModel(blockValue, false); DisplayableElementModel targetModel = modelConverter.toModel(blockValue, false);
// Apply new model in place of cursor // Apply new model in place of cursor
this.groundGrid[xPos + 1][yPos + 1] = targetModel; this.groundGrid[xPos + 1][yPos + 1] = targetModel;
// Disable cursor (important) // Disable cursor (important)