package com.nilunder.bdx.inputs;
import java.util.*;
import com.badlogic.gdx.Gdx;
import com.nilunder.bdx.*;
public class Keyboard {
public HashMap<Integer, GdxProcessor.UpDownLog> codeToLog;
private HashMap<String,Integer> keyToCode;
public Keyboard(){
keyToCode = new HashMap<>();
keyToCode.put("*", -1); // any key
keyToCode.put("0", 7);
keyToCode.put("1", 8);
keyToCode.put("2", 9);
keyToCode.put("3", 10);
keyToCode.put("4", 11);
keyToCode.put("5", 12);
keyToCode.put("6", 13);
keyToCode.put("7", 14);
keyToCode.put("8", 15);
keyToCode.put("9", 16);
keyToCode.put("a", 29);
keyToCode.put("lalt", 57);
keyToCode.put("ralt", 58);
keyToCode.put("b", 30);
keyToCode.put("\\", 73);
keyToCode.put("c", 31);
keyToCode.put(",", 55);
keyToCode.put("d", 32);
keyToCode.put("backspace", 67);
keyToCode.put("down", 20);
keyToCode.put("left", 21);
keyToCode.put("right", 22);
keyToCode.put("up", 19);
keyToCode.put("e", 33);
keyToCode.put("enter", 66);
keyToCode.put("=", 70);
keyToCode.put("f", 34);
keyToCode.put("g", 35);
keyToCode.put("`", 68);
keyToCode.put("h", 36);
keyToCode.put("i", 37);
keyToCode.put("j", 38);
keyToCode.put("k", 39);
keyToCode.put("l", 40);
keyToCode.put("m", 41);
keyToCode.put("-", 69);
keyToCode.put("n", 42);
keyToCode.put("o", 43);
keyToCode.put("p", 44);
keyToCode.put("q", 45);
keyToCode.put("r", 46);
keyToCode.put("s", 47);
keyToCode.put(";", 74);
keyToCode.put("lshift", 59);
keyToCode.put("rshift", 60);
keyToCode.put("/", 76);
keyToCode.put("space", 62);
keyToCode.put("t", 48);
keyToCode.put("tab", 61);
keyToCode.put("u", 49);
keyToCode.put("v", 50);
keyToCode.put("w", 51);
keyToCode.put("x", 52);
keyToCode.put("y", 53);
keyToCode.put("z", 54);
keyToCode.put("lctrl", 129);
keyToCode.put("rctrl", 130);
keyToCode.put("esc", 131);
keyToCode.put("f1", 244);
keyToCode.put("f2", 245);
keyToCode.put("f3", 246);
keyToCode.put("f4", 247);
keyToCode.put("f5", 248);
keyToCode.put("f6", 249);
keyToCode.put("f7", 250);
keyToCode.put("f8", 251);
keyToCode.put("f9", 252);
keyToCode.put("f10", 253);
keyToCode.put("f11", 254);
keyToCode.put("f12", 255);
keyToCode.put("numpad0", 144);
keyToCode.put("numpad1", 145);
keyToCode.put("numpad2", 146);
keyToCode.put("numpad3", 147);
keyToCode.put("numpad4", 148);
keyToCode.put("numpad5", 149);
keyToCode.put("numpad6", 150);
keyToCode.put("numpad7", 151);
keyToCode.put("numpad8", 152);
keyToCode.put("numpad9", 153);
keyToCode.put("[", 71);
keyToCode.put("]", 72);
keyToCode.put(".", 56);
keyToCode.put("+", 81);
codeToLog = new HashMap<>();
for (Integer code : keyToCode.values())
codeToLog.put(code, new GdxProcessor.UpDownLog());
}
public ArrayList<String> downKeys() {
ArrayList<String> keyNames = new ArrayList<String>();
for (String keyName : keyToCode.keySet()){
if (!keyName.equals("*") && Gdx.input.isKeyPressed(keyToCode.get(keyName))) keyNames.add(keyName);
}
return keyNames;
}
public ArrayList<String> hitKeys() {
ArrayList<String> keyNames = new ArrayList<String>();
for (String keyName : keyToCode.keySet()){
if (!keyName.equals("*") && Gdx.input.isKeyJustPressed(keyToCode.get(keyName))) keyNames.add(keyName);
}
return keyNames;
}
public boolean keyHit(String key){
GdxProcessor.UpDownLog k = codeToLog.get(keyToCode.get(key));
return k.hit == GdxProcessor.currentTick;
}
public boolean keyDown(String key){
GdxProcessor.UpDownLog k = codeToLog.get(keyToCode.get(key));
return k.hit > k.up;
}
public boolean keyUp(String key){
GdxProcessor.UpDownLog k = codeToLog.get(keyToCode.get(key));
return k.up == GdxProcessor.currentTick;
}
public int kHit(String key){
return keyHit(key)?1:0;
}
public int kDown(String key){
return keyDown(key)?1:0;
}
public int kUp(String key){
return keyUp(key)?1:0;
}
}