- Enforced 'Style 32 - Dark Chibi Vector' for all ground assets. - Fixed critical Prologue-to-Game crash (function renaming). - Implemented Tiled JSON/TMX auto-conversion. - Updated Asset Manager to visualize 1800+ assets. - Cleaned up project structure (new assets/grounds folder). - Auto-Ground logic added to GameScene.js.
86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const ASSETS_DIR = path.join(__dirname, '../assets');
|
|
const OUTPUT_FILE = path.join(__dirname, '../src/AssetManifest.js');
|
|
|
|
const CATEGORY_MAP = {
|
|
'buildings': 'farm',
|
|
'crops': 'farm',
|
|
'grounds': 'farm',
|
|
'props': 'farm',
|
|
'terrain': 'farm',
|
|
'characters': 'common',
|
|
'ui': 'common',
|
|
'vfx': 'common',
|
|
'images': 'common',
|
|
'intro_assets': 'common',
|
|
'sprites': 'common', // Treat as regular images for now unless frame config known
|
|
'slike 🟢': 'common'
|
|
};
|
|
|
|
const manifest = {
|
|
phases: {
|
|
farm: [],
|
|
basement_mine: [],
|
|
common: []
|
|
},
|
|
spritesheets: []
|
|
};
|
|
|
|
function scanDir(dir, category) {
|
|
if (!fs.existsSync(dir)) return;
|
|
|
|
const files = fs.readdirSync(dir);
|
|
|
|
files.forEach(file => {
|
|
const fullPath = path.join(dir, file);
|
|
const stat = fs.statSync(fullPath);
|
|
|
|
if (stat.isDirectory()) {
|
|
// Recursive scan
|
|
// Special handling: if dir is 'sprites', maybe subdirs are categories?
|
|
// For now, simple recursion
|
|
scanDir(fullPath, category);
|
|
} else if (file.match(/\.(png|jpg|jpeg)$/i)) {
|
|
const relativePath = 'assets/' + path.relative(ASSETS_DIR, fullPath);
|
|
const key = path.parse(file).name; // Use filename without ext as key
|
|
|
|
// Avoid duplicates?
|
|
// Just push for now
|
|
|
|
if (category === 'spritesheets') {
|
|
// Try to guess definition or generic
|
|
manifest.spritesheets.push({
|
|
key: key,
|
|
path: relativePath,
|
|
frameConfig: { frameWidth: 32, frameHeight: 32 } // Default guess
|
|
});
|
|
} else {
|
|
if (!manifest.phases[category]) manifest.phases[category] = [];
|
|
manifest.phases[category].push({
|
|
key: key,
|
|
path: relativePath
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
// MAIN SCAN LOOP
|
|
Object.keys(CATEGORY_MAP).forEach(dirName => {
|
|
const fullDir = path.join(ASSETS_DIR, dirName);
|
|
const cat = CATEGORY_MAP[dirName];
|
|
scanDir(fullDir, cat);
|
|
});
|
|
|
|
// Generate File Content
|
|
const fileContent = `window.AssetManifest = ${JSON.stringify(manifest, null, 4)};`;
|
|
|
|
fs.writeFileSync(OUTPUT_FILE, fileContent);
|
|
|
|
console.log('✅ AssetManifest.js regenerated!');
|
|
console.log(`Farm: ${manifest.phases.farm.length}`);
|
|
console.log(`Common: ${manifest.phases.common.length}`);
|
|
console.log(`Mine: ${manifest.phases.basement_mine.length}`);
|