sounds variants
This commit is contained in:
parent
0ab39fa06f
commit
1c6689b6b6
@ -34,7 +34,6 @@ void Assets::store(Shader* shader, std::string name){
|
|||||||
shaders.emplace(name, shader);
|
shaders.emplace(name, shader);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
Font* Assets::getFont(std::string name) const {
|
Font* Assets::getFont(std::string name) const {
|
||||||
auto found = fonts.find(name);
|
auto found = fonts.find(name);
|
||||||
if (found == fonts.end())
|
if (found == fonts.end())
|
||||||
|
|||||||
@ -18,6 +18,7 @@ AssetsLoader::AssetsLoader(Assets* assets, const ResPaths* paths)
|
|||||||
addLoader(ASSET_FONT, assetload::font);
|
addLoader(ASSET_FONT, assetload::font);
|
||||||
addLoader(ASSET_ATLAS, assetload::atlas);
|
addLoader(ASSET_ATLAS, assetload::atlas);
|
||||||
addLoader(ASSET_LAYOUT, assetload::layout);
|
addLoader(ASSET_LAYOUT, assetload::layout);
|
||||||
|
addLoader(ASSET_SOUND, assetload::sound);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetsLoader::addLoader(int tag, aloader_func func) {
|
void AssetsLoader::addLoader(int tag, aloader_func func) {
|
||||||
@ -78,6 +79,7 @@ void AssetsLoader::addDefaults(AssetsLoader& loader, const Content* content) {
|
|||||||
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/misc/moon.png", "misc/moon");
|
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/misc/moon.png", "misc/moon");
|
||||||
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/misc/sun.png", "misc/sun");
|
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/misc/sun.png", "misc/sun");
|
||||||
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/gui/crosshair.png", "gui/crosshair");
|
loader.add(ASSET_TEXTURE, TEXTURES_FOLDER"/gui/crosshair.png", "gui/crosshair");
|
||||||
|
loader.add(ASSET_SOUND, SOUNDS_FOLDER"/steps/grass.ogg", "steps/grass");
|
||||||
|
|
||||||
addLayouts(0, "core", loader.getPaths()->getMainRoot()/fs::path("layouts"), loader);
|
addLayouts(0, "core", loader.getPaths()->getMainRoot()/fs::path("layouts"), loader);
|
||||||
for (auto& entry : content->getPacks()) {
|
for (auto& entry : content->getPacks()) {
|
||||||
|
|||||||
@ -160,7 +160,6 @@ bool assetload::layout(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool assetload::sound(
|
bool assetload::sound(
|
||||||
AssetsLoader& loader,
|
AssetsLoader& loader,
|
||||||
Assets* assets,
|
Assets* assets,
|
||||||
@ -170,13 +169,34 @@ bool assetload::sound(
|
|||||||
std::shared_ptr<AssetCfg> config
|
std::shared_ptr<AssetCfg> config
|
||||||
) {
|
) {
|
||||||
auto cfg = dynamic_cast<SoundCfg*>(config.get());
|
auto cfg = dynamic_cast<SoundCfg*>(config.get());
|
||||||
auto sound = audio::load_sound(paths->find(file), cfg->keepPCM);
|
auto soundFile = paths->find(file);
|
||||||
if (sound == nullptr) {
|
|
||||||
std::cerr << "failed to load sound '" << name << "' from '";
|
bool keepPCM = cfg ? cfg->keepPCM : false;
|
||||||
std::cerr << file << "'" << std::endl;
|
|
||||||
return false;
|
size_t lastindex = file.find_last_of(".");
|
||||||
|
std::string extension = file.substr(lastindex);
|
||||||
|
std::string extensionless = file.substr(0, lastindex);
|
||||||
|
try {
|
||||||
|
std::unique_ptr<audio::Sound> baseSound = nullptr;
|
||||||
|
if (fs::exists(soundFile)) {
|
||||||
|
baseSound.reset(audio::load_sound(soundFile, keepPCM));
|
||||||
|
}
|
||||||
|
auto variantFile = paths->find(extensionless+"_0"+extension);
|
||||||
|
if (fs::exists(variantFile)) {
|
||||||
|
baseSound.reset(audio::load_sound(variantFile, keepPCM));
|
||||||
|
}
|
||||||
|
for (uint i = 1; ; i++) {
|
||||||
|
auto variantFile = paths->find(extensionless+"_"+std::to_string(i)+extension);
|
||||||
|
if (!fs::exists(variantFile)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
baseSound->variants.emplace_back(audio::load_sound(variantFile, keepPCM));
|
||||||
|
}
|
||||||
|
assets->store(baseSound.release(), name);
|
||||||
|
}
|
||||||
|
catch (std::runtime_error& err) {
|
||||||
|
std::cerr << err.what() << std::endl;
|
||||||
}
|
}
|
||||||
assets->store(sound, name);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -192,6 +192,8 @@ namespace audio {
|
|||||||
/// So it's audio data is stored in memory.
|
/// So it's audio data is stored in memory.
|
||||||
class Sound {
|
class Sound {
|
||||||
public:
|
public:
|
||||||
|
std::vector<std::shared_ptr<Sound>> variants;
|
||||||
|
|
||||||
virtual ~Sound() {}
|
virtual ~Sound() {}
|
||||||
|
|
||||||
/// @brief Get sound duration
|
/// @brief Get sound duration
|
||||||
|
|||||||
@ -40,5 +40,6 @@ inline constexpr uint vox_index(uint x, uint y, uint z, uint w=CHUNK_W, uint d=C
|
|||||||
#define TEXTURES_FOLDER "textures"
|
#define TEXTURES_FOLDER "textures"
|
||||||
#define FONTS_FOLDER "fonts"
|
#define FONTS_FOLDER "fonts"
|
||||||
#define LAYOUTS_FOLDER "layouts"
|
#define LAYOUTS_FOLDER "layouts"
|
||||||
|
#define SOUNDS_FOLDER "sounds"
|
||||||
|
|
||||||
#endif // SRC_CONSTANTS_H_
|
#endif // SRC_CONSTANTS_H_
|
||||||
|
|||||||
@ -151,9 +151,8 @@ Engine::~Engine() {
|
|||||||
std::cout << "-- shutting down" << std::endl;
|
std::cout << "-- shutting down" << std::endl;
|
||||||
screen.reset();
|
screen.reset();
|
||||||
content.reset();
|
content.reset();
|
||||||
|
|
||||||
audio::close();
|
|
||||||
assets.reset();
|
assets.reset();
|
||||||
|
audio::close();
|
||||||
scripting::close();
|
scripting::close();
|
||||||
Window::terminate();
|
Window::terminate();
|
||||||
std::cout << "-- engine finished" << std::endl;
|
std::cout << "-- engine finished" << std::endl;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user