Spaces:
Sleeping
Sleeping
| import fs from 'fs'; | |
| import process from 'process'; | |
| // Path to the JSON file containing the map data | |
| const mapDataPath = process.argv[2]; | |
| if (!mapDataPath) { | |
| throw new Error('No map data path provided. Usage: node convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>'); | |
| } | |
| // Retrieve command line arguments for asset path and dimensions | |
| const assetPath = process.argv[3]; | |
| if (!assetPath) { | |
| throw new Error('No asset path provided. Usage: node convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>'); | |
| } | |
| const tilesetpxw = parseInt(process.argv[4], 10); | |
| if (isNaN(tilesetpxw)) { | |
| throw new Error('Tileset pixel width must be a number. Usage: node convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>'); | |
| } | |
| const tilesetpxh = parseInt(process.argv[5], 10); | |
| if (isNaN(tilesetpxh)) { | |
| throw new Error('Tileset pixel height must be a number. Usage: node convertMap.js <mapDataPath> <assetPath> <tilesetpxw> <tilesetpxh>'); | |
| } | |
| // Read the JSON file and parse it | |
| const tiledMapData = JSON.parse(fs.readFileSync(mapDataPath, 'utf8')); | |
| const tileDimension = tiledMapData.tilewidth; | |
| const width = tiledMapData.width; | |
| const height = tiledMapData.height; | |
| // Function to convert Tiled 1D array to 3D array for the game engine | |
| function convertLayerData(layerData, width, height) { | |
| let newArray = []; | |
| for (let i = 0; i < width; i++) { | |
| newArray[i] = []; | |
| for (let j = 0; j < height; j++) { | |
| newArray[i][j] = layerData[j * width + i] - 1; | |
| } | |
| } | |
| return [newArray]; | |
| } | |
| // Process each layer and prepare JS module content | |
| let jsContent = `// Map generated by convertMap.js\n\n`; | |
| jsContent += `export const tilesetpath = "${assetPath}";\n`; | |
| jsContent += `export const tiledim = ${tileDimension};\n`; | |
| jsContent += `export const screenxtiles = ${width};\n`; | |
| jsContent += `export const screenytiles = ${height};\n`; | |
| jsContent += `export const tilesetpxw = ${tilesetpxw};\n`; | |
| jsContent += `export const tilesetpxh = ${tilesetpxh};\n\n`; | |
| tiledMapData.layers.forEach(layer => { | |
| const processedData = convertLayerData(layer.data, layer.width, layer.height); | |
| jsContent += `export const ${layer.name} = ${JSON.stringify(processedData)};\n`; | |
| }); | |
| // TODO: Add animated sprites | |
| jsContent += `export const animatedsprites = [ | |
| ]\n` | |
| // Optionally, add map dimensions based on the first layer | |
| if (tiledMapData.layers.length > 0) { | |
| const firstLayer = tiledMapData.layers[0]; | |
| jsContent += `export const mapwidth = ${firstLayer.width};\n`; | |
| jsContent += `export const mapheight = ${firstLayer.height};\n`; | |
| } | |
| // Write the processed data to the final JS file | |
| fs.writeFileSync('converted-map.js', jsContent); | |
| console.log('Map conversion and JS module creation complete.'); |