package games.fighter.JerryJackExample.controller.levels; import java.util.List; import java.util.ResourceBundle; import util.Vector; import util.input.*; import vooga.fighter.controller.Controller; import vooga.fighter.controller.GameManager; import vooga.fighter.controller.gameinformation.GameInfo; import vooga.fighter.controller.interfaces.ControllerDelegate; import vooga.fighter.controller.interfaces.ModeCondition; import vooga.fighter.controller.levels.LevelController; import vooga.fighter.controller.levels.OneVOneController; import vooga.fighter.forces.Force; import vooga.fighter.forces.ForceFactory; import vooga.fighter.model.mode.LevelMode; import vooga.fighter.model.mode.Mode; import vooga.fighter.model.objects.AttackObject; import vooga.fighter.model.objects.CharacterObject; import vooga.fighter.model.objects.EnvironmentObject; import vooga.fighter.model.objects.GameObject; import vooga.fighter.util.CollisionDetector; import vooga.fighter.view.Canvas; import vooga.fighter.view.FourPlayerMatchGameLayout; /** * A 1v1 fighting game instance * * @author Jerry Li * @author by Jack Matteucci * * Great class to reference when subclasing level controller */ @InputClassTarget public class OneVOne extends OneVOneController { private static final String INPUT_PATHWAY = "config.threedefault"; private static final int PLAYER_ONE = 0; private static final int PLAYER_TWO = 1; private static final int PLAYER_THREE = 2; private static final int THREE_PLAYERS = 2; private static final int ATTACK_DELAY = 10; private CollisionDetector myCollisionDetector; private int myPlayerOneTicker; private int myPlayerTwoTicker; private int myPlayerThreeTicker; /** * Initial constructor */ public OneVOne() { super(); } /** * Concrete constructor * @param name name of controller * @param frame frame * @param manager ControllerManager * @param gameinfo GameInfo * @param filepath FilePath */ public OneVOne(String name, Canvas frame, ControllerDelegate manager, GameInfo gameinfo, String filepath) { super(name, frame, manager, gameinfo, filepath); myCollisionDetector = new CollisionDetector(); myPlayerOneTicker = 0; myPlayerTwoTicker = 0; myPlayerThreeTicker = 0; if(getGameInfo().getNumCharacters()>THREE_PLAYERS) getInput().replaceMappingResourcePath( getHardFilePath() + INPUT_PATHWAY ); } /** * Return concrete controller */ @Override public Controller getController(String name, Canvas frame, ControllerDelegate manager, GameInfo gameinfo, String filepath) { Controller controller = new OneVOne(name, frame, manager, gameinfo, filepath); return controller; } /** * Details movement inputs * @param alObj */ @InputMethodTarget(name = "player1_jump") public void playerOneJumpInput (AlertObject alObj) { for(GameObject object : getMode().getMyObjects()){ if(object instanceof EnvironmentObject && myCollisionDetector.hitTop(object.getCurrentState().getCurrentRectangle(), getInputObjects().get(PLAYER_ONE).getCurrentState().getCurrentRectangle() )){ getInputObjects().get(PLAYER_ONE).jump(); break; } } } @Override @InputMethodTarget(name = "player2_jump") public void playerTwoJumpInput (AlertObject alObj) { for(GameObject object : getMode().getMyObjects()){ if(object instanceof EnvironmentObject && myCollisionDetector.hitTop(object.getCurrentState().getCurrentRectangle(), getInputObjects().get(PLAYER_TWO).getCurrentState().getCurrentRectangle() )){ getInputObjects().get(PLAYER_TWO).jump(); break; } } } @Override @InputMethodTarget(name = "player1_punch") public void playerOneWeakPunchInput (AlertObject alObj) { if(myPlayerOneTicker>ATTACK_DELAY){ AttackObject attack = getInputObjects().get(PLAYER_ONE).attack("weakPunch"); getMode().addObject(attack); myPlayerOneTicker=0; } } @Override @InputMethodTarget(name = "player2_punch") public void playerTwoAttacInput (AlertObject alObj) { if(myPlayerTwoTicker>ATTACK_DELAY){ AttackObject attack = getInputObjects().get(PLAYER_TWO).attack("weakPunch"); getMode().addObject(attack); myPlayerTwoTicker=0; } } @InputMethodTarget(name = "player1_kick") public void playerOneKicknput(AlertObject alObj) { if(myPlayerOneTicker>ATTACK_DELAY){ AttackObject newAttack = getInputObjects().get(PLAYER_ONE).attack("kick"); getMode().addObject(newAttack); myPlayerTwoTicker=0; } } @InputMethodTarget(name = "player2_kick") public void playerTwoKickInput(AlertObject alObj) { if(myPlayerTwoTicker>ATTACK_DELAY){ AttackObject newAttack = getInputObjects().get(PLAYER_TWO).attack("kick"); getMode().addObject(newAttack); myPlayerTwoTicker=0; } } @InputMethodTarget(name = "player3_jump") public void playerThreeJumpInput (AlertObject alObj) { for(GameObject object : getMode().getMyObjects()){ if(object instanceof EnvironmentObject && myCollisionDetector.hitTop(object.getCurrentState().getCurrentRectangle(), getInputObjects().get(PLAYER_THREE).getCurrentState().getCurrentRectangle() )){ getInputObjects().get(PLAYER_THREE).jump(); break; } } } @InputMethodTarget(name = "player3_punch") public void playerThreeAttackInput (AlertObject alObj) { if(myPlayerThreeTicker>ATTACK_DELAY){ AttackObject attack = getInputObjects().get(PLAYER_THREE).attack("weakPunch"); getMode().addObject(attack); myPlayerThreeTicker=0; } } @InputMethodTarget(name = "player3_kick") public void playerThreeKicknput(AlertObject alObj) { if(myPlayerThreeTicker>ATTACK_DELAY){ AttackObject newAttack = getInputObjects().get(PLAYER_THREE).attack("kick"); getMode().addObject(newAttack); myPlayerThreeTicker=0; } } @InputMethodTarget(name = "player3_left") public void playerThreeLeftInput (AlertObject alObj) { getInputObjects().get(PLAYER_THREE).move(180); } @InputMethodTarget(name = "player3_right") public void playerThreeRightInput(AlertObject alObj) { getInputObjects().get(PLAYER_THREE).move(0); } /** * The developer has chosen to use the update to keep track of tickers * for each character. */ @Override protected void developerUpdate(){ myPlayerOneTicker++; myPlayerTwoTicker++; myPlayerThreeTicker++; } /** * Removes listener */ @Override public void removeListener(){ super.removeListener(); getInput().removeListener(this); } protected void tallyWinners(LevelMode levelmode, int index){ for(int j = 0; j < levelmode.getCharacterObjects().size(); j++){ if(j!=index) getGameInfo().addWinners(j); getGameInfo().addScore(levelmode.getCharacterObjects().get(j).getHealth().getHealth()); getGameInfo().addTotalScore(j, getGameInfo().getScore(j)); } } }