Spaces:
Sleeping
Sleeping
import * as CONFIG from './seconfig.js' | |
import * as UTIL from './eutils.js' | |
import { g_ctx } from './secontext.js' // global context | |
function generate_preamble() { | |
const preamble = '' + | |
'{"frames": {\n' + | |
'\n'; | |
return preamble; | |
} | |
// Function to download data to a file | |
function download(data, filename, type) { | |
var file = new Blob([data], {type: type}); | |
if (window.navigator.msSaveOrOpenBlob) // IE10+ | |
window.navigator.msSaveOrOpenBlob(file, filename); | |
else { // Others | |
var a = document.createElement("a"), | |
url = URL.createObjectURL(file); | |
a.href = url; | |
a.download = filename; | |
document.body.appendChild(a); | |
a.click(); | |
setTimeout(function() { | |
document.body.removeChild(a); | |
window.URL.revokeObjectURL(url); | |
}, 0); | |
} | |
} | |
export function generate_sprite_file() { | |
let layer0 = g_ctx.g_layers[0]; | |
console.log("generate_sprite_file"); | |
let text = generate_preamble(); | |
let animations = Array.from(Array(CONFIG.leveltileheight), () => new Array().fill(null)); | |
for (let row = 0; row < CONFIG.leveltileheight; row++) { | |
if (!layer0.tilearray[row][0]) { | |
// FIXME | |
// Assume row is empty if first tile is. | |
continue; | |
} | |
for (let x = 0; x < layer0.tilearray[row].length; x++) { | |
//"pixels_large1.png": | |
// { | |
// "frame": {"x":0,"y":192,"w":32,"h":64}, | |
// "rotated": false, | |
// "trimmed": true, | |
// "spriteSourceSize": {"x":0,"y":0,"w":32,"h":64}, | |
// "sourceSize": {"w":32,"h":64} | |
// }, | |
let framename = '"tile' + row + "_" + x + '"'; | |
animations[row].push(framename); | |
let frame = layer0.tilearray[row][x]; | |
text += framename + ": { \n"; | |
text += '\t"frame": {'; | |
text += '"x": '+ frame.tspx[0]+ ', "y": '+ frame.tspx[1]+ ', "w": '+ g_ctx.tiledimx+ ', "h": '+ g_ctx.tiledimy+ ' },\n'; | |
text += '\t"rotated": false,\n'; | |
text += '\t"trimmed": true,\n'; | |
text += '\t"spriteSourceSize": {'; | |
text += '"x":0, "y":0, "w": '+ g_ctx.tiledimx+ ', "h": '+ g_ctx.tiledimy+ ' },\n'; | |
text += '\t"sourceSize": {'; | |
text += '"w": '+ g_ctx.tiledimx+ ', "h": '+ g_ctx.tiledimy+ ' }\n'; | |
text += '\t}'; | |
text += (x === layer0.tilearray[row].length - 1)? '\n':',\n' | |
} | |
} | |
text += '},\n'; | |
text += '"animations": {\n'; | |
for (let row = 0; row < CONFIG.leveltileheight; row++) { | |
if(animations[row].length == 0) { | |
continue; | |
} | |
text += '"row'+row+'" : ['; | |
for (let x = 0; x < animations[row].length; x++){ | |
text += ''+animations[row][x]; | |
if (x < animations[row].length - 1){ | |
text += ','; | |
} | |
} | |
text += "],\n" | |
} | |
// remove the trailing comma | |
text = text.slice(0,-2); | |
text += '\n'; | |
text += '},\n'; | |
text += '"meta": {\n'; | |
text += '\t"image": "'+ g_ctx.tilesetpath+'",\n' | |
text += '\t"format": "RGBA8888",\n'; | |
text += '\t"scale": "1"\n'; | |
text += '}\n'; | |
text += '}\n'; | |
//console.log(text); | |
let filename = g_ctx.tilesetpath.split('/').slice(-1)[0]; | |
filename = filename.split('.')[0]; | |
console.log("spritefile: saving to file ",filename); | |
UTIL.download(text, filename+".json", "text/plain"); | |
} |