diff --git a/assets/sounds/blip.wav b/assets/sounds/blip.wav deleted file mode 100644 index b7827ed..0000000 Binary files a/assets/sounds/blip.wav and /dev/null differ diff --git a/assets/sounds/hit.wav b/assets/sounds/hit.wav new file mode 100644 index 0000000..9506682 Binary files /dev/null and b/assets/sounds/hit.wav differ diff --git a/assets/sounds/pickup.wav b/assets/sounds/pickup.wav new file mode 100644 index 0000000..42e75af Binary files /dev/null and b/assets/sounds/pickup.wav differ diff --git a/src/assets.cpp b/src/assets.cpp index d55f6a6..8acc93e 100644 --- a/src/assets.cpp +++ b/src/assets.cpp @@ -25,6 +25,14 @@ static constexpr uint8_t BACKGROUND_MUSIC_DATA[] = { #embed "../assets/sounds/JamaicanSunrise.wav" }; +static constexpr uint8_t PICKUP_SOUND_DATA[] = { +#embed "../assets/sounds/pickup.wav" +}; + +static constexpr uint8_t HIT_SOUND_DATA[] = { +#embed "../assets/sounds/hit.wav" +}; + static constexpr uint8_t DEFAULT_FONT_DATA[] = { #embed "../assets/fonts/OpenTTD-Sans.ttf" }; @@ -96,7 +104,11 @@ AssetModule::AssetModule(flecs::world& world) .basket = Texture{.sdl_texture = basket, .texture_atlas_layout = basket_layout}}); auto background_music = load_audio(BACKGROUND_MUSIC_DATA, sizeof(BACKGROUND_MUSIC_DATA)); - world.set(AudioAssets{.background_music = background_music}); + auto pickup_sound = load_audio(PICKUP_SOUND_DATA, sizeof(PICKUP_SOUND_DATA)); + auto hit_sound = load_audio(HIT_SOUND_DATA, sizeof(HIT_SOUND_DATA)); + world.set(AudioAssets{.background_music = background_music, + .pickup_sound = pickup_sound, + .hit_sound = hit_sound}); auto font = load_font(DEFAULT_FONT_DATA, sizeof(DEFAULT_FONT_DATA)); world.set(FontAssets{.default_font = font}); diff --git a/src/assets.hpp b/src/assets.hpp index 99a081c..de61b00 100644 --- a/src/assets.hpp +++ b/src/assets.hpp @@ -31,6 +31,8 @@ struct TextureAssets struct AudioAssets { AudioAsset background_music; + AudioAsset pickup_sound; + AudioAsset hit_sound; }; struct FontAsset diff --git a/src/audio.cpp b/src/audio.cpp index 2e1a0c0..cf6b22e 100644 --- a/src/audio.cpp +++ b/src/audio.cpp @@ -7,9 +7,10 @@ AudioModule::AudioModule(flecs::world& world) auto* music_stream = SDL_OpenAudioDeviceStream( SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &audio_assets->background_music.spec, NULL, NULL); auto* sound_stream = SDL_OpenAudioDeviceStream( - SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &audio_assets->background_music.spec, NULL, NULL); + SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &audio_assets->pickup_sound.spec, NULL, NULL); SDL_ResumeAudioStreamDevice(music_stream); + SDL_ResumeAudioStreamDevice(sound_stream); world.set( AudioStreams{.music_stream = music_stream, .sound_stream = sound_stream}); diff --git a/src/level.hpp b/src/level.hpp index 0f3daf5..9926117 100644 --- a/src/level.hpp +++ b/src/level.hpp @@ -122,26 +122,54 @@ struct LevelModule // e.destruct(); // }); - world.system("CollectFruit") + world.system("CollectFruit") .term_at(0) .singleton() + .term_at(1) + .singleton() + .term_at(2) + .singleton() .each( - [](flecs::entity e, Game& game, Position& pos, Fruit, Collided) + [](flecs::entity e, + Game& game, + AudioStreams& audio_streams, + AudioAssets& audio_assets, + Position& pos, + Fruit, + Collided) { game.score += 10; pos.x += 1000; // e.destruct(); + + SDL_PutAudioStreamData(audio_streams.sound_stream, + audio_assets.pickup_sound.buffer, + audio_assets.pickup_sound.buffer_length); }); - world.system("CollectSpider") + world.system("CollectSpider") .term_at(0) .singleton() + .term_at(1) + .singleton() + .term_at(2) + .singleton() .each( - [](flecs::entity e, Game& game, Position& pos, Spider, Collided) + [](flecs::entity e, + Game& game, + AudioStreams& audio_streams, + AudioAssets& audio_assets, + Position& pos, + Spider, + Collided) { game.score -= 50; pos.x += 1000; // e.destruct(); + + SDL_PutAudioStreamData(audio_streams.sound_stream, + audio_assets.hit_sound.buffer, + audio_assets.hit_sound.buffer_length); }); world.system("MoveBasket")