diff --git a/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java b/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java index ac24e653..31f07349 100644 --- a/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java +++ b/boulder-dash/src/fr/enssat/BoulderDash/helpers/LevelLoadHelper.java @@ -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) { diff --git a/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java b/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java index 2856a412..b8111599 100644 --- a/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java +++ b/boulder-dash/src/fr/enssat/BoulderDash/helpers/ModelConvertHelper.java @@ -16,13 +16,17 @@ import fr.enssat.BoulderDash.models.SteelWallModel; /** * ModelConvertHelper - * * Provides model conversion services. * * @author Valerian Saliou * @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); + }; } /** diff --git a/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java b/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java index cbb5415a..ba06170d 100644 --- a/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java +++ b/boulder-dash/src/fr/enssat/BoulderDash/models/LevelModel.java @@ -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)