Module/Movement/KeyboardMovement

From Robowiki
< Module‎ | Movement
Revision as of 18:05, 23 March 2008 by Jab (talk | contribs) (Module Movement: KeyboardMovement)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
package jab.movement;

import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import jab.Module;
import jab.Movement;

public class KeyboardMovement extends Movement {

	/**
	 * Credits
	 * Interactive - a sample robot by Flemming N. Larsen.
	 */
	public KeyboardMovement(Module bot) {
		super(bot);
	}

	// Move direction: 1 = move forward, 0 = stand still, -1 = move backward
	int moveDirection;

	// Turn direction: 1 = turn right, 0 = no turning, -1 = turn left
	int turnDirection;

	// Amount of pixels/units to move
	double moveAmount;

	public void move() {
		// Sets the robot to move forward, backward or stop moving depending
		// on the move direction and amount of pixels to move
		bot.setAhead(moveAmount * moveDirection);

		// Decrement the amount of pixels to move until we reach 0 pixels
		// This way the robot will automatically stop if the mouse wheel
		// has stopped it's rotation
		moveAmount = Math.max(0, moveAmount - 1);

		// Sets the robot to turn right or turn left (at maximum speed) or
		// stop turning depending on the turn direction 
		bot.setTurnRight(45 * turnDirection); // degrees
	}

	public void listenInput(InputEvent e) {
		if (e instanceof KeyEvent) {
			if (((KeyEvent) e).getID() == KeyEvent.KEY_PRESSED)
				switch (((KeyEvent) e).getKeyCode()) {
				case KeyEvent.VK_UP:
					moveDirection = 1;
					moveAmount = Double.POSITIVE_INFINITY;
					break;

				case KeyEvent.VK_DOWN:
					moveDirection = -1;
					moveAmount = Double.POSITIVE_INFINITY;
					break;

				case KeyEvent.VK_RIGHT:
					turnDirection = 1;
					break;

				case KeyEvent.VK_LEFT:
					turnDirection = -1;
					break;
				}
			else if (((KeyEvent) e).getID() == KeyEvent.KEY_RELEASED)
				switch (((KeyEvent) e).getKeyCode()) {
				case KeyEvent.VK_UP:
				case KeyEvent.VK_DOWN:
					// Arrow up and down keys: move direction = stand still
					moveDirection = 0;
					break;

				case KeyEvent.VK_RIGHT:
				case KeyEvent.VK_LEFT:
					// Arrow right and left keys: turn direction = stop turning
					turnDirection = 0;
					break;
				}

		}
	}

}