23 lines
820 B
TypeScript
23 lines
820 B
TypeScript
export function snapControls(value: number, event: string): number {
|
|
const CTRL_DISTANCE = 1; // Snap to whole numbers when Ctrl is pressed
|
|
const SHIFT_DISTANCE = 0.01; // Snap to half-step increments when Shift is pressed
|
|
const CTRL_SHIFT_DISTANCE = 0.1; // Snap to fine increments when both Ctrl and Shift are pressed
|
|
|
|
switch (event) {
|
|
case "Ctrl":
|
|
return Math.round(value / CTRL_DISTANCE) * CTRL_DISTANCE;
|
|
|
|
case "Shift":
|
|
return Math.round(value / SHIFT_DISTANCE) * SHIFT_DISTANCE;
|
|
|
|
case "Ctrl+Shift":
|
|
const base = Math.floor(value / CTRL_DISTANCE) * CTRL_DISTANCE;
|
|
const offset =
|
|
Math.round((value - base) / CTRL_SHIFT_DISTANCE) * CTRL_SHIFT_DISTANCE;
|
|
return base + offset;
|
|
|
|
default:
|
|
return value; // No snapping if no modifier key is pressed
|
|
}
|
|
}
|