Refactor audio system
This commit is contained in:
@@ -35,6 +35,7 @@ find_package(spdlog CONFIG REQUIRED)
|
|||||||
|
|
||||||
add_executable(HansTheGatherer
|
add_executable(HansTheGatherer
|
||||||
src/main.cpp
|
src/main.cpp
|
||||||
|
src/audio.cpp
|
||||||
src/assets.cpp
|
src/assets.cpp
|
||||||
src/physics.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 <SDL3/SDL.h>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
#include <flecs.h>
|
||||||
|
|
||||||
struct AudioAsset
|
struct AudioAsset
|
||||||
{
|
{
|
||||||
@@ -9,3 +10,14 @@ struct AudioAsset
|
|||||||
uint8_t* buffer;
|
uint8_t* buffer;
|
||||||
uint32_t buffer_length;
|
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});
|
SdlHandles{.window = window, .renderer = renderer, .text_engine = text_engine});
|
||||||
|
|
||||||
world.import <AssetModule>();
|
world.import <AssetModule>();
|
||||||
|
world.import <AudioModule>();
|
||||||
world.import <PhysicsModule>();
|
world.import <PhysicsModule>();
|
||||||
world.import <LevelModule>();
|
world.import <LevelModule>();
|
||||||
|
|
||||||
@@ -116,17 +117,6 @@ int main()
|
|||||||
TTF_DestroyText(text);
|
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;
|
bool exit_gameloop = false;
|
||||||
while (!exit_gameloop)
|
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
|
// Render
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
world.progress();
|
world.progress();
|
||||||
|
|||||||
Reference in New Issue
Block a user