Files
2026-09-24 17:57:54 +02:00

77 lines
2.9 KiB
JavaScript

/**
* 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);
}