Files
2023-10-15 13:06:58 +03:00

151 lines
5.5 KiB
JavaScript

var up_pressed=0,down_pressed=0,left_pressed=0,right_pressed=0,z_pressed=0,x_pressed=0,y_pressed=0,cmd_pressed=0,c_pressed=0,f_pressed=0,n_pressed=0,v_pressed=0,l_pressed=0,t_pressed=0,a_pressed=0,b_pressed=0;
// Copy-paste to the "blur" event below
var pressed={};
var last_press=1,total_mousemoves=0,last_cmd=new Date();
var K={
48:"0",
49:"1",
50:"2",
51:"3",
52:"4",
53:"5",
54:"6",
55:"7",
56:"8",
57:"9",
65:"A",
66:"B",
67:"C",
68:"D",
69:"E",
70:"F",
71:"G",
72:"H",
73:"I",
74:"J",
75:"K",
76:"L",
77:"M",
78:"N",
79:"O",
80:"P",
81:"Q",
82:"R",
83:"S",
84:"T",
85:"U",
86:"V",
87:"W",
88:"X",
89:"Y",
90:"Z",
37:"LEFT",
38:"UP",
39:"RIGHT",
40:"DOWN",
9:"TAB",
27:"ESC",
16:"SHIFT",
32:"SPACE",
13:"ENTER",
8:"BACK",
188:",",
189:"-",
220:"\\",
9000:"\\2",
};
function keyboard_logic()
{
if(window.no_html) return;
window.addEventListener(
"keydown", function(event){
// console.log("KEYPRESS "+event.keyCode+" STATE: "+pressed[event.keyCode]);
var state=pressed[event.keyCode];
pressed[event.keyCode]=last_press++;
last_interaction=new Date();
if($('input:focus').length>0 || $('textarea:focus').length>0 || event.target && event.target.hasAttribute("contenteditable"))
{
if(!(event.keyCode==27 && window.character)) return; // not ESC
}
if(event.keyCode==37 || window.map_editor && event.keyCode==65) { left_pressed=last_press++; }
if(event.keyCode==38 || window.map_editor && event.keyCode==87) { up_pressed=last_press++; }
if(event.keyCode==39 || window.map_editor && event.keyCode==68) { right_pressed=last_press++; }
if(event.keyCode==40 || window.map_editor && event.keyCode==83) { down_pressed=last_press++; }
if(event.keyCode==90) { z_pressed=last_press++; }
if(event.keyCode==89) { y_pressed=last_press++; }
if(event.keyCode==88) { x_pressed=last_press++; }
if(event.keyCode==67) { c_pressed=last_press++; }
if(event.keyCode==78) { n_pressed=last_press++; }
if(event.keyCode==86) { v_pressed=last_press++; }
if(event.keyCode==70) { f_pressed=last_press++; }
if(event.keyCode==76) { l_pressed=last_press++; }
if(event.keyCode==84) { t_pressed=last_press++; }
if(event.keyCode==65) { a_pressed=last_press++; }
if(event.keyCode==66) { b_pressed=last_press++; }
if(event.keyCode==91 || event.keyCode==17) cmd_pressed=true,last_cmd=new Date(); // 17 ctrl - 91 cmd [22/06/18]
if(window.character && !state && (!cmd_pressed || ssince(last_cmd)>5))
{
if(event.keyCode==65 && window.socket) socket.emit("interaction",{key:"A"});
if(event.keyCode==66 && window.socket) socket.emit("interaction",{key:"B"});
if(K[event.keyCode]) on_skill(K[event.keyCode],event);
}
if(event.keyCode==27 && window.map_editor && set) destroy_tileset();
if(event.keyCode==27 && window.inside=="selection") $(".onbackbutton").click();
// turns out event.preventDefault helps all kinds of things [OLD]
if(window.stkp) if(!cmd_pressed || window.ssince && ssince(last_cmd)>5) stkp(event); // NEW [21/06/18]
}, false
);
window.addEventListener(
"keyup", function(event){
//console.log("KEYUP "+event.keyCode);
pressed[event.keyCode]=0;
if(event.target && event.target.hasAttribute("contenteditable") && !$(event.target).html()) $(event.target).html(" ");
if($('input:focus').length>0 || $('textarea:focus').length>0 || event.target && event.target.hasAttribute("contenteditable")) return;
if(event.keyCode==37 || window.map_editor && event.keyCode==65) { left_pressed=0; }
if(event.keyCode==38 || window.map_editor && event.keyCode==87) { up_pressed=0; }
if(event.keyCode==39 || window.map_editor && event.keyCode==68) { right_pressed=0; }
if(event.keyCode==40 || window.map_editor && event.keyCode==83) { down_pressed=0; }
if(event.keyCode==90) { z_pressed=0; }
if(event.keyCode==89) { y_pressed=0; }
if(event.keyCode==88) { x_pressed=0; }
if(event.keyCode==67) { c_pressed=0; }
if(event.keyCode==78) { n_pressed=0; }
if(event.keyCode==86) { v_pressed=0; }
if(event.keyCode==70) { f_pressed=0; }
if(event.keyCode==76) { l_pressed=0; }
if(event.keyCode==84) { t_pressed=0; }
if(event.keyCode==65) { a_pressed=0; }
if(event.keyCode==66) { b_pressed=0; }
if(event.keyCode==91 || event.keyCode==17) cmd_pressed=false;
if(window.character && K[event.keyCode]) on_skill_up(K[event.keyCode]);
if(!cmd_pressed && window.stkp) stkp(event);
}, false
);
window.addEventListener(
"mousemove", function(event){
if(mm_afk) last_interaction=new Date();
if(window.options && options.move_with_mouse && character)
{
var x=event.pageX,y=event.pageY;
dx=x-width/2; dy=y-height/2;
if(manual_centering && character) dx=x-character.x,dy=y-character.y;
dx/=scale; dy/=scale;
var mx=character.real_x+dx,my=character.real_y+dy;
var cm=calculate_move(character,mx,my);
if(!character.moving || point_distance(character.real_x,character.real_y,cm.x,cm.y)>4 && mssince(last_move)>120) move(cm.x,cm.y);
}
//total_mousemoves++;
}, false
);
$(window).blur(function(){
// cmd_pressed logic can be removed now [20/07/18]
up_pressed=0,down_pressed=0,left_pressed=0,right_pressed=0,z_pressed=0,x_pressed=0,y_pressed=0,cmd_pressed=0,c_pressed=0,f_pressed=0,n_pressed=0,v_pressed=0,l_pressed=0,t_pressed=0,a_pressed=0,b_pressed=0;
for(var name in K) if(pressed[name]) on_skill_up(K[event.keyCode]);
});
$(window).focus(function(){
if(window.sounds && window.sounds.empty && sounds.empty.cplaying) sounds.empty.stop(),sounds.empty.play();
});
}