JSFiddle - React, Tailwind, and code Playground

by Drath

JavaScript

function keypress(keys) {
    var timers= {};
    document.onkeydown= function(event) {
        var key= (event || window.event).keyCode;
        if (!(key in keys))
            return true;
        if (!(key in timers)) {
            timers[key]= null;
            keys[key]();
            //ISSUE IS HERE
            timers[key]= setInterval(keys[key], 130+delay-stamina);
        }
        return false;
    };
    document.onkeyup= function(event) {
        var key= (event || window.event).keyCode;
        if (key in timers) {
            if (timers[key]!==null)
                clearInterval(timers[key]);
            delete timers[key];
        }
    };
    window.onblur= function() {
        for (key in timers)
            if (timers[key]!==null)
                clearInterval(timers[key]);
        timers= {};
    };
};

keypress({
    37: function() { 
        if (directionx != -1) {
            directionx = -1;
            directiony = 0;
            rendermovement(charx,chary,false);
            delay-=25;
        } else {
            move(-1, 0);
        }
    },
    38: function() { 
        if (directiony != -1) {
            directionx = 0;
            directiony = -1;
            rendermovement(charx,chary,false);
            delay-=25;
        } else {
            move(0, -1);
        }
    },
    39: function() { 
        if (directionx != 1) {
            directionx = 1;
            directiony = 0;
            rendermovement(charx,chary,false);
            delay-=25;
        } else {
            move(1, 0);
        }
    },
    40: function() { 
        if (directiony != 1) {
            directionx = 0;
            directiony = 1;
            rendermovement(charx,chary,false);    
            delay-=25;                    
        } else {
            move(0, 1);
        }
    }
});