package com.me.skifun.controller; import java.util.HashMap; import java.util.Map; import com.me.skifun.model.Bob; import com.me.skifun.model.World; import com.me.skifun.model.Bob.State; /** * The Controller class controls the player's movement. */ public class WorldController { enum Keys { LEFT, RIGHT, DOWN } private Bob bob; // the player private float haltBob=0; // timer in order to halt the movement of bob in some cases static Map<Keys, Boolean> keys = new HashMap<WorldController.Keys, Boolean>(); static { keys.put(Keys.LEFT, false); keys.put(Keys.RIGHT, false); keys.put(Keys.DOWN, false); } public WorldController(World world) { /** * Constructor. Gets the world of the game. */ this.bob = world.getBob(); } /** * Keys Pressed */ public void leftPressed() { keys.get(keys.put(Keys.LEFT, true)); } public void rightPressed() { keys.get(keys.put(Keys.RIGHT, true)); } public void downPressed() { keys.get(keys.put(Keys.DOWN, true)); } /** * Keys released */ public void leftReleased() { keys.get(keys.put(Keys.LEFT, false)); bob.setFacingLeft(false); } public void rightReleased() { keys.get(keys.put(Keys.RIGHT, false)); bob.setFacingRight(false); } public void downReleased() { /** * When down is released bob returns to the idle state * and to the idle velocity. */ keys.get(keys.put(Keys.DOWN, false)); bob.setFacingDown(false); if (Bob.state!=Bob.State.DYING&&!bob.isGodMode()&&Bob.state!=Bob.State.DEAD&&Bob.state!=State.PAUSED) { bob.getVelocity().y=-Bob.DOWN_SPEED; bob.setState(State.IDLE); } else if (bob.isGodMode()&&!bob.isJumpMode()) { bob.getVelocity().y=-Bob.DOWN_SPEED; bob.setState(State.IDLE); } } /** The main update method **/ public void update(float delta) { if (Bob.state==Bob.State.PAUSED) return; if (Bob.state==Bob.State.DEAD) { bob.getVelocity().y=0; return; } if (Bob.state==Bob.State.DYING) { bob.getVelocity().y=0; haltBob+=delta; if (haltBob>2)//&&keys.get(Keys.DOWN)) { bob.setState(State.IDLE); bob.godmode(5,false); bob.getVelocity().y=-Bob.DOWN_SPEED; haltBob=0; } return; } processInput(); bob.update(delta); } /** Change Bob's state and parameters based on input controls **/ private void processInput() { if (Bob.state==Bob.State.PAUSED) return; if (keys.get(Keys.LEFT)) { /** * Left is pressed */ bob.setFacingRight(false); bob.setFacingLeft(true); bob.setState(State.SKIING); bob.getVelocity().x = -Bob.SPEED; } if (keys.get(Keys.RIGHT)) { /** * Right is pressed */ bob.setFacingLeft(false); bob.setFacingRight(true); bob.setState(State.SKIING); bob.getVelocity().x = Bob.SPEED; } if (keys.get(Keys.DOWN)) { /** * Down is pressed */ bob.setFacingDown(true); bob.setState(State.SKIING); if (!bob.isJumpMode()&&bob.getVelocity().y>-Bob.GOD_SPEED_MULTIPLIER*Bob.DOWN_SPEED) { /** * Check if bob's speed is in the idle state and if so accelerate it. */ if (bob.getAccelerationMode()==1) { Bob.DOWN_MULTIPLIER=1.7f; } else if (bob.getAccelerationMode()==2) { Bob.DOWN_MULTIPLIER=1.5f; } else { Bob.DOWN_MULTIPLIER=1.7f; } bob.getVelocity().y=-Bob.DOWN_SPEED*Bob.DOWN_MULTIPLIER; } } } }