Subsistema d'àudio: port de ../aee/core/audio refactoritzat amb namespace Ja, desacoblat d'Options via Audio::Config i extensió de Resource::Cache per preloading de música i sons; pyramid_1.ogg sona a GameScene (v0.15.0)
This commit is contained in:
1 parent
6f3fafbfff
commit
e2b8d0e459
16 files changed
+6796
-5
No files matched your search
@@ -10,6 +10,7 @@
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/input/key_config.hpp"
|
||||
#include "core/locale/locale.hpp"
|
||||
#include "core/rendering/notifier.hpp"
|
||||
@@ -69,6 +70,15 @@ Director::Director() {
|
||||
Resource::Cache::get().loadSurface("8bithud.gif", "data/font/8bithud.gif");
|
||||
Resource::Cache::get().getSurface("8bithud.gif")->setPalette(Resource::Cache::get().getPalette("ui"));
|
||||
|
||||
// Música de la piràmide 1 (primer i únic track de moment). Carreguem ací
|
||||
// perquè forma part del preload d'assets, com la font i la paleta.
|
||||
Resource::Cache::get().loadMusic("pyramid_1.ogg", "data/music/pyramid_1.ogg");
|
||||
|
||||
// Audio: singleton manual propietari d'un SDL audio device. Es destrueix
|
||||
// explícitament a ~Director abans que Resource::Cache (Meyers) buide els
|
||||
// JA_Music_t que continga, així que no queden streams orfes.
|
||||
Audio::init(Options::buildAudioConfig());
|
||||
|
||||
RenderInfo::get().init();
|
||||
Notifier::get().init();
|
||||
|
||||
@@ -77,11 +87,16 @@ Director::Director() {
|
||||
}
|
||||
|
||||
Director::~Director() {
|
||||
// Ordre imprescindible: primer l'escena (pot tenir recursos), després
|
||||
// Screen (GPU device, finestra, subsystem de vídeo), i finalment SDL_Quit.
|
||||
// Fer-ho així -- NO via atexit -- evita crashes a vkDestroyInstance quan
|
||||
// el runtime desfà les llibreries abans que corren els destructors estàtics.
|
||||
// Ordre imprescindible: primer l'escena (pot tenir recursos); després
|
||||
// alliberem els recursos d'àudio del Cache mentre SDL encara està viu
|
||||
// (en Meyers, el Cache es destrueix després de SDL_Quit i els streams
|
||||
// dels JA_Music_t quedarien invalidats); després Audio (tanca l'audio
|
||||
// device), Screen (GPU + finestra) i finalment SDL_Quit. Fer-ho així --
|
||||
// NO via atexit -- evita crashes a vkDestroyInstance quan el runtime
|
||||
// desfà les llibreries abans que corren els destructors estàtics.
|
||||
current_scene_.reset();
|
||||
Resource::Cache::get().clearAudio();
|
||||
Audio::destroy();
|
||||
Screen::get().shutdown();
|
||||
SDL_Quit();
|
||||
}
|
||||
@@ -136,6 +151,7 @@ auto Director::iterate() -> SDL_AppResult {
|
||||
delta_ms = std::max(delta_ms, 0);
|
||||
last_ticks_ms_ = NOW_MS;
|
||||
|
||||
Audio::update();
|
||||
current_scene_->update(delta_ms);
|
||||
current_scene_->render();
|
||||
|
||||
|
||||
Reference in new issue
Block a user