package games.scroller.letteradventure; import games.scroller.letteradventure.SpriteLibrary.Projectile; import java.awt.Dimension; import util.Vector; import util.input.InputClassTarget; import util.input.InputMethodTarget; import vooga.scroller.level_editor.Level; import vooga.scroller.level_management.IInputListener; import vooga.scroller.scrollingmanager.ScrollingManager; import vooga.scroller.sprites.Sprite; import vooga.scroller.sprites.animation.state_movement.MoveLeftState; import vooga.scroller.sprites.animation.state_movement.MoveRightState; import vooga.scroller.sprites.superclasses.Player; import vooga.scroller.statistics.Statistic; import vooga.scroller.util.Pixmap; import vooga.scroller.util.physics.Force; import vooga.scroller.util.physics.Gravity; import vooga.scroller.view.GameView; /** * The main player in LetterAdventure. * * @author Ellango, David Liu * */ @InputClassTarget public class EPlayer extends Player implements IInputListener{ private static final Pixmap E_VIEW = SpriteLibrary.makePixmap(SpriteLibrary.IMAGES_DIRECTORY , "e.jpg"); private static final int HEALTH = 1; private static final int DAMAGE = 0; private static final int SPEED = 300; private static final String INPUT_LOCATION = "games/scroller/letteradventure/LetterMapping"; private static final Vector JUMP_VELOCITY = new Vector(Sprite.UP_DIRECTION, 100); private static final double MAX_JUMP_VELOCITY = 0.5; private static final int INITIAL_SCORE = 10; private static final int SCORE_LOSS = 1; private Force myGravity; private Statistic myScore; public EPlayer(GameView gameView, ScrollingManager sm) { super(E_VIEW, SpriteLibrary.DEFAULT_SIZE, gameView, sm, HEALTH, DAMAGE); myGravity = new Gravity(this); intializeStates(); myScore = new Score(INITIAL_SCORE); } /** * Initialize all possible states, including movement for mario. */ private void intializeStates () { this.addPossibleState(MoveLeftState.STATE_ID, new MoveLeftState(this, E_VIEW, E_VIEW, SPEED)); this.addPossibleState(MoveRightState.STATE_ID, new MoveRightState(this, E_VIEW, E_VIEW, SPEED)); } @Override public void update (double elapsedTime, Dimension bounds) { myGravity.apply(); super.update(elapsedTime, bounds); } @Override public String getInputFilePath () { return INPUT_LOCATION; } /** * Score is lost for every time player dies. */ @Override public void handleDeath (Level level) { this.setCenter(level.getStartPoint().getX(), level.getStartPoint().getY()); this.setHealth(HEALTH); myScore.removeValue(SCORE_LOSS); } @InputMethodTarget(name = "leftstart") public void walkLeft () { this.activateState(MoveLeftState.STATE_ID); } @InputMethodTarget(name = "leftend") public void stopLeft () { this.deactivateState(MoveLeftState.STATE_ID); } @InputMethodTarget(name = "rightstart") public void walkRight () { this.activateState(MoveRightState.STATE_ID); } @InputMethodTarget(name = "rightend") public void stopRight () { this.deactivateState(MoveRightState.STATE_ID); } @InputMethodTarget(name = "jump") public void jump () { if (this.getVelocity().getComponentVector(Sprite.UP_DIRECTION).getMagnitude() < MAX_JUMP_VELOCITY && this.getVelocity().getComponentVector(Sprite.DOWN_DIRECTION).getMagnitude() < MAX_JUMP_VELOCITY) { addVector(JUMP_VELOCITY); } } @InputMethodTarget(name = "fire") public void fire () { this.getLevel().addSprite(new Projectile()); } // /** // * Returns the score of the player after the end of the game. // * @return // */ // public int getScore() { // return myScore; // } }