package vooga.fighter.controller; import java.util.List; import java.util.Map; import util.input.Input; import vooga.fighter.controller.gameinformation.GameInfo; import vooga.fighter.controller.interfaces.ControllerDelegate; import vooga.fighter.view.Canvas; /** * Handles switching controllers. Uses ControllerFactory and * ControlProgressionManager * * @author Jack Matteucci * @author Jerry Li */ public class ControllerManager implements ControllerDelegate { private Map<String, Controller> myControllerMap; private List<Controller> myControllerList; private Controller myCurrentController; private Canvas myCanvas; private GameInfo myGameInfo; private ControlProgressionManager myProgressionManager; private static final String INPUT_PATHWAY = "config.menudefault"; private String myInputPath; private String myHardFilePath; private Input myInput; /** * Constructs a ControllerManager * * @param frame Canvas * @param gameinfo GameInfo * @param factory Factory * @param progressionmanager ControlProgressionManager(Handles logic of switching) */ public ControllerManager (Canvas frame, GameInfo gameinfo, ControllerFactory factory, ControlProgressionManager progressionmanager, String filepath) { myHardFilePath = filepath; myInputPath = myHardFilePath + INPUT_PATHWAY; myCanvas = frame; myInput = new Input(myInputPath, myCanvas); myControllerMap = factory.getMap(); myGameInfo = gameinfo; myProgressionManager = progressionmanager; myCurrentController = myProgressionManager.getNextController("MainMenu"); String name = myCurrentController.getName(); myCurrentController = myCurrentController.getController(name, frame, this, gameinfo, myHardFilePath); } /** * Starts current controller */ public void run () { myCurrentController.start(); } /** * the implemented ControllerDelegate method */ @Override public void notifyEndCondition (String string) { switchController(string); } /** * Switches controllers * * @param condition the controller name */ private void switchController (String condition) { myCurrentController.stop(); myCurrentController = myProgressionManager.getNextController(condition); myCurrentController = myCurrentController.getController(); String name = myCurrentController.getName(); myCurrentController = myCurrentController.getController(name, myCanvas, this, myGameInfo, myHardFilePath); myCurrentController.start(); } /** * Exits game */ @Override public void exit () { System.exit(0); } /** * Returns input */ @Override public Input getInput () { return myInput; } }