/** * Liste aller Grafikdateien und ihr Laden mit Rückfallebene. * * Jede Datei ist optional: Schlägt das Laden fehl (Datei fehlt, Netzwerkfehler), * erzeugt `Placeholders.js` unter demselben Schlüssel eine Ersatzgrafik. Quellen und * Lizenzen aller Dateien stehen in docs/ASSETS.md. * @module systems/Assets */ /** Eigene Vektorgrafiken (SVG, CC0). Größe = Rastergröße im Spiel in Pixeln. */ export const SPRITES = Object.freeze([ { key: 'player', file: 'sprites/president.svg', size: 64 }, { key: 'enemy-krabbler', file: 'sprites/krabbler.svg', size: 36 }, { key: 'enemy-sprungkralle', file: 'sprites/sprungkralle.svg', size: 48 }, { key: 'enemy-brutmutter', file: 'sprites/brutmutter.svg', size: 84 }, { key: 'enemy-nieter', file: 'sprites/nieter.svg', size: 36 }, { key: 'enemy-blechsoldat', file: 'sprites/blechsoldat.svg', size: 48 }, { key: 'enemy-walzmeister', file: 'sprites/walzmeister.svg', size: 88 }, { key: 'turret', file: 'sprites/turret.svg', size: 52 }, { key: 'supply-pod', file: 'sprites/supply-pod.svg', size: 48 }, { key: 'emblem', file: 'sprites/emblem.svg', size: 200 }, ]); /** Kenney Particle Pack (CC0), auf 128 px verkleinert. */ export const PARTICLES = Object.freeze([ { key: 'fx-smoke', file: 'kenney/particles/smoke.png' }, { key: 'fx-fire', file: 'kenney/particles/fire.png' }, { key: 'fx-spark', file: 'kenney/particles/spark.png' }, { key: 'fx-scorch', file: 'kenney/particles/scorch.png' }, { key: 'fx-muzzle', file: 'kenney/particles/muzzle.png' }, { key: 'fx-glow', file: 'kenney/particles/glow.png' }, ]); /** * Kenney Top-down Shooter (CC0): Ausschnitt aus dem Tilesheet als Streifen mit * 64-px-Kacheln. Die Reihenfolge der Kacheln steht in GROUND_FRAMES. */ export const GROUND_SHEET = Object.freeze({ key: 'ground-tiles', file: 'kenney/tiles/ground_strip.png', frame: 64 }); /** Kachelindizes im Bodenstreifen. */ export const GROUND_FRAMES = Object.freeze({ dirtA: 0, dirtB: 1, rocks: Object.freeze([2, 3, 4]), bushes: Object.freeze([5, 6]), splat: 7, }); /** * Stellt alle Dateien in die Lade-Warteschlange. * @param {Phaser.Scene} scene * @param {string} staticBase URL des static-Ordners (mit abschließendem /). */ export function queueAssets(scene, staticBase) { scene.load.setPath(`${staticBase}assets/`); for (const sprite of SPRITES) { scene.load.svg(sprite.key, sprite.file, { width: sprite.size, height: sprite.size }); } for (const particle of PARTICLES) { scene.load.image(particle.key, particle.file); } scene.load.spritesheet(GROUND_SHEET.key, GROUND_SHEET.file, { frameWidth: GROUND_SHEET.frame, frameHeight: GROUND_SHEET.frame, }); scene.load.setPath(''); } /** * @param {Phaser.Scene} scene * @param {string} key * @returns {boolean} true, wenn die echte Grafik (nicht der Platzhalter) geladen ist. */ export function hasTexture(scene, key) { return scene.textures.exists(key); }