feat(core/audio): music-ended callback (CONV-03)

Ja::Engine exposa setOnMusicEnded(std::function<void()>). Quan
updateCurrentMusic detecta que la pista actual ha acabat de drenar
(times == 0 && stream buit) s'atura primer via stopMusic i després
s'invoca el callback — així un eventual playMusic des del callback pot
començar amb l'engine en estat net.

Audio proxeia amb setOnMusicEnded. Contracte documentat: s'executa al
mateix thread que Audio::update (render loop); no fer operacions
blocants.

Cap consumidor actualment; només exposa l'API per quan calgui.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
JailDesignerandClaude Opus 4.7 committed 2026-04-20 13:31:47 +02:00
1 parent 4e0dcfe739
commit 2ec6fd23b6
4 files changed
+31 -5

No files matched your search

+7 -5
View File
@@ -1,10 +1,11 @@
#pragma once
#include <cmath> // Per a std::lround
#include <cstdint> // Per a int8_t, uint8_t
#include <memory> // Per a std::unique_ptr
#include <string> // Per a string
#include <utility> // Per a move
#include <cmath> // Per a std::lround
#include <cstdint> // Per a int8_t, uint8_t
#include <functional> // Per a std::function
#include <memory> // Per a std::unique_ptr
#include <string> // Per a string
#include <utility> // Per a move
// Forward-declares per no incloure core/audio/jail_audio.hpp al header. Els
// tres símbols (Music/Sound per al punter que exposa la API i Engine per al
@@ -74,6 +75,7 @@ class Audio {
void resumeMusic(); // Continua la música pausada
void stopMusic(); // Aturar completament la música
void fadeOutMusic(int milliseconds); // Fosa de sortida de la música (muta globals de Ja)
void setOnMusicEnded(std::function<void()> callback); // Callback disparat quan la pista actual acaba de drenar (CONV-03)
// --- Control de sons ---
void playSound(const std::string& name, Group group = Group::GAME); // Reproduir so puntual per nom (muta globals de Ja)