diff --git a/scripts/client/keybind.js b/scripts/client/keybind.js index d3c7490c..e6814b80 100644 --- a/scripts/client/keybind.js +++ b/scripts/client/keybind.js @@ -10,17 +10,40 @@ let lastKeyBindUse = 0; let keyBindDelayTime = 500; +let keyBindShortHoldDuration = 500; +let keyBindLongHoldDuration = 1500; // ------------------------------------------------------------------------- function bindAccountKey(key, keyState) { - bindKey(toInteger(key), keyState, function(event) { - if(hasKeyBindDelayElapsed()) { - lastKeyBindUse = sdl.ticks; - triggerNetworkEvent("ag.useKeyBind", key); - } - }); - return false; + if(keyState == AG_KEYSTATE_UP) { + bindKey(toInteger(key), KEYSTATE_UP, function(event) { + if(hasKeyBindDelayElapsed()) { + lastKeyBindUse = sdl.ticks; + triggerNetworkEvent("ag.useKeyBind", key); + } + }); + } else if(keyState == AG_KEYSTATE_DOWN) { + bindKey(toInteger(key), KEYSTATE_DOWN, function(event) { + if(hasKeyBindDelayElapsed()) { + lastKeyBindUse = sdl.ticks; + triggerNetworkEvent("ag.useKeyBind", key); + } + }); + } else if(keyState == AG_KEYSTATE_HOLDSHORT || keyState == AG_KEYSTATE_HOLDLONG) { + bindKey(toInteger(key), KEYSTATE_DOWN, function(event) { + if(hasKeyBindDelayElapsed()) { + lastKeyBindUse = sdl.ticks; + keyBindHoldStart = sdl.ticks; + } + }); + bindKey(toInteger(key), KEYSTATE_UP, function(event) { + if(hasKeyBindHoldElapsed(keyState)) { + keyBindHoldStart = 0; + triggerNetworkEvent("ag.useKeyBind", key); + } + }); + } } addNetworkHandler("ag.addKeyBind", bindAccountKey); @@ -42,4 +65,19 @@ function hasKeyBindDelayElapsed() { return false; } +// ------------------------------------------------------------------------- + +function hasKeyBindHoldElapsed(keyState) { + let holdDuration = AG_KEYSTATE_HOLDSHORT + if(keyState == AG_KEYSTATE_HOLDLONG) { + holdDuration = keyBindLongHoldDuration; + } + + if(sdl.ticks-keyBindHoldStart >= holdDuration) { + return true; + } + + return false; +} + // ------------------------------------------------------------------------- \ No newline at end of file