refactor: Optimize terrain rendering and zooming performance

This commit is contained in:
Kacper Kostka
2025-04-02 12:28:21 +02:00
parent a4ef5e0f40
commit ae26d93432
4 changed files with 55 additions and 16 deletions

View File

@@ -38,17 +38,22 @@ function setupPanZoom() {
canvas.addEventListener('wheel', (e) => {
e.preventDefault();
let zoomSpeed = 0.001;
// Adjust zoom speed based on current scale for smoother zooming
let zoomSpeed = 0.001 * (scale < 1 ? 0.5 : 1);
let delta = e.deltaY * zoomSpeed;
let oldScale = scale;
scale -= delta;
// Limit scale range
if(scale < 0.1) scale = 0.1;
if(scale > 5) scale = 5;
let mouseX = e.clientX - (canvas.width/2 + offsetX);
let mouseY = e.clientY - (canvas.height/2 + offsetY);
offsetX -= mouseX * (scale - oldScale);
offsetY -= mouseY * (scale - oldScale);
// Zoom toward mouse position
const rect = canvas.getBoundingClientRect();
let mouseX = e.clientX - rect.left - (canvas.width/2 + offsetX);
let mouseY = e.clientY - rect.top - (canvas.height/2 + offsetY);
offsetX -= mouseX * (scale / oldScale - 1);
offsetY -= mouseY * (scale / oldScale - 1);
}, {passive: false});
}