All files / src/shared/lib/helpers subpixels.ts

83.87% Statements 26/31
57.14% Branches 4/7
66.67% Functions 6/9
80% Lines 16/20

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 4043x     43x 6x   43x   43x 5x   43x   43x     43x 61x     43x 42x     43x                 43x 4x 4x        
import { NUM_SUBPIXEL_BITS, TILE_SIZE } from "consts";
import type { DistanceUnitType } from "shared/lib/entities/entitiesTypes";
 
export const tileToSubpx = (x: number) =>
  Math.floor(x * (1 << (3 + NUM_SUBPIXEL_BITS)));
 
export const tileToPx = (x: number) => Math.floor(x * TILE_SIZE);
 
export const pxToSubpx = (x: number) =>
  Math.floor(x * (1 << NUM_SUBPIXEL_BITS));
 
export const pxToSubpxVel = (x: number) => Math.floor(x * (1 << 4));
 
export const pxToSubpxVelPrecise = (x: number) =>
  Math.floor(x * ((1 << 4) << 8));
 
export const subpxShiftForUnits = (units: DistanceUnitType) => {
  return units === "tiles" ? NUM_SUBPIXEL_BITS + 3 : NUM_SUBPIXEL_BITS;
};
 
export const pxShiftForUnits = (units: DistanceUnitType) => {
  return units === "tiles" ? 3 : 0;
};
 
export const subpxSnapMaskForUnits = (units: DistanceUnitType) => {
  const bitsToClear =
    units === "tiles"
      ? NUM_SUBPIXEL_BITS + 3 // 3 extra bits for 8px tiles
      : NUM_SUBPIXEL_BITS;
 
  return ~((1 << bitsToClear) - 1) & 0xffff;
};
 
export const unitsValueToSubpx = (x: number, units: DistanceUnitType) => {
  if (units === "tiles") {
    return tileToSubpx(x);
  }
  return pxToSubpx(x);
};