package org.newdawn.spaceinvaders.util;
import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
/**
* A pollable keyboard system, place holder until something generic
* comes along
*
* @author Kevin Glass
*/
public class Keyboard {
/** The status of the keys on the keyboard */
private static boolean[] keys = new boolean[1024];
/**
* Initialise the central keyboard handler
*/
public static void init() {
Toolkit.getDefaultToolkit().addAWTEventListener(new KeyHandler(),AWTEvent.KEY_EVENT_MASK);
}
/**
* Initialise the central keyboard handler
*
* @param c The component that we will listen to
*/
public static void init(Component c) {
c.addKeyListener(new KeyHandler());
}
/**
* Check if a specified key is pressed
*
* @param key The code of the key to check (defined in KeyEvent)
* @return True if the key is pressed
*/
public static boolean isPressed(int key) {
return keys[key];
}
/**
* Set the status of the key
*
* @param key The code of the key to set
* @param pressed The new status of the key
*/
public static void setPressed(int key,boolean pressed) {
keys[key] = pressed;
}
/**
* A class to respond to key presses on a global scale.
*
* @author Kevin Glass
*/
private static class KeyHandler extends KeyAdapter implements AWTEventListener {
/**
* Notification of a key press
*
* @param e The event details
*/
public void keyPressed(KeyEvent e) {
if (e.isConsumed()) {
return;
}
keys[e.getKeyCode()] = true;
}
/**
* Notification of a key release
*
* @param e The event details
*/
public void keyReleased(KeyEvent e) {
if (e.isConsumed()) {
return;
}
KeyEvent nextPress = (KeyEvent) Toolkit.getDefaultToolkit().getSystemEventQueue().peekEvent(KeyEvent.KEY_PRESSED);
if ((nextPress == null) || (nextPress.getWhen() != e.getWhen())) {
keys[e.getKeyCode()] = false;
}
}
/**
* Notification that an event has occured in the AWT event
* system
*
* @param e The event details
*/
public void eventDispatched(AWTEvent e) {
if (e.getID() == KeyEvent.KEY_PRESSED) {
keyPressed((KeyEvent) e);
}
if (e.getID() == KeyEvent.KEY_RELEASED) {
keyReleased((KeyEvent) e);
}
}
}
}
Total 109 Lines of Code.
|
Source code formatted using showsrc by William Denniss
|