All checks were successful
Dynamic Branch Deploy / build-and-deploy (push) Successful in 1m20s
75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
const SOUNDS = {
|
|
jump: new Audio('assets/sfx/jump.mp3'),
|
|
duck: new Audio('assets/sfx/duck.mp3'),
|
|
coin: new Audio('assets/sfx/coin.mp3'),
|
|
hit: new Audio('assets/sfx/hit.mp3'),
|
|
powerup: new Audio('assets/sfx/powerup.mp3'),
|
|
music: new Audio('assets/sfx/music_loop.mp3')
|
|
};
|
|
|
|
// Config
|
|
SOUNDS.jump.volume = 0.4;
|
|
SOUNDS.coin.volume = 0.3;
|
|
SOUNDS.hit.volume = 0.6;
|
|
SOUNDS.music.loop = true;
|
|
SOUNDS.music.volume = 0.2;
|
|
|
|
// Standard: Pitch beibehalten (WICHTIG für euch!)
|
|
if (SOUNDS.music.preservesPitch !== undefined) {
|
|
SOUNDS.music.preservesPitch = true;
|
|
} else if (SOUNDS.music.mozPreservesPitch !== undefined) {
|
|
SOUNDS.music.mozPreservesPitch = true; // Firefox Fallback
|
|
} else if (SOUNDS.music.webkitPreservesPitch !== undefined) {
|
|
SOUNDS.music.webkitPreservesPitch = true; // Safari Fallback
|
|
}
|
|
|
|
// Mute Status laden
|
|
let isMuted = localStorage.getItem('escape_muted') === 'true';
|
|
|
|
function playSound(name) {
|
|
if (isMuted || !SOUNDS[name]) return;
|
|
const soundClone = SOUNDS[name].cloneNode();
|
|
soundClone.volume = SOUNDS[name].volume;
|
|
soundClone.play().catch(() => {});
|
|
}
|
|
|
|
function toggleMute() {
|
|
isMuted = !isMuted;
|
|
localStorage.setItem('escape_muted', isMuted);
|
|
|
|
if(isMuted) SOUNDS.music.pause();
|
|
else SOUNDS.music.play().catch(()=>{});
|
|
|
|
return isMuted;
|
|
}
|
|
|
|
function startMusic() {
|
|
if(!isMuted) SOUNDS.music.play().catch(e => console.log("Audio Autoplay blocked"));
|
|
}
|
|
|
|
function getMuteState() {
|
|
return isMuted;
|
|
}
|
|
|
|
// --- GESCHWINDIGKEIT ANPASSEN ---
|
|
function setMusicSpeed(gameSpeed) {
|
|
if (isMuted || !SOUNDS.music) return;
|
|
|
|
const baseGameSpeed = 15.0; // Muss zu BASE_SPEED in config.js passen
|
|
|
|
// Faktor berechnen: Speed 30 = Musik 1.3x
|
|
let rate = 1.0 + (gameSpeed - baseGameSpeed) * 0.02;
|
|
|
|
// Limits
|
|
if (rate < 1.0) rate = 1.0;
|
|
if (rate > 2.0) rate = 2.0;
|
|
|
|
// Nur bei spürbarer Änderung anwenden
|
|
if (Math.abs(SOUNDS.music.playbackRate - rate) > 0.05) {
|
|
SOUNDS.music.playbackRate = rate;
|
|
}
|
|
}
|
|
|
|
function resetMusicSpeed() {
|
|
if (SOUNDS.music) SOUNDS.music.playbackRate = 1.0;
|
|
} |