Compare commits

...

1 Commits

Author SHA1 Message Date
Artem Semenovykh
61e87948ab add Singleton in ModelConvertHelper 2024-11-16 13:10:18 +01:00
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.helpers.ModelConvertHelper;
import fr.enssat.BoulderDash.models.ExpandingWallModel;
import fr.enssat.BoulderDash.models.RockfordModel;
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.Element;
@ -258,8 +249,8 @@ public class LevelLoadHelper {
* @param lineIndex Position in line (vertical axis)
*/
private DisplayableElementModel constructGridElement(String spriteName, int rowIndex, int lineIndex, boolean convertible) throws UnknownModelException {
ModelConvertHelper modelConvert = new ModelConvertHelper();
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
ModelConvertHelper modelConvert = ModelConvertHelper.getInstance();
DisplayableElementModel element = modelConvert.toModel(spriteName, convertible);
// Custom actions?
switch (spriteName) {

View File

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

View File

@ -5,16 +5,6 @@ import fr.enssat.BoulderDash.exceptions.UnknownModelException;
import fr.enssat.BoulderDash.helpers.LevelLoadHelper;
import fr.enssat.BoulderDash.helpers.AudioLoadHelper;
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.util.Observable;
@ -48,6 +38,11 @@ public class LevelModel extends Observable implements Runnable {
private boolean gamePaused;
// Are we in editor or game mode ?
private String mode;
/**
* Gets the single instance of the ModelConvertHelper.
*/
private ModelConvertHelper modelConverter = ModelConvertHelper.getInstance();
/**
* Sprite animation thread
@ -283,18 +278,15 @@ public class LevelModel extends Observable implements Runnable {
return;
}
// Grab model value
ModelConvertHelper modelConverter = new ModelConvertHelper();
DisplayableElementModel targetModel;
int xPos, yPos;
xPos = this.getCursorXPosition();
yPos = this.getCursorYPosition();
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;
// Disable cursor (important)