21 lines
687 B
TypeScript
21 lines
687 B
TypeScript
import type { Dimensions, XYPosition } from '~/types'
|
|
|
|
// returns a number between 0 and 1 that represents the velocity of the movement
|
|
// when the mouse is close to the edge of the canvas
|
|
function calcAutoPanVelocity(value: number, min: number, max: number) {
|
|
if (value < min) {
|
|
return clamp(Math.abs(value - min), 1, 50) / 50
|
|
} else if (value > max) {
|
|
return -clamp(Math.abs(value - max), 1, 50) / 50
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
export function calcAutoPan(pos: XYPosition, bounds: Dimensions) {
|
|
const xMovement = calcAutoPanVelocity(pos.x, 35, bounds.width - 35) * 20
|
|
const yMovement = calcAutoPanVelocity(pos.y, 35, bounds.height - 35) * 20
|
|
|
|
return [xMovement, yMovement]
|
|
}
|