Refactor audio system
This commit is contained in:
@@ -35,6 +35,7 @@ find_package(spdlog CONFIG REQUIRED)
|
||||
|
||||
add_executable(HansTheGatherer
|
||||
src/main.cpp
|
||||
src/audio.cpp
|
||||
src/assets.cpp
|
||||
src/physics.cpp
|
||||
)
|
||||
|
||||
33
src/audio.cpp
Normal file
33
src/audio.cpp
Normal file
@@ -0,0 +1,33 @@
|
||||
#include "audio.hpp"
|
||||
#include "assets.hpp"
|
||||
|
||||
AudioModule::AudioModule(flecs::world& world)
|
||||
{
|
||||
auto* audio_assets = world.get<AudioAssets>();
|
||||
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_ResumeAudioStreamDevice(music_stream);
|
||||
|
||||
world.set<AudioStreams>(
|
||||
AudioStreams{.music_stream = music_stream, .sound_stream = sound_stream});
|
||||
|
||||
world.system<AudioStreams, AudioAssets>("FeedAudioStreams")
|
||||
.term_at(0)
|
||||
.singleton()
|
||||
.term_at(1)
|
||||
.singleton()
|
||||
.each(
|
||||
[](AudioStreams& audio_streams, AudioAssets& audio_assets)
|
||||
{
|
||||
if (SDL_GetAudioStreamQueued(audio_streams.music_stream) <
|
||||
static_cast<int>(audio_assets.background_music.buffer_length))
|
||||
{
|
||||
SDL_PutAudioStreamData(audio_streams.music_stream,
|
||||
audio_assets.background_music.buffer,
|
||||
audio_assets.background_music.buffer_length);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <cstdint>
|
||||
#include <flecs.h>
|
||||
|
||||
struct AudioAsset
|
||||
{
|
||||
@@ -9,3 +10,14 @@ struct AudioAsset
|
||||
uint8_t* buffer;
|
||||
uint32_t buffer_length;
|
||||
};
|
||||
|
||||
struct AudioStreams
|
||||
{
|
||||
SDL_AudioStream* music_stream;
|
||||
SDL_AudioStream* sound_stream;
|
||||
};
|
||||
|
||||
struct AudioModule
|
||||
{
|
||||
AudioModule(flecs::world& world);
|
||||
};
|
||||
|
||||
20
src/main.cpp
20
src/main.cpp
@@ -51,6 +51,7 @@ int main()
|
||||
SdlHandles{.window = window, .renderer = renderer, .text_engine = text_engine});
|
||||
|
||||
world.import <AssetModule>();
|
||||
world.import <AudioModule>();
|
||||
world.import <PhysicsModule>();
|
||||
world.import <LevelModule>();
|
||||
|
||||
@@ -116,17 +117,6 @@ int main()
|
||||
TTF_DestroyText(text);
|
||||
});
|
||||
|
||||
auto* audio_assets = world.get<AudioAssets>();
|
||||
auto* stream = SDL_OpenAudioDeviceStream(
|
||||
SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &audio_assets->background_music.spec, NULL, NULL);
|
||||
if (!stream)
|
||||
{
|
||||
SDL_Log("Couldn't create audio stream: %s", SDL_GetError());
|
||||
return SDL_APP_FAILURE;
|
||||
}
|
||||
|
||||
SDL_ResumeAudioStreamDevice(stream);
|
||||
|
||||
bool exit_gameloop = false;
|
||||
while (!exit_gameloop)
|
||||
{
|
||||
@@ -164,14 +154,6 @@ int main()
|
||||
}
|
||||
}
|
||||
|
||||
// Game Logic
|
||||
if (SDL_GetAudioStreamQueued(stream) < (int)audio_assets->background_music.buffer_length)
|
||||
{
|
||||
SDL_PutAudioStreamData(stream,
|
||||
audio_assets->background_music.buffer,
|
||||
audio_assets->background_music.buffer_length);
|
||||
}
|
||||
|
||||
// Render
|
||||
SDL_RenderClear(renderer);
|
||||
world.progress();
|
||||
|
||||
Reference in New Issue
Block a user