126 lines
5.9 KiB
Haxe
126 lines
5.9 KiB
Haxe
package game;
|
|
|
|
import openfl.text.TextField;
|
|
import engine.enums.CVarFlag;
|
|
import engine.typedefs.CCmd;
|
|
import game.ui.console.Console;
|
|
import game.video.Mode;
|
|
import openfl.events.KeyboardEvent;
|
|
import openfl.ui.Keyboard in Kb;
|
|
import openfl.Lib;
|
|
import engine.enums.CVarType;
|
|
import engine.typedefs.CVar;
|
|
import engine.ConVar;
|
|
|
|
class Input{
|
|
public static var keys:Map<Int,Bool> = [];
|
|
public static var keysLast:Map<Int,Bool> = [];
|
|
public static var bindMap:Map<String, String> = ["~" => "toggleconsole", "\\" => "toggleconsole", "1" => "echo kak", "2" => "+attack"];
|
|
public static var cv_debugKeys = ConVar.registerCVar("cl_debuginput", CInt, 0, null, "print debug messages related to input to console", null, false, true, 0, 0, false);
|
|
public static var keyNameMap:Map<Int, String> = [
|
|
Kb.HOME => "HOME", Kb.END => "END", Kb.INSERT => "INSERT", Kb.DELETE => "DELETE", Kb.PAGE_UP => "PGUP", Kb.PAGE_DOWN => "PGDN",
|
|
Kb.ESCAPE => "ESC", Kb.F1 => "F1", Kb.F2 => "F2", Kb.F3 => "F3", Kb.F4 => "F4", Kb.F5 => "F5",
|
|
Kb.F6 => "F6", Kb.F7 => "F7", Kb.F8 => "F8", Kb.F9 => "F9", Kb.F10 => "F10", Kb.F11 => "F11",
|
|
Kb.F12 => "F12",
|
|
Kb.BACKQUOTE => "~", Kb.NUMBER_1 => "1", Kb.NUMBER_2 => "2", Kb.NUMBER_3 => "3", Kb.NUMBER_4 => "4", Kb.NUMBER_5 => "5" ,
|
|
Kb.NUMBER_6 => "6", Kb.NUMBER_7 => "7", Kb.NUMBER_8 => "8", Kb.NUMBER_9 => "9", Kb.NUMBER_0 => "0",
|
|
Kb.TAB => "TAB", Kb.Q => "Q", Kb.W => "W", Kb.E => "E", Kb.R => "R", Kb.T => "T", Kb.Y => "Y",
|
|
Kb.U => "U", Kb.I => "I", Kb.O => "O", Kb.P => "P", Kb.LEFTBRACKET => "[", Kb.RIGHTBRACKET => "]", Kb.BACKSLASH => "\\",
|
|
Kb.CAPS_LOCK => "CAPSLOCK", Kb.A => "A", Kb.S => "S", Kb.D => "D", Kb.F => "F", Kb.G => "G" , Kb.H => "H",
|
|
Kb.J => "J", Kb.K => "K" , Kb.L => "L", Kb.SEMICOLON => "SEMICOLON", Kb.QUOTE => "'", Kb.ENTER => "ENTER",
|
|
Kb.SHIFT => "SHIFT", Kb.Z => "Z", Kb.X => "X", Kb.C => "C", Kb.V => "V", Kb.B => "B", Kb.N => "N",
|
|
Kb.M => "M", Kb.COMMA => "COMMA",Kb.PERIOD => "PERIOD", Kb.SLASH => "/" ,
|
|
Kb.CONTROL => "CTRL", Kb.ALTERNATE =>"ALT"
|
|
];
|
|
public static var keyCodeMap:Map<String, Int> = [
|
|
for(key in keyNameMap.keys()){
|
|
keyNameMap[key] => key;
|
|
}
|
|
];
|
|
public static var cCmdGetKeyCode = ConVar.registerCCmd("getkey", (cArgs:Array<String>) -> {
|
|
var keycode:Int = keyCodeMap[cArgs[0]];
|
|
if(cArgs != null)
|
|
Console.devMsg(Std.string(keycode));
|
|
});
|
|
public static function onKeyIsDown(e:KeyboardEvent){
|
|
if(!Std.isOfType(Lib.current.stage.focus,TextField)){
|
|
Console.consoleInstance.parseCmd(bindMap[keyNameMap[e.keyCode]]);
|
|
}
|
|
if(!keys[e.keyCode]){
|
|
if(cv_debugKeys.value == 1)
|
|
Console.devMsg("triggered key: "+keyNameMap[e.keyCode]);
|
|
else if(cv_debugKeys.value > 1 )
|
|
Console.devMsg(""+e.keyCode);
|
|
}
|
|
keys[e.keyCode] = true;
|
|
var key:String = keyNameMap[e.keyCode];
|
|
if(cv_debugKeys.value > 0) Console.devMsg(""+key);
|
|
|
|
}
|
|
public static function onKeyIsUp(e:KeyboardEvent){
|
|
if(!Std.isOfType(Lib.current.stage.focus,TextField)){
|
|
if(bindMap[keyNameMap[e.keyCode]].indexOf("+") == 0){
|
|
Console.consoleInstance.parseCmd(StringTools.replace(bindMap[keyNameMap[e.keyCode]],"+","-"));
|
|
}
|
|
}
|
|
keys[e.keyCode] = false;
|
|
}
|
|
// public static function resolveKeyName(key:Int):String
|
|
// {
|
|
// return keyNameMap[key];
|
|
// }
|
|
public static function bindKey(input:String, action:String):Void
|
|
{
|
|
bindMap[input] = action;
|
|
}
|
|
private static var bind:CCmd = ConVar.registerCCmd("bind", (cArgs:Array<String>)->{
|
|
cArgs[0] = cArgs[0].toUpperCase();
|
|
if(cArgs.length == 2){
|
|
if(keyCodeMap[cArgs[0]]!= null) {
|
|
if(cArgs[1].indexOf('"') == 0 && cArgs[1].lastIndexOf('"') == cArgs[1].length-1){
|
|
bindKey(cArgs[0], cArgs[1].substring(1,cArgs[1].length-1));
|
|
}
|
|
else{
|
|
bindKey(cArgs[0], cArgs[1]);
|
|
}
|
|
|
|
}
|
|
}
|
|
else if(cArgs.length == 1){
|
|
Console.devMsg(bindMap[cArgs[0]]);
|
|
}
|
|
else{
|
|
Console.devMsg("usage: bind <key> <command>");
|
|
}
|
|
});
|
|
public static function onEnterFrame()
|
|
{
|
|
if( keys[Kb.BACKQUOTE]){
|
|
//Console.toggle();
|
|
if(cv_debugKeys.value > 0) Console.devMsg("toggle console");
|
|
|
|
}
|
|
if( keys[Kb.ALTERNATE] && keys[Kb.ENTER] && !keysLast[Kb.ALTERNATE] && !keysLast[Kb.ENTER] ){
|
|
Mode.switchFsMode();
|
|
}
|
|
// Console Input field is in focus
|
|
if(Lib.current.stage.focus == Console.consoleInstance.cIn){
|
|
if ( keys[Kb.ENTER] && !keysLast[Kb.ENTER] && !keysLast[Kb.ALTERNATE]){
|
|
Console.consoleInstance.submitInput();
|
|
}
|
|
if (keys[Kb.UP] && !keysLast[Kb.UP]){
|
|
Console.histPrev();
|
|
}
|
|
if (keys[Kb.DOWN] && !keysLast[Kb.DOWN]){
|
|
Console.histNext();
|
|
}
|
|
|
|
}
|
|
if(Console.consoleInstance.visible){
|
|
if (keys[Kb.ESCAPE]){
|
|
Console.toggle();
|
|
}
|
|
}
|
|
keysLast = keys.copy();
|
|
}
|
|
} |