| @@ -4289,4 +4289,48 @@ function toastRateLimit(msg, key, delay) { | |||||
| delete rateLimits[key] | delete rateLimits[key] | ||||
| }, delay); | }, delay); | ||||
| } | } | ||||
| } | |||||
| let lastTime = undefined; | |||||
| function pan(fromX, fromY, fromHeight, toX, toY, toHeight, duration) { | |||||
| Object.keys(entities).forEach(key => { | |||||
| document.querySelector("#entity-" + key).classList.add("no-transition"); | |||||
| }); | |||||
| config.x = fromX; | |||||
| config.y = fromY; | |||||
| config.height = math.unit(fromHeight, "meters") | |||||
| updateSizes(); | |||||
| lastTime = undefined; | |||||
| requestAnimationFrame((timestamp) => panTo(toX, toY, toHeight, (toX - fromX) / duration, (toY - fromY) / duration, (toHeight - fromHeight) / duration, timestamp, duration)); | |||||
| } | |||||
| function panTo(x, y, height, xSpeed, ySpeed, heightSpeed, timestamp, remaining) { | |||||
| if (lastTime === undefined) { | |||||
| lastTime = timestamp; | |||||
| } | |||||
| dt = timestamp - lastTime; | |||||
| remaining -= dt; | |||||
| console.log(lastTime, remaining, dt) | |||||
| if (remaining < 0) { | |||||
| dt += remaining | |||||
| } | |||||
| let newX = config.x + xSpeed * dt; | |||||
| let newY = config.y + ySpeed * dt; | |||||
| let newHeight = config.height.toNumber("meters") + heightSpeed * dt; | |||||
| console.log(newX); | |||||
| if (remaining > 0) { | |||||
| requestAnimationFrame((timestamp) => panTo(x, y, height, xSpeed, ySpeed, heightSpeed, timestamp, remaining)) | |||||
| } else { | |||||
| Object.keys(entities).forEach(key => { | |||||
| document.querySelector("#entity-" + key).classList.remove("no-transition"); | |||||
| }); | |||||
| } | |||||
| config.x = newX; | |||||
| config.y = newY; | |||||
| config.height = math.unit(newHeight, "meters"); | |||||
| updateSizes(); | |||||
| } | } | ||||