package games.fighter.billMuenstermanJouster.controller; import java.awt.BorderLayout; import java.awt.Dimension; import java.util.Map; import javax.swing.JFrame; import vooga.fighter.model.loaders.MapLoader; import vooga.fighter.view.Canvas; import arcade.games.ArcadeInteraction; import arcade.games.Game; import arcade.games.GameData; import arcade.games.UserGameData; import vooga.fighter.controller.ControllerManager; import vooga.fighter.controller.gameinformation.GameInfo; /** * * @author Jack Matteucci * * This class is the highest level class in the Engine. * * It should definitely be subclassed when creating * a new game as it talks directly to the arcade. Specifically, * one should overwrite the setPath method as this sets a * new base filepath. * */ public class GameManager extends Game { public static final Dimension SIZE = new Dimension(800, 600); public static final String TITLE = "Fighter!"; public static final int THREE_TOP_HIGH_SCORES = 3; private static final String FILE_PATH = "vooga.fighter."; private Canvas myCanvas; private ControllerManager myControllerManager; private GameInfo myGameInfo; private String myHardFilePathway; public GameManager (ArcadeInteraction arcade) { super(arcade); setup(); ControllerFactory factory = new ControllerFactory(myCanvas, myHardFilePathway); ControlProgressionManager progressionmanager = makeProgression(factory.getMap()); myControllerManager = new ControllerManager(myCanvas, myGameInfo, factory, progressionmanager, myHardFilePathway); JFrame frame = makeFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(myCanvas, BorderLayout.CENTER); frame.pack(); frame.setVisible(true); } /** * Runs the entire engine */ @Override public void run () { myControllerManager.run(); } /** * Allows one to subclass and use own progression manager, which handles switching * levels */ protected ControlProgressionManager makeProgression(Map<String, Controller> map){ return new ControlProgressionManager(map); } @Override public UserGameData generateNewProfile () { return myGameInfo; } /** * Sets the File Pathway */ protected void setFilePathway (String pathway) { myHardFilePathway = pathway; } protected GameInfo getGameInfo () { return myGameInfo; } @Override public GameData generateNewGameProfile () { return null; } /** * Allows subclassing of gameInfo to includ new scores/functionality */ protected void setInfo (GameInfo info) { myGameInfo = info; } /** * Allows subclassing of canvas to include new view functionality */ protected void setCanvas (Canvas canvas) { myCanvas = canvas; } /** * Allows for new frame Title */ protected JFrame makeFrame () { return new JFrame(TITLE); } /** * The one method NEEDED to be overwritten by game developer */ protected void setup(){ setFilePathway(FILE_PATH); setCanvas(new Canvas(SIZE)); setInfo(new GameInfo(new MapLoader(myHardFilePathway).getMapNames())); } }