77 lines
2.9 KiB
JavaScript
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);
|
|
}
|