brilliantsole 0.0.34 → 0.0.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18916,6 +18916,9 @@
18916
18916
  log: false
18917
18917
  });
18918
18918
  const spriteHeaderLength = 3 * 2;
18919
+ function calculateSpriteSheetHeaderLength(numberOfSprites) {
18920
+ return 2 + numberOfSprites * 2 + numberOfSprites * spriteHeaderLength;
18921
+ }
18919
18922
  function getCurvesPoints(curves) {
18920
18923
  const curvePoints = [];
18921
18924
  curves.forEach((curve, index) => {
@@ -19746,6 +19749,17 @@
19746
19749
  ctx.drawImage(image, 0, 0, width, height);
19747
19750
  return canvas;
19748
19751
  }
19752
+ function cropCanvas(canvas, x, y, width, height, targetCanvas) {
19753
+ targetCanvas = targetCanvas || document.createElement("canvas");
19754
+ const ctx = targetCanvas.getContext("2d", {
19755
+ willReadFrequently: true
19756
+ });
19757
+ targetCanvas.width = width;
19758
+ targetCanvas.height = height;
19759
+ ctx.imageSmoothingEnabled = false;
19760
+ ctx.drawImage(canvas, x, y, width, height, 0, 0, width, height);
19761
+ return targetCanvas;
19762
+ }
19749
19763
  function removeAlphaFromCanvas(canvas) {
19750
19764
  const ctx = canvas.getContext("2d", {
19751
19765
  willReadFrequently: true
@@ -19790,6 +19804,86 @@
19790
19804
  bitmap
19791
19805
  };
19792
19806
  }
19807
+ const drawSpriteBitmapCommandHeaderLength = 1 + 2 + 2 + 2 + 2 + 1 + 2;
19808
+ async function canvasToBitmaps(canvas, numberOfColors, mtu) {
19809
+ const {
19810
+ blob,
19811
+ colors,
19812
+ colorIndices
19813
+ } = await quantizeCanvas(canvas, numberOfColors);
19814
+ const bitmapRows = [];
19815
+ const {
19816
+ width,
19817
+ height
19818
+ } = canvas;
19819
+ const numberOfPixels = width * height;
19820
+ const pixelDepth = DisplayPixelDepths.find(pixelDepth => pixelDepthToNumberOfColors(pixelDepth) >= numberOfColors);
19821
+ _console$k.assertWithError(pixelDepth, "no pixelDepth found that covers ".concat(numberOfColors, " colors"));
19822
+ const pixelsPerByte = pixelDepthToPixelsPerByte(pixelDepth);
19823
+ const numberOfBytes = Math.ceil(numberOfPixels / pixelsPerByte);
19824
+ _console$k.log({
19825
+ width,
19826
+ height,
19827
+ numberOfPixels,
19828
+ pixelDepth,
19829
+ pixelsPerByte,
19830
+ numberOfBytes,
19831
+ mtu
19832
+ });
19833
+ const maxPixelDataLength = mtu - (drawSpriteBitmapCommandHeaderLength + 5);
19834
+ const maxPixels = Math.floor(maxPixelDataLength / pixelsPerByte);
19835
+ const maxBitmapWidth = Math.min(maxPixels, width);
19836
+ let maxBitmapHeight = 1;
19837
+ if (maxBitmapWidth == width) {
19838
+ const bitmapRowPixelDataLength = Math.ceil(width / pixelsPerByte);
19839
+ maxBitmapHeight = Math.floor(maxPixelDataLength / bitmapRowPixelDataLength);
19840
+ }
19841
+ _console$k.log({
19842
+ maxPixelDataLength,
19843
+ maxPixels,
19844
+ maxBitmapHeight,
19845
+ maxBitmapWidth
19846
+ });
19847
+ if (maxBitmapHeight >= height) {
19848
+ _console$k.log("image is small enough for a single bitmap");
19849
+ const bitmap = {
19850
+ numberOfColors,
19851
+ pixels: colorIndices,
19852
+ width,
19853
+ height
19854
+ };
19855
+ bitmapRows.push([bitmap]);
19856
+ } else {
19857
+ let offsetX = 0;
19858
+ let offsetY = 0;
19859
+ const bitmapCanvas = document.createElement("canvas");
19860
+ const bitmapColorIndices = new Array(numberOfColors).fill(0).map((_, i) => i);
19861
+ while (offsetY < height) {
19862
+ const bitmapHeight = Math.min(maxBitmapHeight, height - offsetY);
19863
+ offsetX = 0;
19864
+ const bitmapRow = [];
19865
+ bitmapRows.push(bitmapRow);
19866
+ while (offsetX < width) {
19867
+ const bitmapWidth = Math.min(maxBitmapWidth, width - offsetX);
19868
+ cropCanvas(canvas, offsetX, offsetY, bitmapWidth, bitmapHeight, bitmapCanvas);
19869
+ const {
19870
+ bitmap
19871
+ } = await imageToBitmap(bitmapCanvas, bitmapWidth, bitmapHeight, colors, bitmapColorIndices, numberOfColors);
19872
+ bitmapRow.push(bitmap);
19873
+ offsetX += bitmapWidth;
19874
+ }
19875
+ offsetY += bitmapHeight;
19876
+ }
19877
+ }
19878
+ return {
19879
+ bitmapRows,
19880
+ colors
19881
+ };
19882
+ }
19883
+ async function imageToBitmaps(image, width, height, numberOfColors, mtu) {
19884
+ const canvas = resizeImage(image, width, height);
19885
+ return canvasToBitmaps(canvas, numberOfColors, mtu);
19886
+ }
19793
19887
  function getBitmapNumberOfBytes(bitmap) {
19794
19888
  const pixelDepth = numberOfColorsToPixelDepth(bitmap.numberOfColors);
19795
19889
  const pixelsPerByte = pixelDepthToPixelsPerByte(pixelDepth);
@@ -19809,6 +19903,147 @@
19809
19903
  _console$k.assertRangeWithError("bitmap.pixels[".concat(index, "]"), pixel, 0, bitmap.numberOfColors - 1);
19810
19904
  });
19811
19905
  }
19906
+ async function canvasToSprite(canvas, spriteName, numberOfColors, paletteName, overridePalette, spriteSheet) {
19907
+ var _spriteSheet$palettes;
19908
+ let paletteOffset = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;
19909
+ const {
19910
+ width,
19911
+ height
19912
+ } = canvas;
19913
+ let palette = (_spriteSheet$palettes = spriteSheet.palettes) === null || _spriteSheet$palettes === void 0 ? void 0 : _spriteSheet$palettes.find(palette => palette.name == paletteName);
19914
+ if (!palette) {
19915
+ var _spriteSheet$palettes2;
19916
+ palette = {
19917
+ name: paletteName,
19918
+ numberOfColors,
19919
+ colors: new Array(numberOfColors).fill("#000000")
19920
+ };
19921
+ spriteSheet.palettes = spriteSheet.palettes || [];
19922
+ (_spriteSheet$palettes2 = spriteSheet.palettes) === null || _spriteSheet$palettes2 === void 0 ? void 0 : _spriteSheet$palettes2.push(palette);
19923
+ }
19924
+ _console$k.log("pallete", palette);
19925
+ const sprite = {
19926
+ name: spriteName,
19927
+ width,
19928
+ height,
19929
+ paletteSwaps: [],
19930
+ commands: []
19931
+ };
19932
+ const results = await quantizeCanvas(canvas, numberOfColors, !overridePalette ? palette.colors : undefined);
19933
+ const blob = results.blob;
19934
+ const colorIndices = results.colorIndices;
19935
+ if (overridePalette) {
19936
+ results.colors.forEach((color, index) => {
19937
+ palette.colors[index + paletteOffset] = color;
19938
+ });
19939
+ }
19940
+ sprite.commands.push({
19941
+ type: "selectBitmapColors",
19942
+ bitmapColorPairs: new Array(numberOfColors).fill(0).map((_, index) => ({
19943
+ bitmapColorIndex: index,
19944
+ colorIndex: index + paletteOffset
19945
+ }))
19946
+ });
19947
+ const bitmap = {
19948
+ numberOfColors,
19949
+ pixels: colorIndices,
19950
+ width,
19951
+ height
19952
+ };
19953
+ sprite.commands.push({
19954
+ type: "drawBitmap",
19955
+ offsetX: 0,
19956
+ offsetY: 0,
19957
+ bitmap
19958
+ });
19959
+ const spriteIndex = spriteSheet.sprites.findIndex(sprite => sprite.name == spriteName);
19960
+ if (spriteIndex == -1) {
19961
+ spriteSheet.sprites.push(sprite);
19962
+ } else {
19963
+ _console$k.log("overwriting spriteIndex ".concat(spriteIndex));
19964
+ spriteSheet.sprites[spriteIndex] = sprite;
19965
+ }
19966
+ return {
19967
+ sprite,
19968
+ blob
19969
+ };
19970
+ }
19971
+ async function imageToSprite(image, spriteName, width, height, numberOfColors, paletteName, overridePalette, spriteSheet) {
19972
+ let paletteOffset = arguments.length > 8 && arguments[8] !== undefined ? arguments[8] : 0;
19973
+ const canvas = resizeImage(image, width, height);
19974
+ return canvasToSprite(canvas, spriteName, numberOfColors, paletteName, overridePalette, spriteSheet, paletteOffset);
19975
+ }
19976
+ const spriteSheetWithSingleBitmapCommandLength = calculateSpriteSheetHeaderLength(1) + drawSpriteBitmapCommandHeaderLength;
19977
+ function spriteSheetWithBitmapCommandAndSelectBitmapColorsLength(numberOfColors) {
19978
+ return spriteSheetWithSingleBitmapCommandLength + (1 + 1 + numberOfColors * 2);
19979
+ }
19980
+ async function canvasToSpriteSheet(canvas, spriteSheetName, numberOfColors, paletteName, maxFileLength) {
19981
+ const spriteSheet = {
19982
+ name: spriteSheetName,
19983
+ palettes: [],
19984
+ paletteSwaps: [],
19985
+ sprites: []
19986
+ };
19987
+ if (maxFileLength == undefined) {
19988
+ await canvasToSprite(canvas, "image", numberOfColors, paletteName, true, spriteSheet);
19989
+ } else {
19990
+ const {
19991
+ width,
19992
+ height
19993
+ } = canvas;
19994
+ const numberOfPixels = width * height;
19995
+ const pixelDepth = DisplayPixelDepths.find(pixelDepth => pixelDepthToNumberOfColors(pixelDepth) >= numberOfColors);
19996
+ _console$k.assertWithError(pixelDepth, "no pixelDepth found that covers ".concat(numberOfColors, " colors"));
19997
+ const pixelsPerByte = pixelDepthToPixelsPerByte(pixelDepth);
19998
+ const numberOfBytes = Math.ceil(numberOfPixels / pixelsPerByte);
19999
+ _console$k.log({
20000
+ width,
20001
+ height,
20002
+ numberOfPixels,
20003
+ pixelDepth,
20004
+ pixelsPerByte,
20005
+ numberOfBytes,
20006
+ maxFileLength
20007
+ });
20008
+ const maxPixelDataLength = maxFileLength - (spriteSheetWithBitmapCommandAndSelectBitmapColorsLength(numberOfColors) + 5);
20009
+ const imageRowPixelDataLength = Math.ceil(width / pixelsPerByte);
20010
+ const maxSpriteHeight = Math.floor(maxPixelDataLength / imageRowPixelDataLength);
20011
+ if (maxSpriteHeight >= height) {
20012
+ _console$k.log("image is small enough for a single sprite");
20013
+ await canvasToSprite(canvas, "image", numberOfColors, paletteName, true, spriteSheet);
20014
+ } else {
20015
+ var _spriteSheet$palettes3;
20016
+ const {
20017
+ colors
20018
+ } = await quantizeCanvas(canvas, numberOfColors);
20019
+ (_spriteSheet$palettes3 = spriteSheet.palettes) === null || _spriteSheet$palettes3 === void 0 ? void 0 : _spriteSheet$palettes3.push({
20020
+ name: paletteName,
20021
+ numberOfColors,
20022
+ colors
20023
+ });
20024
+ let offsetY = 0;
20025
+ let imageIndex = 0;
20026
+ const spriteCanvas = document.createElement("canvas");
20027
+ while (offsetY < height) {
20028
+ const spriteHeight = Math.min(maxSpriteHeight, height - offsetY);
20029
+ cropCanvas(canvas, 0, offsetY, width, spriteHeight, spriteCanvas);
20030
+ offsetY += spriteHeight;
20031
+ _console$k.log("cropping sprite ".concat(imageIndex), {
20032
+ offsetY,
20033
+ width,
20034
+ spriteHeight
20035
+ });
20036
+ await canvasToSprite(spriteCanvas, "image".concat(imageIndex), numberOfColors, paletteName, false, spriteSheet);
20037
+ imageIndex++;
20038
+ }
20039
+ }
20040
+ }
20041
+ return spriteSheet;
20042
+ }
20043
+ async function imageToSpriteSheet(image, spriteSheetName, width, height, numberOfColors, paletteName, maxFileLength) {
20044
+ const canvas = resizeImage(image, width, height);
20045
+ return canvasToSpriteSheet(canvas, spriteSheetName, numberOfColors, paletteName, maxFileLength);
20046
+ }
19812
20047
 
19813
20048
  const _console$j = createConsole("DisplayManagerInterface", {
19814
20049
  log: false
@@ -27443,6 +27678,9 @@
27443
27678
  exports.VibrationTypes = VibrationTypes;
27444
27679
  exports.VibrationWaveformEffects = VibrationWaveformEffects;
27445
27680
  exports.WebSocketClient = WebSocketClient;
27681
+ exports.canvasToBitmaps = canvasToBitmaps;
27682
+ exports.canvasToSprite = canvasToSprite;
27683
+ exports.canvasToSpriteSheet = canvasToSpriteSheet;
27446
27684
  exports.displayCurveTypeToNumberOfControlPoints = displayCurveTypeToNumberOfControlPoints;
27447
27685
  exports.englishRegex = englishRegex;
27448
27686
  exports.fontToSpriteSheet = fontToSpriteSheet;
@@ -27451,12 +27689,18 @@
27451
27689
  exports.getFontUnicodeRange = getFontUnicodeRange;
27452
27690
  exports.getMaxSpriteSheetSize = getMaxSpriteSheetSize;
27453
27691
  exports.hexToRGB = hexToRGB;
27692
+ exports.imageToBitmaps = imageToBitmaps;
27693
+ exports.imageToSprite = imageToSprite;
27694
+ exports.imageToSpriteSheet = imageToSpriteSheet;
27454
27695
  exports.intersectWireframes = intersectWireframes;
27455
27696
  exports.isWireframePolygon = isWireframePolygon;
27456
27697
  exports.maxDisplayScale = maxDisplayScale;
27457
27698
  exports.mergeWireframes = mergeWireframes;
27458
27699
  exports.parseFont = parseFont;
27459
27700
  exports.pixelDepthToNumberOfColors = pixelDepthToNumberOfColors;
27701
+ exports.quantizeImage = quantizeImage;
27702
+ exports.resizeAndQuantizeImage = resizeAndQuantizeImage;
27703
+ exports.resizeImage = resizeImage;
27460
27704
  exports.rgbToHex = rgbToHex;
27461
27705
  exports.setAllConsoleLevelFlags = setAllConsoleLevelFlags;
27462
27706
  exports.setConsoleLevelFlagsForType = setConsoleLevelFlagsForType;