diff options
author | munvoseli <muslinmelody@gmail.com> | 2023-06-10 09:51:54 -0400 |
---|---|---|
committer | munvoseli <muslinmelody@gmail.com> | 2023-06-10 09:51:54 -0400 |
commit | 2fb2bc0cd9c1035d545c3ca4d6f3d0964d0a76c1 (patch) | |
tree | 2f20ea55c37b7b2c95f51f8fb99b56fff159f4ba | |
parent | ff14b7097683a457a733b23121b939b0c3a64d4b (diff) |
better walk buffer
-rw-r--r-- | public/javascript/game.js | 35 |
1 files changed, 21 insertions, 14 deletions
diff --git a/public/javascript/game.js b/public/javascript/game.js index 3eba300..9140ade 100644 --- a/public/javascript/game.js +++ b/public/javascript/game.js @@ -80,7 +80,8 @@ var moduleList = []; const walkAnimTime = (1 / 4) * framesPerSecond; let walkAnimDir = -1; -let walkInputDirections = []; +let walkOnceBuffer = []; +let walkInputDirection = -1; // Thanks to CatTail for this snippet of code. var encodeHtmlEntity = function(str) { @@ -1201,18 +1202,24 @@ function startPlacingText(text) { textToPlaceIsWaitingToWalk = false; } +let inputTracker = [null, null, null, null]; function localPlayerStartWalking(direction) { - let i = walkInputDirections.indexOf(direction); - if (i != -1) { - walkInputDirections.splice(i, 1); - } - walkInputDirections.push(direction); + if (inputTracker[direction] != null) return; + walkOnceBuffer.push(direction); + inputTracker[direction] = performance.now(); + walkInputDirection = direction; } function localPlayerStopWalking(direction) { - let i = walkInputDirections.indexOf(direction); - if (i != -1) { - walkInputDirections.splice(i, 1); + //let dtframe = (performance.now() - inputTracker[direction]) / 1000 * FPS; + inputTracker[direction] = null; + if (walkInputDirection == direction) { + walkInputDirection = -1; + for (let i = 0; i < 4; i++) { + if (inputTracker[i] != null) { + walkInputDirection = i; + } + } } } @@ -1548,15 +1555,15 @@ function timerEvent() { } } } - if (walkInputDirections.length == 0) { + if (walkOnceBuffer.length == 0 && walkInputDirection == -1) { if (localPlayer.walkDelay <= 0) { walkAnimDir = -1; } - } else if (walkInputDirections.length == 1) { - localPlayer.walk(walkInputDirections[0]); + } else if (walkOnceBuffer.length >= 1) { + if (localPlayer.walkDelay <= 0) + localPlayer.walk(walkOnceBuffer.shift()); } else { - localPlayer.walk(walkInputDirections[0]); - walkInputDirections.shift(); + localPlayer.walk(walkInputDirection); } cameraPos.set(localPlayer.pos); var tempOffset = Math.floor(canvasSpriteSize / 2); |