summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormunvoseli <muslinmelody@gmail.com>2023-06-10 09:51:54 -0400
committermunvoseli <muslinmelody@gmail.com>2023-06-10 09:51:54 -0400
commit2fb2bc0cd9c1035d545c3ca4d6f3d0964d0a76c1 (patch)
tree2f20ea55c37b7b2c95f51f8fb99b56fff159f4ba
parentff14b7097683a457a733b23121b939b0c3a64d4b (diff)
better walk buffer
-rw-r--r--public/javascript/game.js35
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);