All files / src/functions/convertGlyphs glyphs2Coords.ts

100% Statements 34/34
100% Branches 13/13
100% Functions 1/1
100% Lines 34/34

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 40 41 42 43 44 451x   1x 17x   16x 16x 16x 16x   16x 16x 16x 16x   16x 16x 16x   17x 1x 17x 15x 15x   17x 2x 17x 14x 14x   17x 1x 17x 15x 15x   16x 16x   16x   16x 16x  
import { exactGlyphLength } from '@/constants/restrictions';
 
export function glyphs2Coords(glyphs: string) {
  if (glyphs.length !== exactGlyphLength) return '';
 
  const X_Z_POS_SHIFT = 2049;
  const X_Z_NEG_SHIFT = 2047;
  const Y_POS_SHIFT = 129;
  const Y_NEG_SHIFT = 127;
 
  const x_glyphs = parseInt(glyphs.substring(9, 12), 16); // NoSonar X coordinate part
  const y_glyphs = parseInt(glyphs.substring(4, 6), 16); // NoSonar Y coordinate part
  const z_glyphs = parseInt(glyphs.substring(6, 9), 16); // NoSonar Z coordinate part
  const system_idx = glyphs.substring(1, 4); // NoSonar system index part
 
  let coords_x = 0;
  let coords_y = 0;
  let coords_z = 0;
 
  if (x_glyphs >= X_Z_POS_SHIFT) {
    coords_x = x_glyphs - X_Z_POS_SHIFT;
  } else {
    coords_x = x_glyphs + X_Z_NEG_SHIFT;
  }
 
  if (z_glyphs >= X_Z_POS_SHIFT) {
    coords_z = z_glyphs - X_Z_POS_SHIFT;
  } else {
    coords_z = z_glyphs + X_Z_NEG_SHIFT;
  }
 
  if (y_glyphs >= Y_POS_SHIFT) {
    coords_y = y_glyphs - Y_POS_SHIFT;
  } else {
    coords_y = y_glyphs + Y_NEG_SHIFT;
  }
 
  const coordData = [coords_x, coords_y, coords_z];
  const coordinates = coordData.map((coord) => coord.toString(16).toUpperCase().padStart(4, '0'));
 
  coordinates[3] = system_idx.padStart(4, '0').toUpperCase(); // NoSonar the 4 is to bump it to a length of 4
 
  return coordinates.join(':');
}