UNPKG

tiled-kaboom

Version:

This is a map-loader for [kaboom](https://kaboomjs.com/) to load [tiled](https://www.mapeditor.org/) JSON maps.

1 lines 11.8 kB
{"version":3,"file":"tiled-kaboom.cjs","sources":["../tiled-kaboom.js"],"sourcesContent":["/* global atob */\n// big array of characters that are suitable for maps\n// TODO: I got annoyed after 3001\nconst mapsymbols = [...new Array(4052)].reduce((a, v, c) => {\n if ([\n 92,\n 173,\n 847,\n 888,\n 889,\n 907,\n 909,\n 930,\n 1328,\n 1367,\n 1368,\n 1376,\n 1416,\n 1419,\n 1420,\n 1421,\n 1424,\n 1565,\n 1867,\n 1868,\n 2081,\n 2082,\n 2094,\n 2095,\n 2111,\n 2140,\n 2141,\n 2445,\n 2446,\n 2449,\n 2450,\n 2473,\n 2481,\n 2490,\n 2491,\n 2501,\n 2502,\n 2505,\n 2506,\n 2526,\n 2532,\n 2533,\n 2564,\n 2577,\n 2578,\n 2601,\n 2609,\n 2612,\n 2615,\n 2618,\n 2619,\n 2621,\n 2633,\n 2634,\n 2638,\n 2639,\n 2640,\n 2653,\n 2692,\n 2702,\n 2706,\n 2729,\n 2737,\n 2740,\n 2746,\n 2747,\n 2758,\n 2762,\n 2766,\n 2767,\n 2788,\n 2789,\n 2820,\n 2829,\n 2830,\n 2833,\n 2834,\n 2857,\n 2865,\n 2868,\n 2874,\n 2875,\n 2885,\n 2886,\n 2889,\n 2890,\n 2910,\n 2916,\n 2917,\n 2948,\n 2955,\n 2956,\n 2957,\n 2961,\n 2966,\n 2967,\n 2968,\n 2971,\n 2973,\n 2976,\n 2977,\n 2978,\n 2981,\n 2982,\n 2983,\n 2987,\n 2988,\n 2989\n\n ].includes(c)) {\n return a\n }\n\n if (c < 33) {\n return a\n }\n\n const ranges = [\n [126, 161],\n [895, 900],\n [1479, 1488],\n [1514, 1520],\n [1524, 1536],\n [1969, 1984],\n [2042, 2048],\n [2142, 2207],\n [2238, 2260],\n [2384, 2389],\n [2482, 2486],\n [2510, 2519],\n [2519, 2524],\n [2555, 2561],\n [2570, 2575],\n [2626, 2631],\n [2641, 2649],\n [2654, 2662],\n [2677, 2689],\n [2768, 2784],\n [2801, 2809],\n [2809, 2817],\n [2893, 2902],\n [2903, 2908],\n [2935, 2946]\n ]\n\n for (const r of ranges) {\n if (c > r[0] && c < r[1]) {\n return a\n }\n }\n\n return [...a, String.fromCharCode(c)]\n}, [])\n\nfunction verifyTiledMap (mapObj) {\n // TODO: add more validation here\n if (!mapObj) {\n throw new Error('Map parameter is required.')\n }\n\n if (mapObj.orientation !== 'orthogonal') {\n throw new Error(`Map is ${mapObj.orientation}. Only orthogonal is currently supported.`)\n }\n if (mapObj.renderorder !== 'right-down') {\n throw new Error(`Map is ${mapObj.renderorder}. Only right-down is currently supported.`)\n }\n}\n\n// decode data in Tiled base64 format\nfunction base64Decode (data) {\n const len = data.length\n const bytes = new Array(len / 4)\n\n // Interpret data as an array of bytes representing little-endian encoded uint32 values.\n for (let i = 0; i < len; i += 4) {\n bytes[i / 4] = (\n data.charCodeAt(i) |\n data.charCodeAt(i + 1) << 8 |\n data.charCodeAt(i + 2) << 16 |\n data.charCodeAt(i + 3) << 24\n ) >>> 0\n }\n\n return bytes\n}\n\nexport default (k) => {\n // this will be imported if needed for compressed layers\n let pako = window.pako\n\n return {\n verifyTiledMap,\n\n async loadTiledMap (mapObj, location = '') {\n // support string=URL\n if (typeof mapObj === 'string') {\n mapObj = await fetch(mapObj).then(r => r.json())\n }\n\n verifyTiledMap(mapObj)\n\n const map = {\n sprites: [],\n levels: [],\n key: {}\n }\n\n for (const tileset of mapObj.tilesets) {\n if (tileset.margin !== 0) {\n console.error(`${tileset.name} uses margins. That is currently unsupported. Skipping.`)\n continue\n }\n if (tileset.spacing !== 0) {\n console.error(`${tileset.name} uses spacing. That is currently unsupported. Skipping.`)\n continue\n }\n\n const sliceX = tileset.imagewidth / tileset.tilewidth\n const sliceY = tileset.imageheight / tileset.tileheight\n if (tileset.image) {\n map.sprites.push(await k.loadSprite(tileset.name, `${location}${tileset.image}`, { sliceX, sliceY }))\n }\n for (let frame = tileset.firstgid; frame < (tileset.firstgid + tileset.tilecount); frame++) {\n map.key[mapsymbols[frame]] = () => [k.sprite(tileset.name, { frame: frame - 1 })]\n }\n }\n\n for (const layer of mapObj.layers) {\n if (layer.type === 'tilelayer' && layer.visible) {\n const { width, height } = layer\n\n if (layer.encoding === 'base64') {\n if (!layer.compression || layer.compression === '') {\n layer.data = base64Decode(atob(layer.data))\n } else {\n if (typeof pako === 'undefined') {\n pako = await import('pako')\n }\n const d = Uint8Array.from(atob(layer.data).split('').map(c => c.charCodeAt(0)))\n layer.data = base64Decode(String.fromCharCode(...pako.inflate(d)))\n }\n }\n\n const mapArray = [...new Array(height)].map(() => (new Array(width + 1).fill(' ')))\n for (let x = 0; x < width; x++) {\n for (let y = 0; y < height; y++) {\n const cell = (y * width) + x\n if (layer.data[cell] !== 0) {\n mapArray[y][x] = mapsymbols[layer.data[cell]]\n }\n }\n }\n map.levels.push(mapArray.map(l => l.join('')))\n }\n }\n\n map.mapObj = mapObj\n\n return map\n }\n }\n}\n"],"names":["Symbol","iterator","_settle","pact","state","value","s","_Pact","o","bind","v","then","observer","prototype","onFulfilled","onRejected","result","this","callback","e","_this","_isSettledPact","thenable","mapsymbols","Array","reduce","a","c","includes","r","String","fromCharCode","target","body","check","step","reject","_cycle","next","done","_fixup","TypeError","values","i","length","push","array","verifyTiledMap","mapObj","Error","orientation","renderorder","base64Decode","data","len","bytes","charCodeAt","k","pako","window","loadTiledMap","location","map","layers","layer","type","visible","mapArray","height","width","fill","x","y","cell","levels","l","join","encoding","compression","d","Uint8Array","from","atob","split","inflate","Promise","sprites","key","tilesets","tileset","frame","sprite","name","firstgid","tilecount","margin","spacing","sliceX","imagewidth","tilewidth","sliceY","imageheight","tileheight","image","_map$sprites2","loadSprite","_push2","console","error","fetch","json"],"mappings":"oRAoK+D,oBAAXA,OAA0BA,OAAOC,WAAaD,OAAOC,SAAWD,OAAO,oBAAuB,aA7H3I,SAASE,EAAQC,EAAMC,EAAOC,GACpC,IAAKF,EAAKG,EAAG,CACZ,GAAID,aAAiBE,EAAO,CAC3B,IAAIF,EAAMC,EAOT,YADAD,EAAMG,EAAIN,EAAQO,KAAK,KAAMN,EAAMC,IALvB,EAARA,IACHA,EAAQC,EAAMC,GAEfD,EAAQA,EAAMK,EAMhB,GAAIL,GAASA,EAAMM,KAElB,YADAN,EAAMM,KAAKT,EAAQO,KAAK,KAAMN,EAAMC,GAAQF,EAAQO,KAAK,KAAMN,EAAM,IAGtEA,EAAKG,EAAIF,EACTD,EAAKO,EAAIL,EACT,IAAMO,EAAWT,EAAKK,EAClBI,GACHA,EAAST,UA3DuB,WAClC,cAiCA,OAhCAI,EAAMM,UAAUF,KAAO,SAASG,EAAaC,GAC5C,IAAMC,EAAS,MACTZ,EAAQa,KAAKX,EACnB,GAAIF,EAAO,CACV,IAAMc,EAAmB,EAARd,EAAYU,EAAcC,EAC3C,GAAIG,EAAU,CACb,IACChB,EAAQc,EAAQ,EAAGE,EAASD,KAAKP,IAChC,MAAOS,GACRjB,EAAQc,EAAQ,EAAGG,GAEpB,OAAOH,EAEP,YAiBF,OAdAC,KAAKT,EAAI,SAASY,GACjB,IACC,IAAMf,EAAQe,EAAMV,EACN,EAAVU,EAAMd,EACTJ,EAAQc,EAAQ,EAAGF,EAAcA,EAAYT,GAASA,GAC5CU,EACVb,EAAQc,EAAQ,EAAGD,EAAWV,IAE9BH,EAAQc,EAAQ,EAAGX,GAEnB,MAAOc,GACRjB,EAAQc,EAAQ,EAAGG,KAGdH,KAhC0B,GAgE5B,SAASK,EAAeC,GAC9B,OAAOA,aAAoBf,GAAsB,EAAbe,EAAShB,MA/DxCiB,EAAa,UAAI,IAAIC,MAAM,OAAOC,OAAO,SAACC,EAAGhB,EAAGiB,GACpD,GAAI,CACF,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,MAEAC,SAASD,GACT,OAAOD,EAGT,GAAIC,EAAI,GACN,OAAOD,EA+BT,IA5BA,UAAe,CACb,CAAC,IAAK,KACN,CAAC,IAAK,KACN,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,MACP,CAAC,KAAM,sBAGe,CAAnB,IAAMG,OACT,GAAIF,EAAIE,EAAE,IAAMF,EAAIE,EAAE,GACpB,OAAOH,EAIX,gBAAWA,GAAGI,OAAOC,aAAaJ,MACjC,IAWI,WAAgBK,EAAQC,EAAMC,GACpC,GAAuC,mBAA5BF,KAAwC,KACRG,EAAMhC,EAAMiC,EAAlDnC,EAAW+B,OAwBf,GAvBA,SAASK,EAAOrB,GACf,IACC,QAASmB,EAAOlC,EAASqC,QAAQC,MAAUL,GAAUA,MAEpD,IADAlB,EAASiB,EAAKE,EAAK9B,SACLW,EAAOL,KAAM,CAC1B,IAAIU,EAAeL,GAIlB,YADAA,EAAOL,KAAK0B,EAAQD,IAAWA,EAASlC,EAAQO,KAAK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"}