package vooga.scroller.level_management; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.ImageIcon; import util.Location; import vooga.scroller.level_editor.Level; import vooga.scroller.level_editor.LevelEditing; import vooga.scroller.level_editor.controllerSuite.LEGrid; import vooga.scroller.level_editor.model.LevelParser; import vooga.scroller.level_management.splash_page.SplashPage; import vooga.scroller.marioGame.spritesDefinitions.MarioLib; import vooga.scroller.scrollingmanager.ScrollingManager; import vooga.scroller.util.IGameComponent; import vooga.scroller.util.Pixmap; import vooga.scroller.util.mvc.IController; import vooga.scroller.util.mvc.vcFramework.WorkspaceView; import vooga.scroller.view.GameView; /** * Instantiates all of the levels for gameplay. * This is an utility class provided by the LevelEditing team. * @author Scott Valentine, Dagbedji Fagnisse * */ public class LevelFactory { private static String DEFAULT_LEVEL_FOLDER = "src/vooga/scroller/resources/sampleLevels/"; private LevelManager myLevelManager; // private LevelParser myLevelReader; private ScrollingManager mySM; private GameView myView; public LevelFactory (LevelManager lm, ScrollingManager sm, GameView gameView) { myLevelManager = lm; mySM = sm; myView = gameView; } public static Level buildLevel (int id, ScrollingManager sm, LEGrid grid) { Level result = new Level(id, sm, grid); return result; } private Level buildLevel (int id, LEGrid grid) { return buildLevel(id, mySM, grid); } /** * Generates levels to be displayed by the view and played by the model. * * @param view is the view used for level information. * @return a the first of the List of all levels that will be played in the game. */ public List<IGameComponent> generateLevels (String[] levelFileNames) { List<IGameComponent> gameComponents = new ArrayList<IGameComponent>(); for (int i = 0; i < levelFileNames.length; i++) { Level curr = buildLevel(i + 1, loadGridFromFile(levelFileNames[i])); gameComponents.add(curr); } return gameComponents; } protected IGameComponent linkLevels (SplashPage splash, List<IGameComponent> levels) { // SplashPage splash = // new SplashPage(MarioLib.makePixmap(splashPage), 0, myView, mySM); // hardcoded? thanks - David Winegar //splash.addDoor(new MarioLib.DoorPortal()); myLevelManager.put(splash.getDoor(), levels.get(0)); for (int i = 0; i < levels.size() - 1; i++) { myLevelManager.put(levels.get(i).getDoor(), levels.get(i + 1)); } myLevelManager.put(levels.get(levels.size() - 1).getDoor(), splash); return splash; } private static LEGrid loadGridFromFile (String filename) { // TODO: Factor this out. make editable. File f = (new File(filename)).getAbsoluteFile(); LEGrid result = (new LevelParser()).makeGridFromFile(f); return result; } public static Level[] generateLevels (ScrollingManager sm, String[] levelFileNames) { Level[] levels = new Level[levelFileNames.length]; for (int i=0; i<levelFileNames.length; i++) { Level curr = buildLevel(i+1, sm, loadGridFromFile(levelFileNames[i])); levels[i]=curr; } return levels; } }