package games.scroller.mr_fish.sprites.player; import games.scroller.mr_fish.sprites.FishLib; import games.scroller.mr_fish.sprites.FishLib.Fireball; import games.scroller.mr_fish.sprites.player.states.TiltDown; import games.scroller.mr_fish.sprites.player.states.TiltUp; import games.scroller.mr_fish.sprites.player.stats.Score; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Point2D; import util.Location; import util.ValueText; import util.Vector; import util.input.InputClassTarget; import util.input.InputMethodTarget; import vooga.scroller.extra_resources.inventory.Inventory; import vooga.scroller.extra_resources.inventory.InventoryState; import vooga.scroller.extra_resources.inventory.Item; import vooga.scroller.scrollingmanager.ScrollingManager; import vooga.scroller.sprites.animation.state_movement.MoveDownState; import vooga.scroller.sprites.animation.state_movement.MoveLeftState; import vooga.scroller.sprites.animation.state_movement.MoveRightState; import vooga.scroller.sprites.animation.state_movement.MoveUpState; import vooga.scroller.sprites.state.DefaultSpriteState; import vooga.scroller.sprites.superclasses.GameCharacter; import vooga.scroller.sprites.superclasses.Player; import vooga.scroller.statistics.Statistic; import vooga.scroller.util.ISpriteView; import vooga.scroller.util.Pixmap; import vooga.scroller.view.GameView; @InputClassTarget public class MrFish extends Player { private static final Pixmap MR_FISH_VIEW = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_move_right.gif"); private static final Dimension MR_FISH_SIZE = new Dimension(32, 32); public static final int MR_FISH_HEALTH = 20; private static final int MR_FISH_DAMAGE = 10; private static final int DEATH_PENALTY = 100; private static final String INPUT_LOCATION = "games/scroller/mr_fish/controls/MrFishMapping"; private static final ISpriteView MOVE_LEFT = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_move_left.gif"); private static final ISpriteView STAND_LEFT = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_stand_left.gif"); private static final double SPEED = 75; private static final ISpriteView MOVE_RIGHT = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_move_right.gif"); private static final ISpriteView STAND_RIGHT = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_stand_right.gif"); private static final ISpriteView MOVE_UP = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_move_up.gif"); private static final ISpriteView STAND_UP = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_stand_up.gif"); private static final ISpriteView MOVE_DOWN = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_move_down.gif"); private static final ISpriteView STAND_DOWN = FishLib.makePixmap(FishLib.IMAGE_LOCATION, "frog_stand_down.gif"); private static final double RATE_ROTATION = 2.0; private static final Point2D SCORE_LOCATION = new Location(100, 30); private static final Color SCORE_COLOR = Color.BLACK; private static final String HEALTH_STRING = "HEALTH"; private static final Color HEALTH_COLOR = Color.CYAN; private static final Point2D HEALTH_LOCATION = new Location(300, 30); private static final double FIRE_SPEED = 50; private Inventory<MrFish, Item> myInventory; private Statistic myScore; private Statistic myMoney; private ValueText myScoreHeader; private ValueText myHealthHeader; public MrFish (GameView gameView, ScrollingManager sm) { super(MR_FISH_VIEW, MR_FISH_SIZE, gameView, sm, MR_FISH_HEALTH, MR_FISH_DAMAGE); myScore = new Score(); myInventory = new Inventory<MrFish, Item>(this); myScoreHeader = new ValueText(myScore.getName(), myScore.getAggregateValue()); myHealthHeader = new ValueText(HEALTH_STRING, this.getHealth()); initializePossibleStates(); } private void initializePossibleStates () { // TODO left, right, up, down, super, invincible // Movement states this.addPossibleState(MoveLeftState.STATE_ID, new MoveLeftState(this, MOVE_LEFT, STAND_LEFT, SPEED)); this.addPossibleState(MoveRightState.STATE_ID, new MoveRightState(this, MOVE_RIGHT, STAND_RIGHT, SPEED)); this.addPossibleState(MoveUpState.STATE_ID, new MoveUpState(this, MOVE_UP, STAND_UP, SPEED)); this.addPossibleState(MoveDownState.STATE_ID, new MoveDownState(this, MOVE_DOWN, STAND_DOWN, SPEED)); this.addPossibleState(InventoryState.STATE_ID, new InventoryState(this, myInventory)); // this.addPossibleState(TiltUp.STATE_ID, new TiltUp(this, RATE_ROTATION, SPEED)); // this.addPossibleState(TiltDown.STATE_ID, new TiltDown(this, RATE_ROTATION, SPEED)); } public void update (double elapsedTime, Dimension bounds) { super.update(elapsedTime, bounds); myHealthHeader.resetValue(); myHealthHeader.updateValue(this.getHealth()); } @Override public void paint (Graphics2D pen) { super.paint(pen); myScoreHeader.paint(pen, SCORE_LOCATION, SCORE_COLOR); myHealthHeader.paint(pen, HEALTH_LOCATION, HEALTH_COLOR); } @Override public String getInputFilePath () { return INPUT_LOCATION; } @Override public void handleDeath (vooga.scroller.level_editor.Level level) { // lose all money // myMoney.removeValue(myMoney.getAggregateValue()); // myScore.removeValue(DEATH_PENALTY); this.setCenter(level.getStartPoint().getX(), level.getStartPoint().getY()); this.setHealth(MR_FISH_HEALTH); } @InputMethodTarget(name = "leftstart") public void walkLeft () { this.activateState(MoveLeftState.STATE_ID); } @InputMethodTarget(name = "leftend") public void stopLeft () { this.deactivateState(MoveLeftState.STATE_ID); } @InputMethodTarget(name = "upstart") public void walkUp () { this.activateState(MoveUpState.STATE_ID); // this.activateState(TiltUp.STATE_ID); } @InputMethodTarget(name = "upend") public void stopUp () { this.deactivateState(MoveUpState.STATE_ID); // this.deactivateState(TiltUp.STATE_ID); } @InputMethodTarget(name = "downstart") public void walkDown () { this.activateState(MoveDownState.STATE_ID); // this.activateState(TiltDown.STATE_ID); } @InputMethodTarget(name = "downend") public void stopDown () { // this.deactivateState(TiltDown.STATE_ID); this.deactivateState(MoveDownState.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 = "fire") public void fire () { GameCharacter fireball = new Fireball(); fireball.setCenter(this.getCenter().x, this.getCenter().y); Vector velocity = new Vector(this.getVelocity()); velocity.setMagnitude(FIRE_SPEED); fireball.setVelocity(velocity); this.getLevel().addSprite(fireball); } public void incrementScore (int value) { myScoreHeader.updateValue(value); myScore.addValue(value); } public void addItem (Item collectible) { myInventory.addItem(collectible); } @InputMethodTarget(name = "menuon") public void showInventory () { this.activateState(InventoryState.STATE_ID); this.deactivateState(DefaultSpriteState.DEFAULT_ID); } @InputMethodTarget(name = "menuoff") public void hideInventory () { this.deactivateState(InventoryState.STATE_ID); this.activateState(DefaultSpriteState.DEFAULT_ID); } @InputMethodTarget(name = "menuright") public void selectRight () { myInventory.getNextItem(); } @InputMethodTarget(name = "menuleft") public void selectLeft () { myInventory.getPreviousItem(); } @InputMethodTarget(name = "selectitem") public void selectItem () { myInventory.getPreviousItem(); myInventory.selectCurrent(); } }