package org.flixel.system.input; import org.flixel.FlxG; import com.badlogic.gdx.utils.reflect.ClassReflection; import flash.events.KeyboardEvent; /** * Keeps track of what keys are pressed and how with handy booleans or strings. * * @author Ka Wing Chin */ public class Keyboard extends Input { public boolean ESCAPE; public boolean F1; public boolean F2; public boolean F3; public boolean F4; public boolean F5; public boolean F6; public boolean F7; public boolean F8; public boolean F9; public boolean F10; public boolean F11; public boolean F12; public boolean ONE; public boolean TWO; public boolean THREE; public boolean FOUR; public boolean FIVE; public boolean SIX; public boolean SEVEN; public boolean EIGHT; public boolean NINE; public boolean ZERO; public boolean NUMPADONE; public boolean NUMPADTWO; public boolean NUMPADTHREE; public boolean NUMPADFOUR; public boolean NUMPADFIVE; public boolean NUMPADSIX; public boolean NUMPADSEVEN; public boolean NUMPADEIGHT; public boolean NUMPADNINE; public boolean NUMPADZERO; public boolean PAGEUP; public boolean PAGEDOWN; public boolean HOME; public boolean END; public boolean INSERT; public boolean MINUS; public boolean NUMPADMINUS; public boolean PLUS; public boolean NUMPADPLUS; public boolean DELETE; public boolean BACKSPACE; public boolean TAB; public boolean Q; public boolean W; public boolean E; public boolean R; public boolean T; public boolean Y; public boolean U; public boolean I; public boolean O; public boolean P; public boolean LBRACKET; public boolean RBRACKET; public boolean BACKSLASH; public boolean CAPSLOCK; public boolean A; public boolean S; public boolean D; public boolean F; public boolean G; public boolean H; public boolean J; public boolean K; public boolean L; public boolean SEMICOLON; public boolean QUOTE; public boolean ENTER; public boolean SHIFT; public boolean Z; public boolean X; public boolean C; public boolean V; public boolean B; public boolean N; public boolean M; public boolean COMMA; public boolean PERIOD; public boolean NUMPADPERIOD; public boolean SLASH; public boolean NUMPADSLASH; public boolean CONTROL; public boolean ALT; public boolean SPACE; public boolean UP; public boolean DOWN; public boolean LEFT; public boolean RIGHT; public boolean BACK; public boolean MENU; public boolean SEARCH; public boolean VOLUME_DOWN; public boolean VOLUME_UP; /** * Creates a new <code>Keyboard</code> object. */ public Keyboard() { int i; //LETTERS (A-Z) i = 65; addKey("A",i++); addKey("B",i++); addKey("C",i++); addKey("D",i++); addKey("E",i++); addKey("F",i++); addKey("G",i++); addKey("H",i++); addKey("I",i++); addKey("J",i++); addKey("K",i++); addKey("L",i++); addKey("M",i++); addKey("N",i++); addKey("O",i++); addKey("P",i++); addKey("Q",i++); addKey("R",i++); addKey("S",i++); addKey("T",i++); addKey("U",i++); addKey("V",i++); addKey("W",i++); addKey("X",i++); addKey("Y",i++); addKey("Z",i++); //NUMBERS (0-9) i = 48; addKey("ZERO",i++); addKey("ONE",i++); addKey("TWO",i++); addKey("THREE",i++); addKey("FOUR",i++); addKey("FIVE",i++); addKey("SIX",i++); addKey("SEVEN",i++); addKey("EIGHT",i++); addKey("NINE",i++); i = 96; addKey("NUMPADZERO",i++); addKey("NUMPADONE",i++); addKey("NUMPADTWO",i++); addKey("NUMPADTHREE",i++); addKey("NUMPADFOUR",i++); addKey("NUMPADFIVE",i++); addKey("NUMPADSIX",i++); addKey("NUMPADSEVEN",i++); addKey("NUMPADEIGHT",i++); addKey("NUMPADNINE",i++); addKey("PAGEUP", 33); addKey("PAGEDOWN", 34); addKey("HOME", 36); addKey("END", 35); addKey("INSERT", 45); //FUNCTION KEYS i = 1; while(i <= 12) addKey("F"+i,111+(i++)); //SPECIAL KEYS + PUNCTUATION addKey("ESCAPE",27); addKey("MINUS",189); addKey("NUMPADMINUS",109); addKey("PLUS",187); addKey("NUMPADPLUS",107); addKey("DELETE",46); addKey("BACKSPACE",8); addKey("LBRACKET",219); addKey("RBRACKET",221); addKey("BACKSLASH",220); addKey("CAPSLOCK",20); addKey("SEMICOLON",186); addKey("QUOTE",222); addKey("ENTER",13); addKey("SHIFT",16); addKey("COMMA",188); addKey("PERIOD",190); addKey("NUMPADPERIOD",110); addKey("SLASH",191); addKey("NUMPADSLASH",191); addKey("CONTROL",17); addKey("ALT",18); addKey("SPACE",32); addKey("UP",38); addKey("DOWN",40); addKey("LEFT",37); addKey("RIGHT",39); addKey("TAB",9); //MOBILE KEYS addKey("BACK",flash.ui.Keyboard.BACK); addKey("MENU",flash.ui.Keyboard.MENU); addKey("SEARCH",flash.ui.Keyboard.SEARCH); //addKey("VOLUME_DOWN", flash.ui.Keyboard.VOLUME_DOWN); //addKey("VOLUME_UP", flash.ui.Keyboard.VOLUME_UP); } /** * Event handler so FlxGame can toggle keys. * * @param FlashEvent A <code>KeyboardEvent</code> object. */ public void handleKeyDown(KeyboardEvent FlashEvent) { KeyState object = _map.get(FlashEvent.keyCode); if(object == null) return; if(object.current > 0) object.current = 1; else object.current = 2; try { // TODO: Reflection is fairly slow, could we use a BooleanMap instead? ClassReflection.getField(Keyboard.class, object.name).set(this, true); } catch(Exception e) { FlxG.log("Keyboard", e.getMessage()); } } /** * Event handler so FlxGame can toggle keys. * * @param FlashEvent A <code>KeyboardEvent</code> object. */ public void handleKeyUp(KeyboardEvent FlashEvent) { KeyState object = _map.get(FlashEvent.keyCode); if(object == null) return; if(object.current > 0) object.current = -1; else object.current = 0; try { ClassReflection.getField(Keyboard.class, object.name).set(this, false); } catch(Exception e) { FlxG.log("Keyboard", e.getMessage()); } } }