Bleibende Sektor Elemente für UI fix
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
// === File: sector-frontend/scripts/generate-spritesheets.js ===
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import texturePacker from 'free-tex-packer-core';
|
||||
|
||||
// ES-Modul Workaround für __dirname
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
// ----------------------------------------------------------------------
|
||||
// Pfad-Konfiguration
|
||||
// ----------------------------------------------------------------------
|
||||
// Der Hauptordner, in dem wir Unterordner für die verschiedenen Kategorien anlegen.
|
||||
const RAW_ASSETS_DIR = path.resolve(__dirname, '../src/raw-assets');
|
||||
// Zielordner für die fertigen Atlanten, die dann in der App geladen werden.
|
||||
const OUTPUT_DIR = path.resolve(__dirname, '../src/assets');
|
||||
|
||||
/**
|
||||
* Durchsucht den RAW_ASSETS_DIR nach Unterordnern und generiert
|
||||
* für jeden gefundenen Ordner ein separates Sprite-Sheet.
|
||||
*/
|
||||
async function buildAllSpriteSheets() {
|
||||
console.log(`[Packer] Prüfe Hauptverzeichnis: ${RAW_ASSETS_DIR}`);
|
||||
|
||||
// Hauptordner erstellen, falls er nicht existiert
|
||||
if (!fs.existsSync(RAW_ASSETS_DIR)) {
|
||||
fs.mkdirSync(RAW_ASSETS_DIR, { recursive: true });
|
||||
console.log('[Packer] Quellordner existierte nicht und wurde erstellt. Bitte Unterordner (z.B. "icons") anlegen und Bilder einfügen.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Lese alle Einträge im Hauptordner aus
|
||||
const entries = fs.readdirSync(RAW_ASSETS_DIR, { withFileTypes: true });
|
||||
|
||||
// Filtere nur die Verzeichnisse (Unterordner) heraus
|
||||
const directories = entries.filter(entry => entry.isDirectory()).map(dir => dir.name);
|
||||
|
||||
if (directories.length === 0) {
|
||||
console.log('[Packer] Keine Unterordner in raw-assets gefunden. Bitte lege Ordner wie "icons" oder "frames" an.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Zielordner erstellen, falls nicht vorhanden
|
||||
if (!fs.existsSync(OUTPUT_DIR)) {
|
||||
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
|
||||
}
|
||||
|
||||
// Schleife durch alle gefundenen Unterordner
|
||||
for (const folderName of directories) {
|
||||
const currentDirPath = path.join(RAW_ASSETS_DIR, folderName);
|
||||
const files = fs.readdirSync(currentDirPath);
|
||||
|
||||
const images = [];
|
||||
|
||||
// Suche nach PNG-Dateien im aktuellen Unterordner
|
||||
for (const file of files) {
|
||||
if (file.endsWith('.png')) {
|
||||
const filePath = path.join(currentDirPath, file);
|
||||
images.push({
|
||||
path: file,
|
||||
contents: fs.readFileSync(filePath)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (images.length === 0) {
|
||||
console.log(`[Packer] Überspringe Ordner '${folderName}' (keine PNG-Dateien gefunden).`);
|
||||
continue; // Zum nächsten Ordner springen
|
||||
}
|
||||
|
||||
// Konfiguration für DIESEN spezifischen Atlas
|
||||
const options = {
|
||||
textureName: folderName, // Der Name des Ordners wird zum Namen der generierten Dateien
|
||||
width: 4096,
|
||||
height: 4096,
|
||||
padding: 2,
|
||||
allowRotation: false,
|
||||
exporter: 'Pixi',
|
||||
removeFileExtension: true
|
||||
};
|
||||
|
||||
console.log(`[Packer] Verpacke ${images.length} Bilder aus dem Ordner '${folderName}'...`);
|
||||
|
||||
// Packer-Aufruf in ein Promise wickeln, um asynchrones Verarbeiten sauber abzuarbeiten
|
||||
await new Promise((resolve, reject) => {
|
||||
texturePacker(images, options, (packedFiles, error) => {
|
||||
if (error) {
|
||||
console.error(`[Packer] Fehler beim Erstellen des Atlases für '${folderName}':`, error);
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
|
||||
// Generierte Dateien speichern (.png und .json)
|
||||
for (const item of packedFiles) {
|
||||
const outPath = path.join(OUTPUT_DIR, item.name);
|
||||
fs.writeFileSync(outPath, item.buffer);
|
||||
console.log(`[Packer] Gespeichert: ${outPath}`);
|
||||
}
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
console.log('[Packer] Alle Sprite-Sheets wurden erfolgreich generiert!');
|
||||
}
|
||||
|
||||
// Skript ausführen
|
||||
buildAllSpriteSheets();
|
||||
Reference in New Issue
Block a user