package games.fighter.davidalan.controller.levels; import java.util.ArrayList; import java.util.List; import util.input.AlertObject; import util.input.InputClassTarget; import util.input.InputMethodTarget; import util.input.PositionObject; import vooga.fighter.controller.Controller; import vooga.fighter.controller.displayinformation.DisplayLoopInfo; import vooga.fighter.controller.gameinformation.GameInfo; import vooga.fighter.controller.interfaces.ControllerDelegate; import vooga.fighter.controller.interfaces.ModeCondition; import vooga.fighter.model.MenuGrid; import vooga.fighter.model.mode.MenuMode; import vooga.fighter.model.mode.Mode; import vooga.fighter.model.objects.MouseClickObject; import vooga.fighter.model.objects.MouseObject; import vooga.fighter.util.CollisionManager; import vooga.fighter.view.Canvas; /** * Abstract MenuController class, details a class where * menu objects perform some functionality when selected * * @author Jerry Li * @author Jack Matteucci * */ @InputClassTarget public abstract class MenuController extends Controller { private static final String INPUT_PATHWAY = "config.menudefault"; private String myInputPathway; private List<ModeCondition> myEndConditions; /** * Initial constructor, used in reflection */ public MenuController () { super(); } /** * Concrete constructor, used when ControllerManager switches to this controller * @param name name of controller * @param frame canvas * @param manager ControlerManager * @param gameinfo GameInfo */ public MenuController(String name, Canvas frame, ControllerDelegate manager, GameInfo gameinfo, String pathway) { super(name, frame, manager, gameinfo, pathway); myInputPathway = getHardFilePath() + INPUT_PATHWAY; setInput(manager.getInput()); getInput().replaceMappingResourcePath(myInputPathway); getInput().addListenerTo(this); DisplayLoopInfo LoopInfo = new DisplayLoopInfo(super.getMode()); setLoopInfo(LoopInfo); myEndConditions = new ArrayList<ModeCondition>(); setupConditions(); } /** * Loads the mode associated with MenuController (MenuMode) */ @Override public void loadMode() { Mode mode = new MenuMode(new CollisionManager(), super.getName()); super.setMode(mode); } @Override public void initializeMode () { MenuGrid grid = new MenuGrid(getMode().getName(), getMode(), getHardFilePath()); getMode().setMenuGrid(grid); getMode().setMenuObjects(grid.getMenuObjects()); getMode().update(); } /** * Creates mouse object when mouse is clicked * @param pos */ @InputMethodTarget(name = "continue") public void mouseclick(PositionObject pos) { getMode().addObject(new MouseClickObject(pos.getPoint2D(), getHardFilePath())); } /** * Creates mouse object when mouse moves * @param pos */ @InputMethodTarget(name = "move") public void mousemove(PositionObject pos) { getMode().addObject(new MouseObject(pos.getPoint2D(), getHardFilePath())); } /** * */ @Override public void developerUpdate(){ } @InputMethodTarget(name = "left") public void left(AlertObject alObj) { if(getMode().inputReady()) getMode().left(); } @InputMethodTarget(name = "right") public void right(AlertObject alObj) { if(getMode().inputReady()) getMode().right(); } @InputMethodTarget(name = "up") public void up(AlertObject alObj) { if(getMode().inputReady()) getMode().up(); } @InputMethodTarget(name = "down") public void down(AlertObject alObj) { if(getMode().inputReady()) getMode().down(); } @InputMethodTarget(name = "enter") public void enter(AlertObject alObj) { if(getMode().inputReady()) getMode().setChoice(getMode().getCurrentMenu().getValue()); } @Override public MenuMode getMode(){ return (MenuMode) super.getMode(); } @Override public Controller getController() { return this; } @Override public void removeListener(){ super.removeListener(); getInput().removeListener(this); } protected void addEndCondition(ModeCondition condition){ myEndConditions.add(condition); } protected List<ModeCondition> getConditions(){ return myEndConditions; } public void setupConditions(){ addEndCondition(endcondition); } ModeCondition endcondition = new ModeCondition() { @Override public boolean checkCondition(Mode mode) { return !("".equals(getMode().peekChoice())); } }; }