@lewismoten/gamemaker-sandbox-tools 3.1.0 → 3.4.0
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.
- package/CHANGELOG.md +44 -0
- package/NOTICE.md +105 -3
- package/README.md +301 -15
- package/dist/audio-files.js +82 -0
- package/dist/audio.js +23 -138
- package/dist/block-merge.js +43 -0
- package/dist/color-reduce.js +44 -0
- package/dist/colors.js +87 -0
- package/dist/delta.js +75 -0
- package/dist/disk-diff.js +220 -0
- package/dist/drawing.js +83 -869
- package/dist/embroidery/compile.js +85 -0
- package/dist/embroidery/dst.js +79 -0
- package/dist/embroidery/exp.js +26 -0
- package/dist/embroidery/fill.js +49 -0
- package/dist/embroidery/geom.js +82 -0
- package/dist/embroidery/pes.js +79 -0
- package/dist/embroidery/satin.js +29 -0
- package/dist/embroidery/simulate.js +30 -0
- package/dist/embroidery/strokeFont.js +253 -0
- package/dist/embroidery/svg.js +24 -0
- package/dist/embroidery/types.js +13 -0
- package/dist/embroidery/units.js +26 -0
- package/dist/embroidery/validate.js +15 -0
- package/dist/formats/blocks.js +1 -103
- package/dist/formats/character.js +1 -83
- package/dist/formats/cmf.js +1 -37
- package/dist/formats/fli.js +1 -296
- package/dist/formats/fliLimits.js +1 -54
- package/dist/formats/game.js +1 -193
- package/dist/formats/gif.js +1 -125
- package/dist/formats/graphicScripts.js +1 -44
- package/dist/formats/map.js +1 -38
- package/dist/formats/monster.js +1 -69
- package/dist/formats/palette.js +1 -58
- package/dist/formats/recording.js +1 -17
- package/dist/formats/sound.js +1 -44
- package/dist/formats/voc.js +1 -303
- package/dist/gif-shrink.js +56 -0
- package/dist/image/png.js +42 -0
- package/dist/images.js +81 -43
- package/dist/kit/actors.js +19 -0
- package/dist/kit/align.js +204 -0
- package/dist/kit/blit.js +45 -0
- package/dist/kit/blockRoles.js +97 -0
- package/dist/kit/clips.js +40 -0
- package/dist/kit/coverPaint.js +18 -0
- package/dist/kit/disk.js +76 -0
- package/dist/kit/fadeOut.js +13 -0
- package/dist/kit/fliClips.js +133 -0
- package/dist/kit/fliShrink.js +277 -0
- package/dist/kit/gameSim.js +235 -0
- package/dist/kit/hopBot.js +142 -0
- package/dist/kit/levelGen.js +1423 -0
- package/dist/kit/levelGrid.js +33 -0
- package/dist/kit/levelPicture.js +27 -0
- package/dist/kit/menuVersion.js +19 -0
- package/dist/kit/microText.js +35 -0
- package/dist/kit/mumble.js +74 -0
- package/dist/kit/music.js +8 -0
- package/dist/kit/palRamps.js +32 -0
- package/dist/kit/palette.js +49 -0
- package/dist/kit/pcText.js +72 -0
- package/dist/kit/photo.js +150 -0
- package/dist/kit/pixels.js +79 -0
- package/dist/kit/png.js +40 -0
- package/dist/kit/quantize.js +72 -0
- package/dist/kit/raytrace.js +379 -0
- package/dist/kit/recordedDemo.js +10 -0
- package/dist/kit/reel.js +77 -0
- package/dist/kit/road3d.js +67 -0
- package/dist/kit/routeChecks.js +8 -0
- package/dist/kit/saveSlots.js +11 -0
- package/dist/kit/sceneInit.js +13 -0
- package/dist/kit/sceneSim.js +112 -0
- package/dist/kit/screenText.js +15 -0
- package/dist/kit/sdftext.js +237 -0
- package/dist/kit/shading.js +69 -0
- package/dist/kit/song.js +251 -0
- package/dist/kit/songFx.js +179 -0
- package/dist/kit/sound.js +52 -0
- package/dist/kit/synthParts.js +20 -0
- package/dist/kit/tar.js +53 -0
- package/dist/kit/textBounds.js +84 -0
- package/dist/kit/textfit.js +246 -0
- package/dist/kit/transforms.js +57 -0
- package/dist/kit/tune.js +21 -0
- package/dist/look-alike.js +50 -0
- package/dist/menu-version.js +4 -0
- package/dist/mesh/colorBodies.js +137 -0
- package/dist/mesh/decimate.js +207 -0
- package/dist/mesh/meshCheck.js +51 -0
- package/dist/mesh/overhang.js +41 -0
- package/dist/mesh/sampledField.js +12 -0
- package/dist/mesh/stl.js +36 -0
- package/dist/mesh/surfaceNets.js +79 -0
- package/dist/mesh/tetraMesh.js +62 -0
- package/dist/mesh/threeMf.js +58 -0
- package/dist/mesh/zipFile.js +52 -0
- package/dist/microFont.js +101 -0
- package/dist/music/compose.js +72 -0
- package/dist/pack/meshPack.js +198 -0
- package/dist/pack/threeMfPack.js +92 -0
- package/dist/palette-reserve.js +116 -0
- package/dist/palettes.js +138 -0
- package/dist/release-notes.js +40 -0
- package/dist/simulation.js +16 -2774
- package/dist/text.js +74 -0
- package/dist/types/audio.d.ts +4 -0
- package/dist/types/audioFiles.d.ts +22 -0
- package/dist/types/audioWav.d.ts +4 -0
- package/dist/types/blockMerge.d.ts +24 -0
- package/dist/types/colorReduce.d.ts +23 -0
- package/dist/types/{web/packages/tools/src/colors.d.ts → colors.d.ts} +6 -0
- package/dist/types/delta.d.ts +32 -0
- package/dist/types/diskDiff.d.ts +47 -0
- package/dist/types/drawing.d.ts +15 -0
- package/dist/types/embroidery/compile.d.ts +3 -0
- package/dist/types/embroidery/dst.d.ts +13 -0
- package/dist/types/embroidery/exp.d.ts +8 -0
- package/dist/types/embroidery/fill.d.ts +6 -0
- package/dist/types/embroidery/geom.d.ts +19 -0
- package/dist/types/embroidery/pes.d.ts +10 -0
- package/dist/types/embroidery/satin.d.ts +11 -0
- package/dist/types/embroidery/simulate.d.ts +19 -0
- package/dist/types/embroidery/strokeFont.d.ts +20 -0
- package/dist/types/embroidery/svg.d.ts +3 -0
- package/dist/types/embroidery/types.d.ts +70 -0
- package/dist/types/embroidery/units.d.ts +10 -0
- package/dist/types/embroidery/validate.d.ts +22 -0
- package/dist/types/formats/blocks.d.ts +1 -0
- package/dist/types/formats/character.d.ts +1 -0
- package/dist/types/formats/cmf.d.ts +1 -0
- package/dist/types/formats/fli.d.ts +1 -0
- package/dist/types/formats/fliLimits.d.ts +1 -0
- package/dist/types/formats/game.d.ts +1 -0
- package/dist/types/formats/gif.d.ts +1 -0
- package/dist/types/formats/graphicScripts.d.ts +1 -0
- package/dist/types/formats/map.d.ts +1 -0
- package/dist/types/formats/monster.d.ts +1 -0
- package/dist/types/formats/palette.d.ts +1 -0
- package/dist/types/formats/recording.d.ts +1 -0
- package/dist/types/formats/sound.d.ts +1 -0
- package/dist/types/formats/voc.d.ts +1 -0
- package/dist/types/gifShrink.d.ts +8 -0
- package/dist/types/image/animatedGif.d.ts +9 -0
- package/dist/types/image/surface.d.ts +26 -0
- package/dist/types/images.d.ts +13 -0
- package/dist/types/kit/actors.d.ts +7 -0
- package/dist/types/kit/align.d.ts +93 -0
- package/dist/types/kit/audioEvents.d.ts +26 -0
- package/dist/types/kit/blit.d.ts +20 -0
- package/dist/types/kit/blockRoles.d.ts +243 -0
- package/dist/types/{games/kit → kit}/clips.d.ts +1 -1
- package/dist/types/kit/coverPaint.d.ts +7 -0
- package/dist/types/kit/disk.d.ts +15 -0
- package/dist/types/kit/fadeOut.d.ts +12 -0
- package/dist/types/kit/fliClips.d.ts +32 -0
- package/dist/types/kit/fliShrink.d.ts +149 -0
- package/dist/types/{games/kit → kit}/gameSim.d.ts +9 -5
- package/dist/types/kit/hopBot.d.ts +72 -0
- package/dist/types/kit/laserClearance.d.ts +16 -0
- package/dist/types/kit/laserJoints.d.ts +39 -0
- package/dist/types/kit/laserLayout.d.ts +54 -0
- package/dist/types/kit/laserPixels.d.ts +52 -0
- package/dist/types/kit/laserPreview.d.ts +9 -0
- package/dist/types/kit/laserSvg.d.ts +35 -0
- package/dist/types/kit/levelGen/castle.d.ts +17 -0
- package/dist/types/kit/levelGen/dungeon.d.ts +11 -0
- package/dist/types/kit/levelGen/forest.d.ts +17 -0
- package/dist/types/kit/levelGen/furnish.d.ts +31 -0
- package/dist/types/kit/levelGen/grid.d.ts +46 -0
- package/dist/types/kit/levelGen/index.d.ts +138 -0
- package/dist/types/kit/levelGen/interior.d.ts +18 -0
- package/dist/types/kit/levelGen/jumpModel.d.ts +78 -0
- package/dist/types/kit/levelGen/needs.d.ts +44 -0
- package/dist/types/kit/levelGen/overworld.d.ts +21 -0
- package/dist/types/kit/levelGen/platform.d.ts +59 -0
- package/dist/types/kit/levelGen/platformCap.d.ts +13 -0
- package/dist/types/kit/levelGen/platformReach.d.ts +37 -0
- package/dist/types/kit/levelGen/props.d.ts +37 -0
- package/dist/types/kit/levelGen/town.d.ts +24 -0
- package/dist/types/kit/levelGrid.d.ts +16 -0
- package/dist/types/kit/levelPicture.d.ts +9 -0
- package/dist/types/kit/menuVersion.d.ts +7 -0
- package/dist/types/kit/microText.d.ts +18 -0
- package/dist/types/kit/mumble.d.ts +41 -0
- package/dist/types/kit/music.d.ts +1 -0
- package/dist/types/kit/palMerge.d.ts +10 -0
- package/dist/types/kit/palRamps.d.ts +28 -0
- package/dist/types/kit/pcText.d.ts +19 -0
- package/dist/types/kit/photo.d.ts +69 -0
- package/dist/types/kit/png.d.ts +7 -0
- package/dist/types/kit/quantize.d.ts +20 -0
- package/dist/types/kit/raytrace.d.ts +169 -0
- package/dist/types/kit/recordedDemo.d.ts +1 -0
- package/dist/types/kit/road3d.d.ts +71 -0
- package/dist/types/kit/routeChecks.d.ts +6 -0
- package/dist/types/kit/saveSlots.d.ts +17 -0
- package/dist/types/kit/sceneInit.d.ts +11 -0
- package/dist/types/{games/kit → kit}/sceneSim.d.ts +5 -5
- package/dist/types/kit/screenText.d.ts +3 -0
- package/dist/types/kit/sdftext.d.ts +34 -0
- package/dist/types/kit/shading.d.ts +23 -0
- package/dist/types/kit/shareBlocks.d.ts +20 -0
- package/dist/types/kit/song.d.ts +89 -0
- package/dist/types/kit/songFx.d.ts +99 -0
- package/dist/types/kit/synthParts.d.ts +7 -0
- package/dist/types/kit/tar.d.ts +13 -0
- package/dist/types/kit/textfit.d.ts +74 -0
- package/dist/types/kit/transforms.d.ts +8 -0
- package/dist/types/lookAlike.d.ts +31 -0
- package/dist/types/menuVersionEntry.d.ts +1 -0
- package/dist/types/mesh/colorBodies.d.ts +18 -0
- package/dist/types/mesh/decimate.d.ts +10 -0
- package/dist/types/mesh/fieldTrinket.d.ts +40 -0
- package/dist/types/mesh/figureShapes.d.ts +24 -0
- package/dist/types/mesh/mesh.d.ts +9 -0
- package/dist/types/mesh/meshCheck.d.ts +22 -0
- package/dist/types/mesh/overhang.d.ts +24 -0
- package/dist/types/mesh/pixelFigure.d.ts +41 -0
- package/dist/types/mesh/sampledField.d.ts +3 -0
- package/dist/types/mesh/sdfShapes.d.ts +20 -0
- package/dist/types/mesh/stl.d.ts +9 -0
- package/dist/types/mesh/strokeText.d.ts +8 -0
- package/dist/types/mesh/surfaceNets.d.ts +14 -0
- package/dist/types/mesh/tetraMesh.d.ts +4 -0
- package/dist/types/mesh/threeMf.d.ts +12 -0
- package/dist/types/mesh/trinketKinds.d.ts +72 -0
- package/dist/types/mesh/trinketTool.d.ts +26 -0
- package/dist/types/mesh/voxel.d.ts +10 -0
- package/dist/types/mesh/zipFile.d.ts +13 -0
- package/dist/types/microFont.d.ts +6 -0
- package/dist/types/pack/meshPack.d.ts +26 -0
- package/dist/types/pack/threeMfPack.d.ts +11 -0
- package/dist/types/palettePresetData.d.ts +4 -0
- package/dist/types/palettePresets.d.ts +12 -0
- package/dist/types/paletteReserve.d.ts +52 -0
- package/dist/types/palettes.d.ts +4 -0
- package/dist/types/releaseNotes.d.ts +3 -0
- package/dist/types/simulation.d.ts +6 -0
- package/dist/types/{web/packages/tools/src/text.d.ts → text.d.ts} +6 -6
- package/package.json +145 -15
- package/dist/binary-D7wuaC5g.js +0 -120
- package/dist/pixels-DzfIIUOl.js +0 -76
- package/dist/types/games/kit/blit.d.ts +0 -10
- package/dist/types/games/kit/music.d.ts +0 -1
- package/dist/types/games/kit/pcText.d.ts +0 -8
- package/dist/types/games/kit/shading.d.ts +0 -11
- package/dist/types/web/packages/tools/src/audio.d.ts +0 -3
- package/dist/types/web/packages/tools/src/drawing.d.ts +0 -10
- package/dist/types/web/packages/tools/src/images.d.ts +0 -2
- package/dist/types/web/packages/tools/src/microFont.d.ts +0 -1
- package/dist/types/web/packages/tools/src/simulation.d.ts +0 -3
- package/dist/types/web/scripts/cdGames.d.ts +0 -103
- package/dist/types/web/scripts/gameShots.d.ts +0 -12
- package/dist/types/web/scripts/ogImage.d.ts +0 -21
- package/dist/types/web/src/audio/cmfLoad.d.ts +0 -7
- package/dist/types/web/src/audio/cmfPlayer.d.ts +0 -69
- package/dist/types/web/src/audio/context.d.ts +0 -12
- package/dist/types/web/src/audio/engine.d.ts +0 -39
- package/dist/types/web/src/audio/music.worklet.d.ts +0 -14
- package/dist/types/web/src/audio/opl.d.ts +0 -37
- package/dist/types/web/src/audio/output.d.ts +0 -13
- package/dist/types/web/src/desk/boxes/boxFacts.d.ts +0 -85
- package/dist/types/web/src/dosPlayer/fileExtensions.d.ts +0 -44
- package/dist/types/web/src/dosPlayer/patchRules.d.ts +0 -24
- package/dist/types/web/src/dosPlayer/patchTable.d.ts +0 -80
- package/dist/types/web/src/edition.d.ts +0 -6
- package/dist/types/web/src/eggs/eggState.d.ts +0 -26
- package/dist/types/web/src/eggs/eggs.d.ts +0 -31
- package/dist/types/web/src/engine/character.d.ts +0 -30
- package/dist/types/web/src/engine/funcKeys.d.ts +0 -33
- package/dist/types/web/src/engine/game.d.ts +0 -52
- package/dist/types/web/src/engine/keys.d.ts +0 -17
- package/dist/types/web/src/engine/machine.d.ts +0 -99
- package/dist/types/web/src/engine/menus.d.ts +0 -46
- package/dist/types/web/src/engine/monsters.d.ts +0 -19
- package/dist/types/web/src/engine/playGain.d.ts +0 -11
- package/dist/types/web/src/engine/playerLook.d.ts +0 -26
- package/dist/types/web/src/engine/recorder.d.ts +0 -60
- package/dist/types/web/src/engine/render.d.ts +0 -8
- package/dist/types/web/src/engine/scene.d.ts +0 -156
- package/dist/types/web/src/engine/scroll.d.ts +0 -16
- package/dist/types/web/src/engine/showGraphic.d.ts +0 -39
- package/dist/types/web/src/engine/slowPc.d.ts +0 -62
- package/dist/types/web/src/engine/touch.d.ts +0 -33
- package/dist/types/web/src/engine/world.d.ts +0 -215
- package/dist/types/web/src/export/gameAbout.d.ts +0 -15
- package/dist/types/web/src/formats/binary.d.ts +0 -44
- package/dist/types/web/src/formats/blocks.d.ts +0 -52
- package/dist/types/web/src/formats/character.d.ts +0 -65
- package/dist/types/web/src/formats/cmf.d.ts +0 -33
- package/dist/types/web/src/formats/fli.d.ts +0 -45
- package/dist/types/web/src/formats/fliLimits.d.ts +0 -13
- package/dist/types/web/src/formats/game.d.ts +0 -72
- package/dist/types/web/src/formats/gif.d.ts +0 -15
- package/dist/types/web/src/formats/graphicScripts.d.ts +0 -18
- package/dist/types/web/src/formats/highscore.d.ts +0 -10
- package/dist/types/web/src/formats/map.d.ts +0 -24
- package/dist/types/web/src/formats/monster.d.ts +0 -48
- package/dist/types/web/src/formats/palette.d.ts +0 -15
- package/dist/types/web/src/formats/recording.d.ts +0 -7
- package/dist/types/web/src/formats/sound.d.ts +0 -13
- package/dist/types/web/src/formats/voc.d.ts +0 -13
- package/dist/types/web/src/gfx/cp437Glyphs.d.ts +0 -2
- package/dist/types/web/src/gfx/font8x8.d.ts +0 -2
- package/dist/types/web/src/gfx/levelPicture.d.ts +0 -81
- package/dist/types/web/src/gfx/screen.d.ts +0 -46
- package/dist/types/web/src/gfx/titlePicture.d.ts +0 -21
- package/dist/types/web/src/input/chords.d.ts +0 -22
- package/dist/types/web/src/input/deskMouse.d.ts +0 -14
- package/dist/types/web/src/input/keyboard.d.ts +0 -39
- package/dist/types/web/src/input/scancodes.d.ts +0 -3
- package/dist/types/web/src/manual/printables/types.d.ts +0 -277
- package/dist/types/web/src/project/bizarre.d.ts +0 -28
- package/dist/types/web/src/project/companion.d.ts +0 -35
- package/dist/types/web/src/project/diskFacts.d.ts +0 -30
- package/dist/types/web/src/project/files.d.ts +0 -124
- package/dist/types/web/src/project/gameFiles.d.ts +0 -49
- package/dist/types/web/src/project/gamePack.d.ts +0 -17
- package/dist/types/web/src/project/health.d.ts +0 -30
- package/dist/types/web/src/project/secretGames.d.ts +0 -19
- package/dist/types/web/src/project/storage.d.ts +0 -46
- package/dist/types/web/src/project/streamGame.d.ts +0 -38
- package/dist/types/web/src/project/zip.d.ts +0 -33
- package/dist/types/web/src/retro/dos/disks.d.ts +0 -33
- package/dist/types/web/src/retro/text/cp437.d.ts +0 -4
- package/dist/types/web/src/seededRandom.d.ts +0 -6
- package/dist/types/web/src/tinHearts/deskHearts.d.ts +0 -33
- package/dist/types/web/src/tinHearts/manifest.d.ts +0 -30
- package/dist/types/web/src/tinHearts/tinHearts.d.ts +0 -84
- package/dist/types/web/src/walkthrough/format.d.ts +0 -92
- package/dist/types/web/src/walkthrough/madeUpScores.d.ts +0 -6
- package/dist/types/web/src/walkthrough/runtime.d.ts +0 -134
- /package/dist/types/{web/src/assistant → image}/png.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/palette.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/pixels.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/reel.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/sound.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/textBounds.d.ts +0 -0
- /package/dist/types/{games/kit → kit}/tune.d.ts +0 -0
- /package/dist/types/{web/src/audio → music}/compose.d.ts +0 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { inspectMesh as B } from "./meshCheck.js";
|
|
2
|
+
const D = [
|
|
3
|
+
[0, 1],
|
|
4
|
+
[2, 3],
|
|
5
|
+
[4, 5],
|
|
6
|
+
[6, 7],
|
|
7
|
+
[0, 2],
|
|
8
|
+
[1, 3],
|
|
9
|
+
[4, 6],
|
|
10
|
+
[5, 7],
|
|
11
|
+
[0, 4],
|
|
12
|
+
[1, 5],
|
|
13
|
+
[2, 6],
|
|
14
|
+
[3, 7]
|
|
15
|
+
];
|
|
16
|
+
function G(E, f, A, j = 0) {
|
|
17
|
+
const { cell: s } = f, c = Math.ceil((f.max[0] - f.min[0]) / s) + 6, l = Math.ceil((f.max[1] - f.min[1]) / s) + 6, u = Math.ceil((f.max[2] - f.min[2]) / s) + 6, b = f.min[0] - 3 * s + A[0] * s, g = f.min[1] - 3 * s + A[1] * s, z = f.min[2] - 3 * s + A[2] * s, d = new Float32Array(c * l * u);
|
|
18
|
+
for (let n = 0; n < u; n++)
|
|
19
|
+
for (let t = 0; t < l; t++)
|
|
20
|
+
for (let e = 0; e < c; e++) {
|
|
21
|
+
let o = E(b + e * s, g + t * s, z + n * s);
|
|
22
|
+
const h = (i, p) => i <= 1 || i >= p - 2;
|
|
23
|
+
if (o < 0 && (h(e, c) || h(t, l) || h(n, u)))
|
|
24
|
+
throw new Error(
|
|
25
|
+
`surfaceNets: the surface leaves the box at ${e},${t},${n} of ${c},${l},${u} (${b + e * s}, ${g + t * s}, ${z + n * s}) value ${o}`
|
|
26
|
+
);
|
|
27
|
+
(e === 0 || t === 0 || n === 0 || e === c - 1 || t === l - 1 || n === u - 1) && (o = Math.max(o, 1e-6)), d[e + c * (t + l * n)] = o === 0 ? 1e-9 : o;
|
|
28
|
+
}
|
|
29
|
+
const M = (n, t, e) => n + c * (t + l * e);
|
|
30
|
+
for (let n = 0; n < j; n++) {
|
|
31
|
+
const t = d.slice();
|
|
32
|
+
for (let e = 1; e < u - 1; e++)
|
|
33
|
+
for (let o = 1; o < l - 1; o++)
|
|
34
|
+
for (let h = 1; h < c - 1; h++) {
|
|
35
|
+
const i = M(h, o, e);
|
|
36
|
+
d[i] = t[i] * 0.4 + (t[i - 1] + t[i + 1] + t[i - c] + t[i + c] + t[i - c * l] + t[i + c * l]) * 0.1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const a = new Int32Array((c - 1) * (l - 1) * (u - 1)).fill(-1), m = (n, t, e) => n + (c - 1) * (t + (l - 1) * e), x = [], k = new Float32Array(8);
|
|
40
|
+
for (let n = 0; n < u - 1; n++)
|
|
41
|
+
for (let t = 0; t < l - 1; t++)
|
|
42
|
+
for (let e = 0; e < c - 1; e++) {
|
|
43
|
+
let o = 0;
|
|
44
|
+
for (let r = 0; r < 8; r++)
|
|
45
|
+
k[r] = d[M(e + (r & 1), t + (r >> 1 & 1), n + (r >> 2))], k[r] < 0 && o++;
|
|
46
|
+
if (o === 0 || o === 8) continue;
|
|
47
|
+
let h = 0, i = 0, p = 0, y = 0;
|
|
48
|
+
for (const [r, $] of D) {
|
|
49
|
+
const v = k[r], w = k[$];
|
|
50
|
+
if (v < 0 == w < 0) continue;
|
|
51
|
+
const N = v / (v - w);
|
|
52
|
+
h += (r & 1) + N * (($ & 1) - (r & 1)), i += (r >> 1 & 1) + N * (($ >> 1 & 1) - (r >> 1 & 1)), p += (r >> 2) + N * (($ >> 2) - (r >> 2)), y++;
|
|
53
|
+
}
|
|
54
|
+
a[m(e, t, n)] = x.length / 3, x.push(b + (e + h / y) * s, g + (t + i / y) * s, z + (n + p / y) * s);
|
|
55
|
+
}
|
|
56
|
+
const F = [], I = (n, t, e, o, h) => {
|
|
57
|
+
const i = (v, w) => (x[v * 3] - x[w * 3]) ** 2 + (x[v * 3 + 1] - x[w * 3 + 1]) ** 2 + (x[v * 3 + 2] - x[w * 3 + 2]) ** 2, [p, y, r, $] = h ? [n, o, e, t] : [n, t, e, o];
|
|
58
|
+
i(p, r) <= i(y, $) ? F.push(p, y, r, p, r, $) : F.push(p, y, $, y, r, $);
|
|
59
|
+
};
|
|
60
|
+
for (let n = 1; n < u - 1; n++)
|
|
61
|
+
for (let t = 1; t < l - 1; t++)
|
|
62
|
+
for (let e = 1; e < c - 1; e++) {
|
|
63
|
+
const o = d[M(e, t, n)] < 0;
|
|
64
|
+
o !== d[M(e + 1, t, n)] < 0 && I(a[m(e, t - 1, n - 1)], a[m(e, t, n - 1)], a[m(e, t, n)], a[m(e, t - 1, n)], !o), o !== d[M(e, t + 1, n)] < 0 && I(a[m(e - 1, t, n - 1)], a[m(e - 1, t, n)], a[m(e, t, n)], a[m(e, t, n - 1)], !o), o !== d[M(e, t, n + 1)] < 0 && I(a[m(e - 1, t - 1, n)], a[m(e, t - 1, n)], a[m(e, t, n)], a[m(e - 1, t, n)], !o);
|
|
65
|
+
}
|
|
66
|
+
return { positions: Float32Array.from(x), indices: Uint32Array.from(F) };
|
|
67
|
+
}
|
|
68
|
+
function S(E, f) {
|
|
69
|
+
let A, j = 1 / 0;
|
|
70
|
+
for (let s = 0; s < (f.attempts ?? 30); s++) {
|
|
71
|
+
const c = s * 0.137, l = G(E, { ...f, cell: f.cell * (1 + 0.013 * s) }, [c % 1, c * 1.7 % 1, c * 2.3 % 1], s >= 22 ? 2 : s >= 10 ? 1 : 0), u = B(l), b = u.badEdges + Math.max(0, u.pieces - (f.maxPieces ?? 1 / 0));
|
|
72
|
+
if (b === 0) return l;
|
|
73
|
+
b < j && ([A, j] = [l, b]);
|
|
74
|
+
}
|
|
75
|
+
return A;
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
S as surfaceNets
|
|
79
|
+
};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const O = [
|
|
2
|
+
[0, 1, 3, 7],
|
|
3
|
+
[0, 3, 2, 7],
|
|
4
|
+
[0, 2, 6, 7],
|
|
5
|
+
[0, 6, 4, 7],
|
|
6
|
+
[0, 4, 5, 7],
|
|
7
|
+
[0, 5, 1, 7]
|
|
8
|
+
];
|
|
9
|
+
function U(N, x) {
|
|
10
|
+
const { cell: f } = x, h = Math.ceil((x.max[0] - x.min[0]) / f) + 5, m = Math.ceil((x.max[1] - x.min[1]) / f) + 5, p = Math.ceil((x.max[2] - x.min[2]) / f) + 5, A = x.min[0] - 2 * f, I = x.min[1] - 2 * f, j = x.min[2] - 2 * f, g = new Float32Array(h * m * p);
|
|
11
|
+
for (let t = 0; t < p; t++)
|
|
12
|
+
for (let n = 0; n < m; n++)
|
|
13
|
+
for (let o = 0; o < h; o++) {
|
|
14
|
+
let c = N(A + o * f, I + n * f, j + t * f);
|
|
15
|
+
if (c < 0 && (o <= 1 || n <= 1 || t <= 1 || o >= h - 2 || n >= m - 2 || t >= p - 2)) throw new Error("tetraMesh: the surface leaves the box");
|
|
16
|
+
(o === 0 || n === 0 || t === 0 || o === h - 1 || n === m - 1 || t === p - 1) && (c = Math.max(c, 1e-6)), g[o + h * (n + m * t)] = c === 0 || Math.abs(c) < 1e-9 ? c < 0 ? -1e-9 : 1e-9 : c;
|
|
17
|
+
}
|
|
18
|
+
const i = [], v = [], k = /* @__PURE__ */ new Map(), E = h * m * p, d = (t) => [A + t % h * f, I + Math.floor(t / h) % m * f, j + Math.floor(t / (h * m)) * f], M = (t, n) => {
|
|
19
|
+
t > n && ([t, n] = [n, t]);
|
|
20
|
+
let o = k.get(t * E + n);
|
|
21
|
+
if (o === void 0) {
|
|
22
|
+
const c = g[t], a = g[n], u = Math.min(0.99, Math.max(0.01, c / (c - a))), e = d(t), s = d(n);
|
|
23
|
+
o = i.length / 3, i.push(e[0] + (s[0] - e[0]) * u, e[1] + (s[1] - e[1]) * u, e[2] + (s[2] - e[2]) * u), k.set(t * E + n, o);
|
|
24
|
+
}
|
|
25
|
+
return o;
|
|
26
|
+
}, F = (t) => {
|
|
27
|
+
const n = [0, 0, 0];
|
|
28
|
+
for (const o of t) {
|
|
29
|
+
const c = d(o);
|
|
30
|
+
for (let a = 0; a < 3; a++) n[a] += c[a] / t.length;
|
|
31
|
+
}
|
|
32
|
+
return n;
|
|
33
|
+
}, z = (t, n, o, c, a) => {
|
|
34
|
+
const u = F(c), e = F(a), [s, l, r] = [i[n * 3] - i[t * 3], i[n * 3 + 1] - i[t * 3 + 1], i[n * 3 + 2] - i[t * 3 + 2]], [y, T, q] = [i[o * 3] - i[t * 3], i[o * 3 + 1] - i[t * 3 + 1], i[o * 3 + 2] - i[t * 3 + 2]];
|
|
35
|
+
(l * q - r * T) * (e[0] - u[0]) + (r * y - s * q) * (e[1] - u[1]) + (s * T - l * y) * (e[2] - u[2]) >= 0 ? v.push(t, n, o) : v.push(t, o, n);
|
|
36
|
+
}, w = new Int32Array(8);
|
|
37
|
+
for (let t = 0; t < p - 1; t++)
|
|
38
|
+
for (let n = 0; n < m - 1; n++)
|
|
39
|
+
for (let o = 0; o < h - 1; o++) {
|
|
40
|
+
const c = o + h * (n + m * t);
|
|
41
|
+
let a = 1 / 0, u = -1 / 0;
|
|
42
|
+
for (let e = 0; e < 8; e++)
|
|
43
|
+
w[e] = c + (e & 1) + h * ((e >> 1 & 1) + m * (e >> 2)), a = Math.min(a, g[w[e]]), u = Math.max(u, g[w[e]]);
|
|
44
|
+
if (!(a >= 0 || u < 0))
|
|
45
|
+
for (const e of O) {
|
|
46
|
+
const s = [], l = [];
|
|
47
|
+
for (const r of e) (g[w[r]] < 0 ? s : l).push(w[r]);
|
|
48
|
+
if (!(!s.length || !l.length))
|
|
49
|
+
if (s.length === 1 || l.length === 1) {
|
|
50
|
+
const r = s.length === 1 ? s[0] : l[0], y = s.length === 1 ? l : s;
|
|
51
|
+
z(M(r, y[0]), M(r, y[1]), M(r, y[2]), s, l);
|
|
52
|
+
} else {
|
|
53
|
+
const r = [M(s[0], l[0]), M(s[0], l[1]), M(s[1], l[1]), M(s[1], l[0])];
|
|
54
|
+
z(r[0], r[1], r[2], s, l), z(r[0], r[2], r[3], s, l);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return { positions: Float32Array.from(i), indices: Uint32Array.from(v) };
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
U as tetraMesh
|
|
62
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { readZip as u, writeZip as g } from "./zipFile.js";
|
|
2
|
+
const x = (o) => `#${o.map((l) => Math.round(l).toString(16).padStart(2, "0")).join("").toUpperCase()}`, d = (o) => o.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """), p = (o) => String(+o.toFixed(3));
|
|
3
|
+
function b(o, l, c = {}) {
|
|
4
|
+
const n = [
|
|
5
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
6
|
+
'<model unit="millimeter" xml:lang="en-US" xmlns="http://schemas.microsoft.com/3dmanufacturing/core/2015/02">',
|
|
7
|
+
`<metadata name="Title">${d(l)}</metadata>`,
|
|
8
|
+
"<resources>",
|
|
9
|
+
'<basematerials id="1">',
|
|
10
|
+
...o.map((a) => `<base name="${d(a.name)}" displaycolor="${x(a.color)}"/>`),
|
|
11
|
+
"</basematerials>"
|
|
12
|
+
];
|
|
13
|
+
o.forEach((a, e) => {
|
|
14
|
+
n.push(`<object id="${e + 2}" type="model" name="${d(a.name)}" pid="1" pindex="${e}"><mesh><vertices>`);
|
|
15
|
+
const s = a.mesh.positions;
|
|
16
|
+
for (let t = 0; t < s.length; t += 3) n.push(`<vertex x="${p(s[t])}" y="${p(s[t + 1])}" z="${p(s[t + 2])}"/>`);
|
|
17
|
+
n.push("</vertices><triangles>");
|
|
18
|
+
const r = a.mesh.indices;
|
|
19
|
+
for (let t = 0; t < r.length; t += 3) n.push(`<triangle v1="${r[t]}" v2="${r[t + 1]}" v3="${r[t + 2]}"/>`);
|
|
20
|
+
n.push("</triangles></mesh></object>");
|
|
21
|
+
}), n.push("</resources><build>", ...o.map((a, e) => `<item objectid="${e + 2}"/>`), "</build></model>");
|
|
22
|
+
const i = new TextEncoder();
|
|
23
|
+
return g(
|
|
24
|
+
[
|
|
25
|
+
{
|
|
26
|
+
name: "[Content_Types].xml",
|
|
27
|
+
data: i.encode(
|
|
28
|
+
'<?xml version="1.0" encoding="UTF-8"?><Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"><Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml"/><Default Extension="model" ContentType="application/vnd.ms-package.3dmanufacturing-3dmodel+xml"/></Types>'
|
|
29
|
+
)
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
name: "_rels/.rels",
|
|
33
|
+
data: i.encode(
|
|
34
|
+
'<?xml version="1.0" encoding="UTF-8"?><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Target="/3D/3dmodel.model" Id="rel0" Type="http://schemas.microsoft.com/3dmanufacturing/2013/01/3dmodel"/></Relationships>'
|
|
35
|
+
)
|
|
36
|
+
},
|
|
37
|
+
{ name: "3D/3dmodel.model", data: i.encode(n.join(`
|
|
38
|
+
`)) }
|
|
39
|
+
],
|
|
40
|
+
c
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
function v(o, l = {}) {
|
|
44
|
+
const c = u(o, l).find((e) => e.name === "3D/3dmodel.model");
|
|
45
|
+
if (!c) throw new Error("No 3D/3dmodel.model in the file");
|
|
46
|
+
const n = new TextDecoder().decode(c.data), i = [...n.matchAll(/<base name="([^"]*)" displaycolor="#([0-9A-F]{6})"/g)].map(
|
|
47
|
+
(e) => [e[1], [0, 2, 4].map((s) => parseInt(e[2].slice(s, s + 2), 16))]
|
|
48
|
+
), a = [];
|
|
49
|
+
for (const e of n.matchAll(/<object [^>]*pindex="(\d+)"[^>]*>([\s\S]*?)<\/object>/g)) {
|
|
50
|
+
const [s, r] = i[Number(e[1])], t = [...e[2].matchAll(/<vertex x="([^"]+)" y="([^"]+)" z="([^"]+)"/g)].flatMap((m) => [Number(m[1]), Number(m[2]), Number(m[3])]), h = [...e[2].matchAll(/<triangle v1="(\d+)" v2="(\d+)" v3="(\d+)"/g)].flatMap((m) => [Number(m[1]), Number(m[2]), Number(m[3])]);
|
|
51
|
+
a.push({ name: s, color: r, mesh: { positions: Float32Array.from(t), indices: Uint32Array.from(h) } });
|
|
52
|
+
}
|
|
53
|
+
return a;
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
v as read3mf,
|
|
57
|
+
b as write3mf
|
|
58
|
+
};
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const A = new Uint32Array(256).map((s, c) => {
|
|
2
|
+
let t = c;
|
|
3
|
+
for (let o = 0; o < 8; o++) t = t & 1 ? 3988292384 ^ t >>> 1 : t >>> 1;
|
|
4
|
+
return t >>> 0;
|
|
5
|
+
});
|
|
6
|
+
function m(s) {
|
|
7
|
+
let c = 4294967295;
|
|
8
|
+
for (const t of s) c = A[(c ^ t) & 255] ^ c >>> 8;
|
|
9
|
+
return (c ^ 4294967295) >>> 0;
|
|
10
|
+
}
|
|
11
|
+
function D(s, c = {}) {
|
|
12
|
+
const t = new TextEncoder(), o = [], U = [];
|
|
13
|
+
let n = 0;
|
|
14
|
+
for (const e of s) {
|
|
15
|
+
const i = t.encode(e.name), g = c.deflate?.(e.data), h = !!g && g.length < e.data.length, f = h ? g : e.data, d = m(e.data), u = new DataView(new ArrayBuffer(30));
|
|
16
|
+
u.setUint32(0, 67324752, !0), u.setUint16(4, 20, !0), u.setUint16(6, 2048, !0), u.setUint16(8, h ? 8 : 0, !0), u.setUint32(14, d, !0), u.setUint32(18, f.length, !0), u.setUint32(22, e.data.length, !0), u.setUint16(26, i.length, !0), o.push(new Uint8Array(u.buffer), i, f);
|
|
17
|
+
const r = new DataView(new ArrayBuffer(46));
|
|
18
|
+
r.setUint32(0, 33639248, !0), r.setUint16(4, 20, !0), r.setUint16(6, 20, !0), r.setUint16(8, 2048, !0), r.setUint16(10, h ? 8 : 0, !0), r.setUint32(16, d, !0), r.setUint32(20, f.length, !0), r.setUint32(24, e.data.length, !0), r.setUint16(28, i.length, !0), r.setUint32(42, n, !0), U.push(new Uint8Array(r.buffer), i), n += 30 + i.length + f.length;
|
|
19
|
+
}
|
|
20
|
+
const p = U.reduce((e, i) => e + i.length, 0), a = new DataView(new ArrayBuffer(22));
|
|
21
|
+
a.setUint32(0, 101010256, !0), a.setUint16(8, s.length, !0), a.setUint16(10, s.length, !0), a.setUint32(12, p, !0), a.setUint32(16, n, !0);
|
|
22
|
+
const w = [...o, ...U, new Uint8Array(a.buffer)], l = new Uint8Array(w.reduce((e, i) => e + i.length, 0));
|
|
23
|
+
let y = 0;
|
|
24
|
+
for (const e of w)
|
|
25
|
+
l.set(e, y), y += e.length;
|
|
26
|
+
return l;
|
|
27
|
+
}
|
|
28
|
+
function E(s, c = {}) {
|
|
29
|
+
const t = new DataView(s.buffer, s.byteOffset, s.byteLength);
|
|
30
|
+
let o = s.length - 22;
|
|
31
|
+
for (; o >= 0 && t.getUint32(o, !0) !== 101010256; ) o--;
|
|
32
|
+
if (o < 0) throw new Error("Not a ZIP file");
|
|
33
|
+
const U = t.getUint16(o + 10, !0);
|
|
34
|
+
let n = t.getUint32(o + 16, !0);
|
|
35
|
+
const p = new TextDecoder(), a = [];
|
|
36
|
+
for (let w = 0; w < U; w++) {
|
|
37
|
+
const l = t.getUint16(n + 10, !0), y = t.getUint32(n + 16, !0), e = t.getUint32(n + 20, !0), i = t.getUint16(n + 28, !0), g = t.getUint16(n + 30, !0), h = t.getUint16(n + 32, !0), f = t.getUint32(n + 42, !0), d = p.decode(s.subarray(n + 46, n + 46 + i)), u = f + 30 + t.getUint16(f + 26, !0) + t.getUint16(f + 28, !0), r = s.subarray(u, u + e);
|
|
38
|
+
let b = r;
|
|
39
|
+
if (l === 8) {
|
|
40
|
+
if (!c.inflate) throw new Error("A deflated entry needs an inflate function");
|
|
41
|
+
b = c.inflate(r);
|
|
42
|
+
} else if (l !== 0) throw new Error(`ZIP method ${l} is not supported`);
|
|
43
|
+
if (m(b) !== y) throw new Error(`ZIP entry ${d} fails its checksum`);
|
|
44
|
+
a.push({ name: d, data: b }), n += 46 + i + g + h;
|
|
45
|
+
}
|
|
46
|
+
return a;
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
m as crc32,
|
|
50
|
+
E as readZip,
|
|
51
|
+
D as writeZip
|
|
52
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
const o = Object.freeze({
|
|
2
|
+
0: "111101101101111",
|
|
3
|
+
1: "010110010010111",
|
|
4
|
+
2: "110001010100111",
|
|
5
|
+
3: "110001010001110",
|
|
6
|
+
4: "101101111001001",
|
|
7
|
+
5: "111100110001110",
|
|
8
|
+
6: "011100111101111",
|
|
9
|
+
7: "111001010010010",
|
|
10
|
+
8: "111101111101111",
|
|
11
|
+
9: "111101111001110",
|
|
12
|
+
A: "010101111101101",
|
|
13
|
+
B: "110101110101110",
|
|
14
|
+
C: "011100100100011",
|
|
15
|
+
D: "110101101101110",
|
|
16
|
+
E: "111100110100111",
|
|
17
|
+
F: "111100110100100",
|
|
18
|
+
G: "011100101101011",
|
|
19
|
+
H: "101101111101101",
|
|
20
|
+
I: "111010010010111",
|
|
21
|
+
J: "001001001101010",
|
|
22
|
+
K: "101101110101101",
|
|
23
|
+
L: "100100100100111",
|
|
24
|
+
M: "101111111101101",
|
|
25
|
+
N: "110101101101101",
|
|
26
|
+
O: "010101101101010",
|
|
27
|
+
P: "110101110100100",
|
|
28
|
+
Q: "010101101110011",
|
|
29
|
+
R: "110101110101101",
|
|
30
|
+
S: "011100010001110",
|
|
31
|
+
T: "111010010010010",
|
|
32
|
+
U: "101101101101111",
|
|
33
|
+
V: "101101101101010",
|
|
34
|
+
W: "101101111111101",
|
|
35
|
+
X: "101101010101101",
|
|
36
|
+
Y: "101101010010010",
|
|
37
|
+
Z: "111001010100111",
|
|
38
|
+
$: "011110010011110",
|
|
39
|
+
"&": "010101010101011",
|
|
40
|
+
"-": "000000111000000",
|
|
41
|
+
"!": "010010010000010",
|
|
42
|
+
".": "000000000000010",
|
|
43
|
+
"'": "010010000000000",
|
|
44
|
+
" ": "000000000000000",
|
|
45
|
+
":": "000010000010000",
|
|
46
|
+
"/": "001001010100100",
|
|
47
|
+
",": "000000000010100",
|
|
48
|
+
"?": "110001010000010",
|
|
49
|
+
"+": "000010111010000",
|
|
50
|
+
">": "100010001010100",
|
|
51
|
+
"<": "001010100010001",
|
|
52
|
+
"(": "010100100100010",
|
|
53
|
+
")": "010001001001010",
|
|
54
|
+
"#": "101111101111101",
|
|
55
|
+
µ: "000101101111100",
|
|
56
|
+
"=": "000111000111000",
|
|
57
|
+
_: "000000000000111",
|
|
58
|
+
"\\": "100100010001001",
|
|
59
|
+
'"': "101101000000000",
|
|
60
|
+
"¢": "010111100111010",
|
|
61
|
+
"*": "101010101000000",
|
|
62
|
+
"%": "101001010100101",
|
|
63
|
+
"@": "010101111100011",
|
|
64
|
+
"~": "000011110000000"
|
|
65
|
+
}), c = Object.freeze({
|
|
66
|
+
...o,
|
|
67
|
+
2: "111001111100111",
|
|
68
|
+
3: "111001111001111",
|
|
69
|
+
5: "111100111001111",
|
|
70
|
+
6: "111100111101111",
|
|
71
|
+
7: "111001001010010",
|
|
72
|
+
9: "111101111001111",
|
|
73
|
+
C: "111100100100111",
|
|
74
|
+
G: "111100101101111",
|
|
75
|
+
J: "001001001101111",
|
|
76
|
+
O: "111101101101111",
|
|
77
|
+
P: "111101111100100",
|
|
78
|
+
Q: "111101101111001",
|
|
79
|
+
S: "111100111001111",
|
|
80
|
+
"?": "111001011000010",
|
|
81
|
+
"*": "000101010101000",
|
|
82
|
+
"%": "101001010100101",
|
|
83
|
+
"@": "010101111100011",
|
|
84
|
+
"~": "000011110000000"
|
|
85
|
+
});
|
|
86
|
+
function f(t, n = !1) {
|
|
87
|
+
const r = n ? c : o;
|
|
88
|
+
return Object.freeze(
|
|
89
|
+
Object.fromEntries(
|
|
90
|
+
[...t].map((e) => {
|
|
91
|
+
if (!(e in r)) throw new RangeError(`No micro glyph for ${e}`);
|
|
92
|
+
return [e, r[e]];
|
|
93
|
+
})
|
|
94
|
+
)
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
export {
|
|
98
|
+
o as MICRO_GLYPHS,
|
|
99
|
+
c as MICRO_SQUARE_GLYPHS,
|
|
100
|
+
f as microGlyphs
|
|
101
|
+
};
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { encodeCmf as C } from "@lewismoten/gamemaker-sandbox-engine/formats/cmf";
|
|
2
|
+
function c(e) {
|
|
3
|
+
return Uint8Array.from([
|
|
4
|
+
e.modChar,
|
|
5
|
+
e.carChar,
|
|
6
|
+
e.modLevel,
|
|
7
|
+
e.carLevel,
|
|
8
|
+
e.modAD,
|
|
9
|
+
e.carAD,
|
|
10
|
+
e.modSR,
|
|
11
|
+
e.carSR,
|
|
12
|
+
e.modWave ?? 0,
|
|
13
|
+
e.carWave ?? 0,
|
|
14
|
+
e.feedback,
|
|
15
|
+
0,
|
|
16
|
+
0,
|
|
17
|
+
0,
|
|
18
|
+
0,
|
|
19
|
+
0
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
const S = {
|
|
23
|
+
piano: c({ modChar: 1, carChar: 1, modLevel: 90, carLevel: 0, modAD: 242, carAD: 243, modSR: 99, carSR: 101, feedback: 8 }),
|
|
24
|
+
bass: c({ modChar: 1, carChar: 1, modLevel: 26, carLevel: 0, modAD: 246, carAD: 245, modSR: 84, carSR: 69, feedback: 8 }),
|
|
25
|
+
strings: c({ modChar: 97, carChar: 33, modLevel: 29, carLevel: 0, modAD: 116, carAD: 99, modSR: 19, carSR: 21, feedback: 14 }),
|
|
26
|
+
brass: c({ modChar: 33, carChar: 33, modLevel: 26, carLevel: 0, modAD: 99, carAD: 116, modSR: 40, carSR: 23, feedback: 12 }),
|
|
27
|
+
lead: c({ modChar: 34, carChar: 33, modLevel: 27, carLevel: 0, modAD: 244, carAD: 244, modSR: 68, carSR: 36, modWave: 2, feedback: 12 }),
|
|
28
|
+
bell: c({ modChar: 7, carChar: 1, modLevel: 35, carLevel: 0, modAD: 245, carAD: 243, modSR: 34, carSR: 19, feedback: 4 }),
|
|
29
|
+
organ: c({ modChar: 50, carChar: 49, modLevel: 68, carLevel: 0, modAD: 240, carAD: 240, modSR: 15, carSR: 15, feedback: 1 }),
|
|
30
|
+
pad: c({ modChar: 161, carChar: 33, modLevel: 41, carLevel: 0, modAD: 67, carAD: 82, modSR: 5, carSR: 4, modWave: 1, feedback: 10 }),
|
|
31
|
+
pluck: c({ modChar: 3, carChar: 1, modLevel: 30, carLevel: 0, modAD: 248, carAD: 246, modSR: 53, carSR: 85, feedback: 12 })
|
|
32
|
+
}, D = { C: 0, D: 2, E: 4, F: 5, G: 7, A: 9, B: 11 }, L = { w: 4, h: 2, q: 1, e: 0.5, s: 0.25, t: 1 / 3 };
|
|
33
|
+
function R(e) {
|
|
34
|
+
if (/^r$/i.test(e)) return null;
|
|
35
|
+
const a = /^([A-G])([#b]?)(-?\d)$/.exec(e);
|
|
36
|
+
if (!a) throw new Error(`Bad note ${e}`);
|
|
37
|
+
return 12 * (Number(a[3]) + 1) + D[a[1]] + (a[2] === "#" ? 1 : a[2] === "b" ? -1 : 0);
|
|
38
|
+
}
|
|
39
|
+
function p(e, a) {
|
|
40
|
+
const n = Math.round(8760 / e), d = [], m = [], l = /* @__PURE__ */ new Map();
|
|
41
|
+
for (const r of a) {
|
|
42
|
+
d[r.channel] = r.instrument;
|
|
43
|
+
let t = 0;
|
|
44
|
+
for (const h of r.notes.split(",").map((o) => o.trim()).filter(Boolean)) {
|
|
45
|
+
const o = /^(.+?)\s+([whqest])(\.?)$/.exec(h);
|
|
46
|
+
if (!o) throw new Error(`Bad note "${h}"`);
|
|
47
|
+
const i = L[o[2]] * (o[3] ? 1.5 : 1) * n;
|
|
48
|
+
o[1].replace(/[[\]]/g, " ").trim().split(/\s+/).forEach((u, f) => {
|
|
49
|
+
const v = R(u);
|
|
50
|
+
if (v === null) return;
|
|
51
|
+
const s = Math.min(15, r.channel + f);
|
|
52
|
+
f > 0 && l.set(s, r.instrument);
|
|
53
|
+
const A = v + (r.transpose ?? 0);
|
|
54
|
+
m.push({ tick: t, data: [144 | s, A, r.velocity ?? 100] }), m.push({ tick: t + i * 0.92, data: [128 | s, A, 0] });
|
|
55
|
+
}), t += i;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
for (const [r, t] of l) d[r] ??= t;
|
|
59
|
+
for (let r = 0; r < 16; r++) d[r] ??= S.piano;
|
|
60
|
+
return C({ instruments: d, events: m, ticksPerBeat: n });
|
|
61
|
+
}
|
|
62
|
+
function w(e = 120) {
|
|
63
|
+
const a = Math.round(8760 / e), n = Array.from({ length: 16 }, () => S.piano);
|
|
64
|
+
return C({ instruments: n, events: [{ tick: 4 * a, data: [176, 7, 100] }], ticksPerBeat: a });
|
|
65
|
+
}
|
|
66
|
+
export {
|
|
67
|
+
S as INSTRUMENTS,
|
|
68
|
+
w as blankSong,
|
|
69
|
+
R as midi,
|
|
70
|
+
c as sbi,
|
|
71
|
+
p as song
|
|
72
|
+
};
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
class k {
|
|
2
|
+
buf = new Uint8Array(65536);
|
|
3
|
+
length = 0;
|
|
4
|
+
room(t) {
|
|
5
|
+
if (this.length + t <= this.buf.length) return;
|
|
6
|
+
let s = this.buf.length * 2;
|
|
7
|
+
for (; s < this.length + t; ) s *= 2;
|
|
8
|
+
const n = new Uint8Array(s);
|
|
9
|
+
n.set(this.buf.subarray(0, this.length)), this.buf = n;
|
|
10
|
+
}
|
|
11
|
+
bytes(t) {
|
|
12
|
+
this.room(t.length), this.buf.set(t, this.length), this.length += t.length;
|
|
13
|
+
}
|
|
14
|
+
u32(t) {
|
|
15
|
+
this.room(4), new DataView(this.buf.buffer).setUint32(this.length, t, !0), this.length += 4;
|
|
16
|
+
}
|
|
17
|
+
varint(t) {
|
|
18
|
+
for (this.room(8); t >= 128; )
|
|
19
|
+
this.buf[this.length++] = t % 128 | 128, t = Math.floor(t / 128);
|
|
20
|
+
this.buf[this.length++] = t;
|
|
21
|
+
}
|
|
22
|
+
done() {
|
|
23
|
+
return this.buf.slice(0, this.length);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
class U {
|
|
27
|
+
constructor(t) {
|
|
28
|
+
this.data = t, this.view = new DataView(t.buffer, t.byteOffset, t.byteLength);
|
|
29
|
+
}
|
|
30
|
+
data;
|
|
31
|
+
at = 0;
|
|
32
|
+
view;
|
|
33
|
+
bytes(t) {
|
|
34
|
+
if (this.at + t > this.data.length) throw new Error("Packed mesh is cut short");
|
|
35
|
+
const s = this.data.subarray(this.at, this.at + t);
|
|
36
|
+
return this.at += t, s;
|
|
37
|
+
}
|
|
38
|
+
u32() {
|
|
39
|
+
const t = this.view.getUint32(this.at, !0);
|
|
40
|
+
return this.at += 4, t;
|
|
41
|
+
}
|
|
42
|
+
varint() {
|
|
43
|
+
let t = 0, s = 1;
|
|
44
|
+
for (; ; ) {
|
|
45
|
+
if (this.at >= this.data.length) throw new Error("Packed mesh is cut short");
|
|
46
|
+
const n = this.data[this.at++];
|
|
47
|
+
if (t += (n & 127) * s, n < 128) return t;
|
|
48
|
+
s *= 128;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const F = (e) => e >= 0 ? e * 2 : -e * 2 - 1, L = (e) => e % 2 ? -(e + 1) / 2 : e / 2;
|
|
53
|
+
function m(e, t) {
|
|
54
|
+
const s = e.length / t, n = new Uint8Array(e.length);
|
|
55
|
+
for (let o = 0; o < s; o++) for (let r = 0; r < t; r++) n[r * s + o] = e[o * t + r];
|
|
56
|
+
return n;
|
|
57
|
+
}
|
|
58
|
+
function p(e, t) {
|
|
59
|
+
const s = e.length / t, n = new Uint8Array(e.length);
|
|
60
|
+
for (let o = 0; o < s; o++) for (let r = 0; r < t; r++) n[o * t + r] = e[r * s + o];
|
|
61
|
+
return n;
|
|
62
|
+
}
|
|
63
|
+
function S(e, t = /* @__PURE__ */ new Set()) {
|
|
64
|
+
const s = new k();
|
|
65
|
+
let n = 0;
|
|
66
|
+
for (let o = 0; o < e.length; o++) {
|
|
67
|
+
t.has(o) && (n = 0);
|
|
68
|
+
const r = e[o];
|
|
69
|
+
s.varint(F(n - r)), r >= n && (n = r + 1);
|
|
70
|
+
}
|
|
71
|
+
return s.done();
|
|
72
|
+
}
|
|
73
|
+
function v(e, t, s = /* @__PURE__ */ new Set()) {
|
|
74
|
+
const n = new Uint32Array(t);
|
|
75
|
+
let o = 0;
|
|
76
|
+
for (let r = 0; r < t; r++) {
|
|
77
|
+
s.has(r) && (o = 0);
|
|
78
|
+
const c = o - L(e.varint());
|
|
79
|
+
n[r] = c, c >= o && (o = c + 1);
|
|
80
|
+
}
|
|
81
|
+
return n;
|
|
82
|
+
}
|
|
83
|
+
function N(e, t, s = /* @__PURE__ */ new Set()) {
|
|
84
|
+
return v(new U(e), t, s);
|
|
85
|
+
}
|
|
86
|
+
const E = 827542855;
|
|
87
|
+
function I(e, t, s) {
|
|
88
|
+
const n = (h, l) => e.getFloat32(t + 12 + h * 12 + l * 4, !0), o = n(1, 0) - n(0, 0), r = n(1, 1) - n(0, 1), c = n(1, 2) - n(0, 2), w = n(2, 0) - n(0, 0), f = n(2, 1) - n(0, 1), a = n(2, 2) - n(0, 2), u = r * a - c * f, b = c * w - o * a, g = o * f - r * w, i = Math.sqrt(u * u + b * b + g * g) || 1;
|
|
89
|
+
s.setFloat32(0, u / i, !0), s.setFloat32(4, b / i, !0), s.setFloat32(8, g / i, !0);
|
|
90
|
+
}
|
|
91
|
+
function V(e) {
|
|
92
|
+
const t = new DataView(e.buffer, e.byteOffset, e.byteLength), s = e.length >= 84 ? t.getUint32(80, !0) : -1;
|
|
93
|
+
if (e.length !== 84 + s * 50) throw new Error("Not a binary STL: its size does not match its triangle count");
|
|
94
|
+
const n = /* @__PURE__ */ new Map(), o = new k(), r = new Uint32Array(s * 3), c = new Uint8Array(s * 2), w = [], f = new DataView(new ArrayBuffer(12)), a = new Uint8Array(f.buffer);
|
|
95
|
+
for (let i = 0; i < s; i++) {
|
|
96
|
+
const h = 84 + i * 50;
|
|
97
|
+
for (let l = 0; l < 3; l++) {
|
|
98
|
+
const y = h + 12 + l * 12, d = `${t.getUint32(y, !0)},${t.getUint32(y + 4, !0)},${t.getUint32(y + 8, !0)}`;
|
|
99
|
+
let A = n.get(d);
|
|
100
|
+
A === void 0 && (A = n.size, n.set(d, A), o.bytes(e.subarray(y, y + 12))), r[i * 3 + l] = A;
|
|
101
|
+
}
|
|
102
|
+
c[i * 2] = e[h + 48], c[i * 2 + 1] = e[h + 49], I(t, h, f);
|
|
103
|
+
for (let l = 0; l < 12; l++)
|
|
104
|
+
if (a[l] !== e[h + l]) {
|
|
105
|
+
w.push(i);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
const u = new k();
|
|
110
|
+
u.u32(E), u.u32(s), u.u32(n.size), u.bytes(e.subarray(0, 80)), u.bytes(m(o.done(), 4)), u.bytes(m(c, 2)), u.u32(w.length);
|
|
111
|
+
for (const i of w)
|
|
112
|
+
u.u32(i), u.bytes(e.subarray(84 + i * 50, 84 + i * 50 + 12));
|
|
113
|
+
u.bytes(S(r));
|
|
114
|
+
const b = u.done(), g = x(b);
|
|
115
|
+
if (g.length !== e.length || g.some((i, h) => i !== e[h])) throw new Error("The packed STL does not read back the same");
|
|
116
|
+
return b;
|
|
117
|
+
}
|
|
118
|
+
function x(e) {
|
|
119
|
+
const t = new U(e);
|
|
120
|
+
if (t.u32() !== E) throw new Error("Not a packed STL");
|
|
121
|
+
const s = t.u32(), n = t.u32(), o = t.bytes(80), r = p(t.bytes(n * 12), 4), c = p(t.bytes(s * 2), 2), w = /* @__PURE__ */ new Map();
|
|
122
|
+
for (let i = t.u32(); i > 0; i--) w.set(t.u32(), t.bytes(12));
|
|
123
|
+
const f = v(t, s * 3), a = new Uint8Array(84 + s * 50), u = new DataView(a.buffer);
|
|
124
|
+
a.set(o, 0), u.setUint32(80, s, !0);
|
|
125
|
+
const b = new DataView(new ArrayBuffer(12)), g = new Uint8Array(b.buffer);
|
|
126
|
+
for (let i = 0; i < s; i++) {
|
|
127
|
+
const h = 84 + i * 50;
|
|
128
|
+
for (let y = 0; y < 3; y++) {
|
|
129
|
+
const d = f[i * 3 + y];
|
|
130
|
+
if (d >= n) throw new Error("Packed STL names a corner it does not have");
|
|
131
|
+
a.set(r.subarray(d * 12, d * 12 + 12), h + 12 + y * 12);
|
|
132
|
+
}
|
|
133
|
+
a[h + 48] = c[i * 2], a[h + 49] = c[i * 2 + 1];
|
|
134
|
+
const l = w.get(i);
|
|
135
|
+
l ? a.set(l, h) : (I(u, h, b), a.set(g, h));
|
|
136
|
+
}
|
|
137
|
+
return a;
|
|
138
|
+
}
|
|
139
|
+
const T = 826690887;
|
|
140
|
+
function P(e) {
|
|
141
|
+
const t = new k(), s = new TextEncoder();
|
|
142
|
+
t.u32(T), t.u32(e.length);
|
|
143
|
+
for (const n of e) {
|
|
144
|
+
let o = n.data, r = 0;
|
|
145
|
+
if (/\.stl$/i.test(n.name))
|
|
146
|
+
try {
|
|
147
|
+
o = V(n.data), r = 1;
|
|
148
|
+
} catch {
|
|
149
|
+
}
|
|
150
|
+
const c = s.encode(n.name);
|
|
151
|
+
t.u32(c.length), t.bytes(c), t.bytes(Uint8Array.of(r)), t.u32(o.length), t.bytes(o);
|
|
152
|
+
}
|
|
153
|
+
return t.done();
|
|
154
|
+
}
|
|
155
|
+
function O(e) {
|
|
156
|
+
const t = new U(e);
|
|
157
|
+
if (t.u32() !== T) throw new Error("Not packed files");
|
|
158
|
+
const s = new TextDecoder();
|
|
159
|
+
return Array.from({ length: t.u32() }, () => {
|
|
160
|
+
const n = s.decode(t.bytes(t.u32())), o = t.bytes(1)[0], r = t.bytes(t.u32());
|
|
161
|
+
return { name: n, data: o === 1 ? x(r) : r.slice() };
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
const D = 826363207;
|
|
165
|
+
function $(e, t, s) {
|
|
166
|
+
const n = (e.length - t * 4) / 4;
|
|
167
|
+
if (!Number.isInteger(n) || n < 0) throw new Error("The file is not float32s then uint32s");
|
|
168
|
+
const o = new DataView(e.buffer, e.byteOffset, e.byteLength), r = new Uint32Array(n);
|
|
169
|
+
for (let a = 0; a < n; a++) r[a] = o.getUint32(t * 4 + a * 4, !0);
|
|
170
|
+
const c = new k();
|
|
171
|
+
c.u32(D), c.u32(t), c.u32(n), c.u32(s.length);
|
|
172
|
+
for (const a of s) c.u32(a);
|
|
173
|
+
c.bytes(m(e.subarray(0, t * 4), 4)), c.bytes(S(r, new Set(s)));
|
|
174
|
+
const w = c.done(), f = M(w);
|
|
175
|
+
if (f.length !== e.length || f.some((a, u) => a !== e[u])) throw new Error("The packed arrays do not read back the same");
|
|
176
|
+
return w;
|
|
177
|
+
}
|
|
178
|
+
function M(e) {
|
|
179
|
+
const t = new U(e);
|
|
180
|
+
if (t.u32() !== D) throw new Error("Not packed arrays");
|
|
181
|
+
const s = t.u32(), n = t.u32(), o = new Set(Array.from({ length: t.u32() }, () => t.u32())), r = new Uint8Array(s * 4 + n * 4);
|
|
182
|
+
r.set(p(t.bytes(s * 4), 4), 0);
|
|
183
|
+
const c = v(t, n, o), w = new DataView(r.buffer);
|
|
184
|
+
for (let f = 0; f < n; f++) w.setUint32(s * 4 + f * 4, c[f], !0);
|
|
185
|
+
return r;
|
|
186
|
+
}
|
|
187
|
+
export {
|
|
188
|
+
p as fromPlanes,
|
|
189
|
+
P as packFiles,
|
|
190
|
+
$ as packFloatsAndIndices,
|
|
191
|
+
S as packIndices,
|
|
192
|
+
V as packStl,
|
|
193
|
+
m as toPlanes,
|
|
194
|
+
O as unpackFiles,
|
|
195
|
+
M as unpackFloatsAndIndices,
|
|
196
|
+
N as unpackIndices,
|
|
197
|
+
x as unpackStl
|
|
198
|
+
};
|