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 '); } // 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 '); } const tilesetpxw = parseInt(process.argv[4], 10); if (isNaN(tilesetpxw)) { throw new Error('Tileset pixel width must be a number. Usage: node convertMap.js '); } const tilesetpxh = parseInt(process.argv[5], 10); if (isNaN(tilesetpxh)) { throw new Error('Tileset pixel height must be a number. Usage: node convertMap.js '); } // 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.');