{"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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"}