mirror of
				https://github.com/tobspr/shapez.io.git
				synced 2025-06-13 13:04:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			97 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // Converts the atlas description to a JSON file
 | |
| 
 | |
| String.prototype.replaceAll = function (search, replacement) {
 | |
|     var target = this;
 | |
|     return target.split(search).join(replacement);
 | |
| };
 | |
| 
 | |
| const fs = require("fs");
 | |
| const path = require("path");
 | |
| 
 | |
| const folder = path.join(__dirname, "res_built", "atlas");
 | |
| const files = fs.readdirSync(folder);
 | |
| 
 | |
| const metadata = [];
 | |
| 
 | |
| files.forEach(filename => {
 | |
|     if (filename.endsWith(".atlas")) {
 | |
|         // Read content
 | |
| 
 | |
|         const content = fs.readFileSync(path.join(folder, filename), "ascii");
 | |
| 
 | |
|         const lines = content.replaceAll("\r", "").replaceAll("\t", "").split("\n");
 | |
| 
 | |
|         const readLine = () => lines.splice(0, 1)[0];
 | |
|         const readValue = () => readLine().replaceAll(" ", "").split(":")[1];
 | |
|         const readVector = () =>
 | |
|             readValue()
 | |
|                 .split(",")
 | |
|                 .map(d => parseInt(d, 10));
 | |
| 
 | |
|         let maxAtlas = 100;
 | |
| 
 | |
|         atlasLoop: while (maxAtlas-- > 0 && lines.length >= 7) {
 | |
|             const result = {
 | |
|                 entries: [],
 | |
|             };
 | |
| 
 | |
|             // Extract header
 | |
|             const header_fileStart = readLine();
 | |
|             const header_fileName = readLine();
 | |
|             const header_size = readVector();
 | |
|             const header_format = readLine();
 | |
|             const header_filter = readLine();
 | |
|             const header_repeat = readLine();
 | |
|             const baseAtlasName = header_fileName.replace(".png", "");
 | |
| 
 | |
|             // Store size
 | |
|             result.size = header_size;
 | |
| 
 | |
|             lineLoop: while (lines.length >= 7) {
 | |
|                 const entryResult = {};
 | |
| 
 | |
|                 const nextLine = lines[0];
 | |
|                 if (nextLine.length === 0) {
 | |
|                     break;
 | |
|                 }
 | |
| 
 | |
|                 const entry_fileName = readLine() + ".png";
 | |
| 
 | |
|                 const entry_rotate = readValue();
 | |
|                 const entry_xy = readVector();
 | |
|                 const entry_size = readVector();
 | |
|                 const entry_orig = readVector();
 | |
|                 const entry_offset = readVector();
 | |
|                 const entry_index = readValue();
 | |
| 
 | |
|                 entryResult.filename = entry_fileName;
 | |
|                 entryResult.xy = entry_xy;
 | |
|                 entryResult.size = entry_size;
 | |
|                 // entryResult.offset = entry_offset;
 | |
| 
 | |
|                 entryResult.origSize = entry_orig;
 | |
| 
 | |
|                 let offset = [0, 0];
 | |
| 
 | |
|                 // GDX Atlas packer uses 1 - y coordinates. This sucks, and we have to convert it
 | |
|                 offset[0] = entry_offset[0];
 | |
|                 offset[1] = entry_orig[1] - entry_offset[1] - entry_size[1];
 | |
| 
 | |
|                 entryResult.offset = offset;
 | |
| 
 | |
|                 result.entries.push(entryResult);
 | |
|             }
 | |
| 
 | |
|             console.log("[Atlas]", "'" + baseAtlasName + "'", "has", result.entries.length, "entries");
 | |
|             // fs.writeFileSync(path.join(folder, baseAtlasName + ".gen.json"), JSON.stringify(result));
 | |
| 
 | |
|             metadata.push({
 | |
|                 filename: baseAtlasName + ".png",
 | |
|                 entries: result,
 | |
|             });
 | |
|         }
 | |
|     }
 | |
| });
 | |
| 
 | |
| fs.writeFileSync(path.join(folder, "meta.gen.json"), JSON.stringify(metadata, null, 4));
 |