-
Notifications
You must be signed in to change notification settings - Fork 4
/
index.mjs
74 lines (68 loc) · 1.81 KB
/
index.mjs
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { createChunk } from './create-chunk.mjs';
import { SIGNATURE } from './chunks/signature.mjs';
import { IHDR } from './chunks/ihdr.mjs';
import { PLTE_COLOR } from './chunks/plte-color.mjs';
import { PLTE_WAYPOINT } from './chunks/plte-waypoint.mjs';
import { PHYS } from './chunks/phys.mjs';
import { IEND } from './chunks/iend.mjs';
import { createRequire } from 'module';
const require = createRequire(import.meta.url);
const zlib = require('zlib');
const WIDTH = 256;
const HEIGHT = 256;
const transposeBuffer = function(buffer) {
const result = [];
for (let xOffset = 0; xOffset < WIDTH; xOffset++) {
for (let index = xOffset; index < WIDTH * HEIGHT; index += HEIGHT) {
result.push(buffer[index]);
}
}
return Buffer.from(result);
};
const FILTER_TYPE = Buffer.from([0x00]);
const toScanlines = (data) => {
let scanlines = Buffer.from([]);
for (let index = 0; index < data.length; index += WIDTH) {
const scanline = data.slice(index, index + WIDTH);
scanlines = Buffer.concat([scanlines, FILTER_TYPE, scanline]);
}
return scanlines;
};
export const wrapColorData = (colorData, options = { overlayGrid: false }) => {
if (options.overlayGrid) {
for (let xOffset = 0; xOffset < WIDTH; xOffset++) {
for (let yOffset = 0; yOffset < HEIGHT; yOffset++) {
if (xOffset % 2 === 0 && yOffset % 2 === 0) {
const index = xOffset * WIDTH + yOffset;
colorData[index] = 0x00;
}
}
}
}
return Buffer.concat([
SIGNATURE,
IHDR,
PLTE_COLOR,
PHYS,
createChunk('IDAT', zlib.deflateSync(
toScanlines(
transposeBuffer(colorData)
)
)),
IEND,
]);
};
export const wrapWaypointData = (waypointData) => {
return Buffer.concat([
SIGNATURE,
IHDR,
PLTE_WAYPOINT,
PHYS,
createChunk('IDAT', zlib.deflateSync(
toScanlines(
transposeBuffer(waypointData)
)
)),
IEND,
]);
};