From 8266789fe31dcb5dda1e0fca2674f99847833f72 Mon Sep 17 00:00:00 2001 From: HF Date: Tue, 23 Jan 2024 15:24:57 +0100 Subject: [PATCH] add acceleration to PixelPainterControls movement --- src/controls/PixelPainterControls.js | 12 +++++++++--- src/store/middleware/rendererHook.js | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/controls/PixelPainterControls.js b/src/controls/PixelPainterControls.js index 27bde15e..8fe936b2 100644 --- a/src/controls/PixelPainterControls.js +++ b/src/controls/PixelPainterControls.js @@ -30,6 +30,8 @@ class PixelPainterControls { clickTapStartTime = 0; clickTapStartCoords = [0, 0]; tapStartDist = 50; + // stored speed for acceleration + speedScalar = 0; // on mouse: true as long as left mouse button is pressed isClicking = false; // on touch: true if more than one finger on screen @@ -523,20 +525,24 @@ class PixelPainterControls { update() { let time = Date.now(); const { moveU, moveV, moveW } = this.store.getState().gui; + const isAccelerating = (moveU || moveV || moveW); - if (!(moveU || moveV || moveW)) { + if (!isAccelerating) { this.prevTime = time; + this.speedScalar = 0; return false; } // set to time since last tick time -= this.prevTime; this.prevTime += time; + this.speedScalar = Math.min(1, this.speedScalar + 0.025); + const [x, y, scale] = this.renderer.view; - const directionalStep = time * 0.4 / scale; + const directionalStep = time * 0.4 / scale * this.speedScalar; let scaleFactor = scale >= 1.0 ? 1.0005 : 1.0003; - scaleFactor **= moveW; + scaleFactor **= moveW * this.speedScalar; this.renderer.updateView([ x + directionalStep * moveU, diff --git a/src/store/middleware/rendererHook.js b/src/store/middleware/rendererHook.js index c3d5ffe3..3c55f523 100644 --- a/src/store/middleware/rendererHook.js +++ b/src/store/middleware/rendererHook.js @@ -129,7 +129,7 @@ export default (store) => (next) => (action) => { case 's/SELECT_HOLD_PAINT': { if (action.value) { const renderer = getRenderer(); - renderer.controls?.holdPaintStarted?.(action.immediate); + renderer.controls.holdPaintStarted?.(action.immediate); } break; }