diff --git a/src/assets/audio/SFX/base.mp3 b/src/assets/audio/SFX/base.mp3 new file mode 100644 index 0000000..6f6e371 Binary files /dev/null and b/src/assets/audio/SFX/base.mp3 differ diff --git a/src/assets/audio/SFX/base.wav b/src/assets/audio/SFX/base.wav new file mode 100644 index 0000000..7641c3d Binary files /dev/null and b/src/assets/audio/SFX/base.wav differ diff --git a/src/assets/audio/SFX/bottling-overbrewed.mp3 b/src/assets/audio/SFX/bottling-overbrewed.mp3 new file mode 100644 index 0000000..f871df5 Binary files /dev/null and b/src/assets/audio/SFX/bottling-overbrewed.mp3 differ diff --git a/src/assets/audio/SFX/bottling-overbrewed.wav b/src/assets/audio/SFX/bottling-overbrewed.wav new file mode 100644 index 0000000..fdef96e Binary files /dev/null and b/src/assets/audio/SFX/bottling-overbrewed.wav differ diff --git a/src/assets/audio/SFX/bottling.mp3 b/src/assets/audio/SFX/bottling.mp3 new file mode 100644 index 0000000..a4e03e7 Binary files /dev/null and b/src/assets/audio/SFX/bottling.mp3 differ diff --git a/src/assets/audio/SFX/bottling.wav b/src/assets/audio/SFX/bottling.wav new file mode 100644 index 0000000..e464de1 Binary files /dev/null and b/src/assets/audio/SFX/bottling.wav differ diff --git a/src/assets/audio/SFX/crushing.mp3 b/src/assets/audio/SFX/crushing.mp3 new file mode 100644 index 0000000..ad5ce10 Binary files /dev/null and b/src/assets/audio/SFX/crushing.mp3 differ diff --git a/src/assets/audio/SFX/crushing.wav b/src/assets/audio/SFX/crushing.wav new file mode 100644 index 0000000..e4b64df Binary files /dev/null and b/src/assets/audio/SFX/crushing.wav differ diff --git a/src/assets/audio/SFX/cutting.mp3 b/src/assets/audio/SFX/cutting.mp3 new file mode 100644 index 0000000..6921fd3 Binary files /dev/null and b/src/assets/audio/SFX/cutting.mp3 differ diff --git a/src/assets/audio/SFX/cutting.wav b/src/assets/audio/SFX/cutting.wav new file mode 100644 index 0000000..0682388 Binary files /dev/null and b/src/assets/audio/SFX/cutting.wav differ diff --git a/src/assets/audio/SFX/glass.mp3 b/src/assets/audio/SFX/glass.mp3 new file mode 100644 index 0000000..4d486b3 Binary files /dev/null and b/src/assets/audio/SFX/glass.mp3 differ diff --git a/src/assets/audio/SFX/glass.wav b/src/assets/audio/SFX/glass.wav new file mode 100644 index 0000000..e98fb36 Binary files /dev/null and b/src/assets/audio/SFX/glass.wav differ diff --git a/src/assets/audio/SFX/ingredient.mp3 b/src/assets/audio/SFX/ingredient.mp3 new file mode 100644 index 0000000..094ce75 Binary files /dev/null and b/src/assets/audio/SFX/ingredient.mp3 differ diff --git a/src/assets/audio/SFX/ingredient.wav b/src/assets/audio/SFX/ingredient.wav new file mode 100644 index 0000000..0e00671 Binary files /dev/null and b/src/assets/audio/SFX/ingredient.wav differ diff --git a/src/assets/audio/SFX/new-order.mp3 b/src/assets/audio/SFX/new-order.mp3 new file mode 100644 index 0000000..1a009a2 Binary files /dev/null and b/src/assets/audio/SFX/new-order.mp3 differ diff --git a/src/assets/audio/SFX/new-order.wav b/src/assets/audio/SFX/new-order.wav new file mode 100644 index 0000000..7b4e296 Binary files /dev/null and b/src/assets/audio/SFX/new-order.wav differ diff --git a/src/assets/audio/SFX/place.mp3 b/src/assets/audio/SFX/place.mp3 new file mode 100644 index 0000000..674f563 Binary files /dev/null and b/src/assets/audio/SFX/place.mp3 differ diff --git a/src/assets/audio/SFX/place.wav b/src/assets/audio/SFX/place.wav new file mode 100644 index 0000000..12db677 Binary files /dev/null and b/src/assets/audio/SFX/place.wav differ diff --git a/src/assets/audio/SFX/trash.mp3 b/src/assets/audio/SFX/trash.mp3 new file mode 100644 index 0000000..c269435 Binary files /dev/null and b/src/assets/audio/SFX/trash.mp3 differ diff --git a/src/assets/audio/SFX/trash.wav b/src/assets/audio/SFX/trash.wav new file mode 100644 index 0000000..2b7716c Binary files /dev/null and b/src/assets/audio/SFX/trash.wav differ diff --git a/src/assets/audio/extra/bottling overbrewed.mp3 b/src/assets/audio/extra/bottling overbrewed.mp3 new file mode 100644 index 0000000..c650490 Binary files /dev/null and b/src/assets/audio/extra/bottling overbrewed.mp3 differ diff --git a/src/assets/audio/extra/brewing no loop.mp3 b/src/assets/audio/extra/brewing no loop.mp3 new file mode 100644 index 0000000..5822d1b Binary files /dev/null and b/src/assets/audio/extra/brewing no loop.mp3 differ diff --git a/src/assets/audio/extra/cutting 1.mp3 b/src/assets/audio/extra/cutting 1.mp3 new file mode 100644 index 0000000..e8ad0bf Binary files /dev/null and b/src/assets/audio/extra/cutting 1.mp3 differ diff --git a/src/assets/audio/extra/cutting 2.mp3 b/src/assets/audio/extra/cutting 2.mp3 new file mode 100644 index 0000000..614104c Binary files /dev/null and b/src/assets/audio/extra/cutting 2.mp3 differ diff --git a/src/assets/audio/extra/cutting 3.mp3 b/src/assets/audio/extra/cutting 3.mp3 new file mode 100644 index 0000000..eb97d5a Binary files /dev/null and b/src/assets/audio/extra/cutting 3.mp3 differ diff --git a/src/assets/audio/extra/cutting 4.mp3 b/src/assets/audio/extra/cutting 4.mp3 new file mode 100644 index 0000000..453b77f Binary files /dev/null and b/src/assets/audio/extra/cutting 4.mp3 differ diff --git a/src/assets/audio/extra/glass break.mp3 b/src/assets/audio/extra/glass break.mp3 new file mode 100644 index 0000000..089f3c9 Binary files /dev/null and b/src/assets/audio/extra/glass break.mp3 differ diff --git a/src/assets/audio/extra/glass clink 2.mp3 b/src/assets/audio/extra/glass clink 2.mp3 new file mode 100644 index 0000000..eaa98a9 Binary files /dev/null and b/src/assets/audio/extra/glass clink 2.mp3 differ diff --git a/src/assets/audio/extra/glass clink.mp3 b/src/assets/audio/extra/glass clink.mp3 new file mode 100644 index 0000000..52f2645 Binary files /dev/null and b/src/assets/audio/extra/glass clink.mp3 differ diff --git a/src/assets/audio/extra/grinding slow.mp3 b/src/assets/audio/extra/grinding slow.mp3 new file mode 100644 index 0000000..f4d3bcc Binary files /dev/null and b/src/assets/audio/extra/grinding slow.mp3 differ diff --git a/src/assets/audio/extra/new potion bell 2.mp3 b/src/assets/audio/extra/new potion bell 2.mp3 new file mode 100644 index 0000000..dd193be Binary files /dev/null and b/src/assets/audio/extra/new potion bell 2.mp3 differ diff --git a/src/assets/audio/extra/putting trash 1.mp3 b/src/assets/audio/extra/putting trash 1.mp3 new file mode 100644 index 0000000..44120cb Binary files /dev/null and b/src/assets/audio/extra/putting trash 1.mp3 differ diff --git a/src/assets/audio/extra/putting trash angry.mp3 b/src/assets/audio/extra/putting trash angry.mp3 new file mode 100644 index 0000000..36bd16d Binary files /dev/null and b/src/assets/audio/extra/putting trash angry.mp3 differ diff --git a/src/assets/audio/extra/something.mp3 b/src/assets/audio/extra/something.mp3 new file mode 100644 index 0000000..f3df064 Binary files /dev/null and b/src/assets/audio/extra/something.mp3 differ diff --git a/src/assets/audio/extra/taking base.mp3 b/src/assets/audio/extra/taking base.mp3 new file mode 100644 index 0000000..77d1beb Binary files /dev/null and b/src/assets/audio/extra/taking base.mp3 differ diff --git a/src/assets/audio/extra/taking glass.mp3 b/src/assets/audio/extra/taking glass.mp3 new file mode 100644 index 0000000..0be5631 Binary files /dev/null and b/src/assets/audio/extra/taking glass.mp3 differ diff --git a/src/assets/audio/extra/taking ing 2.mp3 b/src/assets/audio/extra/taking ing 2.mp3 new file mode 100644 index 0000000..d7e7089 Binary files /dev/null and b/src/assets/audio/extra/taking ing 2.mp3 differ diff --git a/src/assets/audio/extra/walking 1.mp3 b/src/assets/audio/extra/walking 1.mp3 new file mode 100644 index 0000000..89da676 Binary files /dev/null and b/src/assets/audio/extra/walking 1.mp3 differ diff --git a/src/assets/audio/extra/walking 2.mp3 b/src/assets/audio/extra/walking 2.mp3 new file mode 100644 index 0000000..b4369cd Binary files /dev/null and b/src/assets/audio/extra/walking 2.mp3 differ diff --git a/src/assets/audio/soundtrack/1_gameplay.mp3 b/src/assets/audio/soundtrack/1_gameplay.mp3 new file mode 100644 index 0000000..e693aa7 Binary files /dev/null and b/src/assets/audio/soundtrack/1_gameplay.mp3 differ diff --git a/src/assets/audio/soundtrack/1_main menu.mp3 b/src/assets/audio/soundtrack/1_main menu.mp3 new file mode 100644 index 0000000..ee0afe1 Binary files /dev/null and b/src/assets/audio/soundtrack/1_main menu.mp3 differ diff --git a/src/assets/audio/soundtrack/2_gameplay.mp3 b/src/assets/audio/soundtrack/2_gameplay.mp3 new file mode 100644 index 0000000..7c2fcce Binary files /dev/null and b/src/assets/audio/soundtrack/2_gameplay.mp3 differ diff --git a/src/assets/audio/soundtrack/2_main menu.mp3 b/src/assets/audio/soundtrack/2_main menu.mp3 new file mode 100644 index 0000000..94b74d2 Binary files /dev/null and b/src/assets/audio/soundtrack/2_main menu.mp3 differ diff --git a/src/assets/audio/soundtrack/3_gameplay.mp3 b/src/assets/audio/soundtrack/3_gameplay.mp3 new file mode 100644 index 0000000..7bc1366 Binary files /dev/null and b/src/assets/audio/soundtrack/3_gameplay.mp3 differ diff --git a/src/assets/audio/soundtrack/3_main-menu.mp3 b/src/assets/audio/soundtrack/3_main-menu.mp3 new file mode 100644 index 0000000..add64fa Binary files /dev/null and b/src/assets/audio/soundtrack/3_main-menu.mp3 differ diff --git a/src/assets/objects/cutting-station.png b/src/assets/objects/cutting-station.png index 16355f7..d8253ba 100644 Binary files a/src/assets/objects/cutting-station.png and b/src/assets/objects/cutting-station.png differ diff --git a/src/audio/audioManager.js b/src/audio/audioManager.js new file mode 100644 index 0000000..f3bbe81 --- /dev/null +++ b/src/audio/audioManager.js @@ -0,0 +1,54 @@ +import sounds from "./sound.js"; +import music from "./music.js"; +import settings from "../data/settings.js"; + +let activeMusic = null; + +export function playSound(name) { + const baseSound = sounds[name]; + + if (!baseSound) return; + + const sound = baseSound.cloneNode(); + + sound.volume = settings.sfxVolume; + + sound.play().catch(() => {}); +} + +export function playMusic(name) { + const newMusic = music[name]; + + if (!newMusic) return; + + // already playing + if (activeMusic === newMusic) return; + + // stop previous + if (activeMusic) { + activeMusic.pause(); + activeMusic.currentTime = 0; + } + + activeMusic = newMusic; + + activeMusic.volume = settings.musicVolume; + activeMusic.loop = true; + + activeMusic.play().catch(() => {}); +} + +export function stopMusic() { + if (!activeMusic) return; + + activeMusic.pause(); + activeMusic.currentTime = 0; + + activeMusic = null; +} + +export function updateMusicVolume() { + if (!activeMusic) return; + + activeMusic.volume = settings.musicVolume; +} diff --git a/src/audio/music.js b/src/audio/music.js new file mode 100644 index 0000000..277f778 --- /dev/null +++ b/src/audio/music.js @@ -0,0 +1,15 @@ +import menuMusicFile from "../assets/audio/soundtrack/3_main-menu.mp3"; +import gameMusicFile from "../assets/audio/soundtrack/3_gameplay.mp3"; + +const menuMusic = new Audio(menuMusicFile); +menuMusic.loop = true; + +const gameMusic = new Audio(gameMusicFile); +gameMusic.loop = true; + +const music = { + menu: menuMusic, + game: gameMusic, +}; + +export default music; diff --git a/src/audio/sound.js b/src/audio/sound.js new file mode 100644 index 0000000..75b5e0d --- /dev/null +++ b/src/audio/sound.js @@ -0,0 +1,25 @@ +import baseFx from "../assets/audio/SFX/base.wav"; +import bottlingFx from "../assets/audio/SFX/bottling.wav"; +import overbrewedFx from "../assets/audio/SFX/bottling-overbrewed.wav"; +import crushingFx from "../assets/audio/SFX/crushing.wav"; +import cuttingFx from "../assets/audio/SFX/cutting.wav"; +import glassFx from "../assets/audio/SFX/glass.wav"; +import ingredientFx from "../assets/audio/SFX/ingredient.wav"; +import newOrderFx from "../assets/audio/SFX/new-order.wav"; +import placeFx from "../assets/audio/SFX/place.wav"; +import trashFx from "../assets/audio/SFX/trash.wav"; + +const sounds = { + base: new Audio(baseFx), + bottling: new Audio(bottlingFx), + overbrewedFx: new Audio(overbrewedFx), + crushing: new Audio(crushingFx), + cutting: new Audio(cuttingFx), + glass: new Audio(glassFx), + ingredient: new Audio(ingredientFx), + newOrder: new Audio(newOrderFx), + place: new Audio(placeFx), + trash: new Audio(trashFx), +}; + +export default sounds; diff --git a/src/core/index.js b/src/core/index.js index 3a82624..6bded44 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -44,6 +44,7 @@ import { import { drawGameOver } from "../rendering/gameOverRenderer.js"; import { drawHUD } from "../rendering/hudRendering.js"; import { drawRecipesMenu } from "../rendering/recipesRenderer.js"; +import { playMusic, updateMusicVolume } from "../audio/audioManager.js"; const { canvas, ctx } = Canvas(); @@ -99,11 +100,15 @@ function handleSettingsClick(mouseX, mouseY) { if (pointInRect(mouseX, mouseY, musicSlider)) { settings.musicVolume = (mouseX - musicSlider.x) / musicSlider.width; settings.musicVolume = Math.max(0, Math.min(1, settings.musicVolume)); + if (settings.musicVolume < 0.02) settings.musicVolume = 0; + + updateMusicVolume(); } const sfxSlider = getSfxSlider(canvas); if (pointInRect(mouseX, mouseY, sfxSlider)) { settings.sfxVolume = (mouseX - sfxSlider.x) / sfxSlider.width; settings.sfxVolume = Math.max(0, Math.min(1, settings.sfxVolume)); + if (settings.sfxVolume < 0.02) settings.sfxVolume = 0; } } @@ -177,12 +182,25 @@ canvas.addEventListener("click", (e) => { }); let previousFrame = performance.now(); +let previousState = null; function loop() { const now = performance.now(); const timeStep = now - previousFrame; // Time in milliseconds since last frame previousFrame = now; const state = getGameState(); + if (state !== previousState) { + previousState = state; + + switch (state) { + case GAME_STATES.MENU: + playMusic("menu"); + break; + case GAME_STATES.PLAYING: + playMusic("game"); + break; + } + } switch (state) { case GAME_STATES.MENU: drawMenu(ctx, canvas, mouseX, mouseY); diff --git a/src/data/settings.js b/src/data/settings.js index 3544ac6..00c89ea 100644 --- a/src/data/settings.js +++ b/src/data/settings.js @@ -1,6 +1,6 @@ const settings = { - musicVolume: 0.7, - sfxVolume: 0.8, + musicVolume: 0.0, + sfxVolume: 0.5, }; export default settings; diff --git a/webpack.common.js b/webpack.common.js index f16f637..575d04d 100644 --- a/webpack.common.js +++ b/webpack.common.js @@ -21,7 +21,7 @@ export default { use: ["style-loader", "css-loader"], }, { - test: /\.(png|svg|jpg|jpeg|gif)$/i, + test: /\.(png|svg|jpg|jpeg|gif|wav|mp3)$/i, type: "asset/resource", generator: { filename: "images/[name][hash][ext]",