afegit resource::cache

normalitzat Audio
This commit is contained in:
2026-04-18 11:41:34 +02:00
parent 7409c799c3
commit 94aa69cffe
29 changed files with 1420 additions and 134 deletions

View File

@@ -1,10 +1,9 @@
#include "game/modulegame.hpp"
#include "core/jail/jail_audio.hpp"
#include "core/audio/audio.hpp"
#include "core/jail/jdraw8.hpp"
#include "core/jail/jgame.hpp"
#include "core/jail/jinput.hpp"
#include "core/resources/resource_helper.hpp"
ModuleGame::ModuleGame() {
this->gfx = JD8_LoadSurface(info::ctx.pepe_activat ? "gfx/frames2.gif" : "gfx/frames.gif");
@@ -42,18 +41,14 @@ void ModuleGame::onEnter() {
// fade interpolarien cap a una paleta amb pantalla buida.
this->Draw();
const char* music = info::ctx.num_piramide == 3 ? "music/piramide_3.ogg"
: info::ctx.num_piramide == 2 ? "music/piramide_2.ogg"
: info::ctx.num_piramide == 6 ? "music/secreta.ogg"
: "music/piramide_1_4_5.ogg";
const char* current_music = JA_GetMusicFilename();
if ((JA_GetMusicState() != JA_MUSIC_PLAYING) || !current_music ||
strcmp(music, current_music) != 0) {
auto buffer = ResourceHelper::loadFile(music);
JA_PlayMusic(JA_LoadMusic(buffer.data(),
static_cast<Uint32>(buffer.size()),
music));
}
// Audio::playMusic ja és idempotent: si la pista actual coincideix amb la
// demanada, no fa res. Per això podem cridar-lo cada onEnter sense
// desencadenar restarts indesitjats.
const char* music_name = info::ctx.num_piramide == 3 ? "piramide_3.ogg"
: info::ctx.num_piramide == 2 ? "piramide_2.ogg"
: info::ctx.num_piramide == 6 ? "secreta.ogg"
: "piramide_1_4_5.ogg";
Audio::get()->playMusic(music_name);
// Arranca el fade-in tick-based. El `PaletteFade` avança un pas (de
// 32) per cada tick; durant aquesta fase el gameplay no corre,

View File

@@ -4,7 +4,7 @@
#include <iostream>
#include <string>
#include "core/jail/jail_audio.hpp"
#include "core/audio/audio.hpp"
#include "external/fkyaml_node.hpp"
#include "game/defaults.hpp"
#include "game/defines.hpp"
@@ -76,12 +76,16 @@ namespace Options {
}
}
// Delega tots els canvis de l'estat d'àudio al wrapper Audio. Es manté
// com a punt d'entrada únic per als callsites legacy del menú; el cos
// ja no toca jail_audio directament.
void applyAudio() {
const float master = audio.enabled ? audio.volume : 0.0F;
JA_EnableMusic(audio.music_enabled);
JA_EnableSound(audio.sound_enabled);
JA_SetMusicVolume(master * audio.music_volume);
JA_SetSoundVolume(master * audio.sound_volume);
if (::Audio::get() == nullptr) return;
::Audio::get()->enable(audio.enabled);
::Audio::get()->enableMusic(audio.music.enabled);
::Audio::get()->enableSound(audio.sound.enabled);
::Audio::get()->setMusicVolume(audio.music.volume);
::Audio::get()->setSoundVolume(audio.sound.volume);
}
// --- Funcions helper de càrrega ---
@@ -99,17 +103,17 @@ namespace Options {
if (node.contains("music")) {
const auto& music = node["music"];
if (music.contains("enabled"))
audio.music_enabled = music["enabled"].get_value<bool>();
audio.music.enabled = music["enabled"].get_value<bool>();
if (music.contains("volume"))
audio.music_volume = music["volume"].get_value<float>();
audio.music.volume = music["volume"].get_value<float>();
}
if (node.contains("sound")) {
const auto& sound = node["sound"];
if (sound.contains("enabled"))
audio.sound_enabled = sound["enabled"].get_value<bool>();
audio.sound.enabled = sound["enabled"].get_value<bool>();
if (sound.contains("volume"))
audio.sound_volume = sound["volume"].get_value<float>();
audio.sound.volume = sound["volume"].get_value<float>();
}
}
@@ -352,11 +356,11 @@ namespace Options {
file << " enabled: " << (audio.enabled ? "true" : "false") << "\n";
file << " volume: " << audio.volume << "\n";
file << " music:\n";
file << " enabled: " << (audio.music_enabled ? "true" : "false") << "\n";
file << " volume: " << audio.music_volume << "\n";
file << " enabled: " << (audio.music.enabled ? "true" : "false") << "\n";
file << " volume: " << audio.music.volume << "\n";
file << " sound:\n";
file << " enabled: " << (audio.sound_enabled ? "true" : "false") << "\n";
file << " volume: " << audio.sound_volume << "\n";
file << " enabled: " << (audio.sound.enabled ? "true" : "false") << "\n";
file << " volume: " << audio.sound.volume << "\n";
file << "\n";
// GAME

View File

@@ -59,13 +59,19 @@ namespace Options {
Uint32 shadow_color{0xFF005A6B}; // Ombra daurada fosca (ABGR)
};
// Opcions d'àudio
// Opcions d'àudio (estructura compartida amb la resta de projectes)
struct Music {
bool enabled{Defaults::Audio::MUSIC_ENABLED};
float volume{Defaults::Audio::MUSIC_VOLUME};
};
struct Sound {
bool enabled{Defaults::Audio::SOUND_ENABLED};
float volume{Defaults::Audio::SOUND_VOLUME};
};
struct Audio {
Music music{};
Sound sound{};
bool enabled{Defaults::Audio::ENABLED}; // master enable
bool music_enabled{Defaults::Audio::MUSIC_ENABLED};
float music_volume{Defaults::Audio::MUSIC_VOLUME};
bool sound_enabled{Defaults::Audio::SOUND_ENABLED};
float sound_volume{Defaults::Audio::SOUND_VOLUME};
float volume{Defaults::Audio::VOLUME};
};