diff --git a/src/assets.ts b/src/assets.ts index 4c0db61..1c952cf 100644 --- a/src/assets.ts +++ b/src/assets.ts @@ -29,6 +29,7 @@ import arbol2 from "./assets/Árbol 2.png"; import ciudadanx1 from "./assets/Firma 1.png"; import ciudadanx2 from "./assets/Firma 2.png"; import ciudadanx3 from "./assets/Firma 3.png"; +import fondo from "./assets/fondo.ogg"; function loadImage(url: string): Promise { return new Promise((resolve, reject) => { @@ -38,8 +39,17 @@ function loadImage(url: string): Promise { img.src = url; }); } +function loadAudio(url: string): Promise { + return new Promise((resolve, reject) => { + let audio = new Audio(); + audio.oncanplaythrough = () => resolve(audio); + audio.onerror = (e) => reject(e); + audio.src = url; + audio.load(); + }); +} -export const assetUrls = { +export const imageAssetUrls = { botonComenzar, botonSiguiente, botonCompartirPerdiste, @@ -72,15 +82,27 @@ export const assetUrls = { ciudadanx2, ciudadanx3, }; -export type Assets = { [key in keyof typeof assetUrls]: HTMLImageElement }; +export const audioAssetUrls = { + fondo, +}; -const assets = Object.fromEntries( - Object.entries(assetUrls).map(([name, url]) => [name, loadImage(url)]) +export type Assets = { + [key in keyof typeof imageAssetUrls]: HTMLImageElement; +} & + { [key in keyof typeof audioAssetUrls]: HTMLAudioElement }; + +const imageAssets = Object.fromEntries( + Object.entries(imageAssetUrls).map(([name, url]) => [name, loadImage(url)]) +); +const audioAssets = Object.fromEntries( + Object.entries(audioAssetUrls).map(([name, url]) => [name, loadAudio(url)]) ); export async function loadAssets() { - const imgs = await Promise.all(Object.values(assets)); - return Object.fromEntries( - imgs.map((img, i) => [Object.keys(assetUrls)[i], img]) - ) as Assets; + const imgs = await Promise.all(Object.values(imageAssets)); + const audios = await Promise.all(Object.values(audioAssets)); + return Object.fromEntries([ + ...imgs.map((img, i) => [Object.keys(imageAssetUrls)[i], img]), + ...audios.map((audio, i) => [Object.keys(audioAssetUrls)[i], audio]), + ]) as Assets; } diff --git a/src/assets/fondo.ogg b/src/assets/fondo.ogg new file mode 100644 index 0000000..269d960 Binary files /dev/null and b/src/assets/fondo.ogg differ diff --git a/src/jugando.ts b/src/jugando.ts index 22f97b3..f11d1a2 100644 --- a/src/jugando.ts +++ b/src/jugando.ts @@ -131,6 +131,8 @@ export function update(juego: Juego, dt: number) { return; } + juego.assets.fondo.play(); + juego.state.time -= dt; if (juego.state.time < 0) { juego.state.has = "lost";