afegit resource::cache
normalitzat Audio
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
#include "core/jail/jail_audio.hpp"
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/jail/jinput.hpp"
|
||||
#include "game/info.hpp"
|
||||
@@ -52,7 +52,7 @@ namespace scenes {
|
||||
remaining_ms_ -= delta_ms;
|
||||
}
|
||||
if (remaining_ms_ <= 0) {
|
||||
JA_FadeOutMusic(250);
|
||||
Audio::get()->fadeOutMusic(250);
|
||||
fade_.startFadeOut();
|
||||
phase_ = Phase::FadingOut;
|
||||
}
|
||||
|
||||
55
source/scenes/boot_loader_scene.cpp
Normal file
55
source/scenes/boot_loader_scene.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
#include "scenes/boot_loader_scene.hpp"
|
||||
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/resources/resource_cache.hpp"
|
||||
|
||||
namespace scenes {
|
||||
|
||||
namespace {
|
||||
constexpr int SCREEN_W = 320;
|
||||
|
||||
constexpr Uint8 BG_COLOR = 0; // negre
|
||||
constexpr Uint8 BAR_COLOR = 1; // blanc
|
||||
|
||||
constexpr int BAR_X = 60;
|
||||
constexpr int BAR_Y = 170;
|
||||
constexpr int BAR_W = SCREEN_W - (BAR_X * 2); // 200
|
||||
constexpr int BAR_H = 6;
|
||||
} // namespace
|
||||
|
||||
BootLoaderScene::BootLoaderScene() = default;
|
||||
|
||||
void BootLoaderScene::onEnter() {
|
||||
// Inicialitza la paleta mínima per a la barra. La resta de
|
||||
// colors queden a negre — després cada escena del joc carregarà
|
||||
// la seua pròpia paleta.
|
||||
JD8_SetPaletteColor(BG_COLOR, 0, 0, 0);
|
||||
JD8_SetPaletteColor(BAR_COLOR, 63, 63, 63);
|
||||
}
|
||||
|
||||
void BootLoaderScene::tick(int /*delta_ms*/) {
|
||||
if (Resource::Cache::get()->loadStep(8)) {
|
||||
done_ = true;
|
||||
}
|
||||
render();
|
||||
}
|
||||
|
||||
void BootLoaderScene::render() const {
|
||||
JD8_ClearScreen(BG_COLOR);
|
||||
|
||||
const float pct = Resource::Cache::get()->getProgress();
|
||||
const int filled = static_cast<int>(static_cast<float>(BAR_W) * pct);
|
||||
|
||||
// Vora de la barra (línia 1 píxel a dalt i a baix).
|
||||
JD8_FillRect(BAR_X - 1, BAR_Y - 1, BAR_W + 2, 1, BAR_COLOR);
|
||||
JD8_FillRect(BAR_X - 1, BAR_Y + BAR_H, BAR_W + 2, 1, BAR_COLOR);
|
||||
JD8_FillRect(BAR_X - 1, BAR_Y, 1, BAR_H, BAR_COLOR);
|
||||
JD8_FillRect(BAR_X + BAR_W, BAR_Y, 1, BAR_H, BAR_COLOR);
|
||||
|
||||
// Ompliment proporcional al progrés.
|
||||
if (filled > 0) {
|
||||
JD8_FillRect(BAR_X, BAR_Y, filled, BAR_H, BAR_COLOR);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace scenes
|
||||
27
source/scenes/boot_loader_scene.hpp
Normal file
27
source/scenes/boot_loader_scene.hpp
Normal file
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#include "scenes/scene.hpp"
|
||||
|
||||
namespace scenes {
|
||||
|
||||
// Escena de boot que conduix la càrrega incremental del Resource::Cache.
|
||||
// tick() crida loadStep amb un pressupost de ~8ms i pinta una barra
|
||||
// de progrés mentre dura. Quan el Cache marca isLoadDone, l'escena
|
||||
// marca done() i el Director passa al següent state (intro = 255).
|
||||
class BootLoaderScene : public Scene {
|
||||
public:
|
||||
BootLoaderScene();
|
||||
~BootLoaderScene() override = default;
|
||||
|
||||
void onEnter() override;
|
||||
void tick(int delta_ms) override;
|
||||
bool done() const override { return done_; }
|
||||
int nextState() const override { return 1; } // 1 → SceneRegistry::tryCreate(num_piramide=255 → intro)
|
||||
|
||||
private:
|
||||
void render() const;
|
||||
|
||||
bool done_{false};
|
||||
};
|
||||
|
||||
} // namespace scenes
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <cstdio>
|
||||
#include <cstdlib>
|
||||
|
||||
#include "core/jail/jail_audio.hpp"
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/jail/jinput.hpp"
|
||||
#include "game/info.hpp"
|
||||
@@ -46,7 +46,7 @@ namespace scenes {
|
||||
// amb piramide_inicial=8) no hi ha res que heretar, així que
|
||||
// arranquem la mateixa pista només si no sona res. Inocu en el
|
||||
// flux normal: JA_MUSIC_PLAYING fa que no la tornem a tocar.
|
||||
if (JA_GetMusicState() != JA_MUSIC_PLAYING) {
|
||||
if (Audio::getRealMusicState() != Audio::MusicState::PLAYING) {
|
||||
playMusic("music/final.ogg");
|
||||
}
|
||||
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
#include "scenes/scene_utils.hpp"
|
||||
|
||||
#include <SDL3/SDL.h>
|
||||
#include <string>
|
||||
|
||||
#include "core/jail/jail_audio.hpp"
|
||||
#include "core/resources/resource_helper.hpp"
|
||||
#include "core/audio/audio.hpp"
|
||||
|
||||
namespace scenes {
|
||||
|
||||
namespace {
|
||||
std::string basename(const char* path) {
|
||||
std::string s = path;
|
||||
auto pos = s.find_last_of("/\\");
|
||||
return pos == std::string::npos ? s : s.substr(pos + 1);
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void playMusic(const char* filename, int loop) {
|
||||
if (!filename) return;
|
||||
auto buffer = ResourceHelper::loadFile(filename);
|
||||
if (buffer.empty()) return;
|
||||
// JA_LoadMusic fa una còpia interna del OGG comprimit (via SDL_malloc)
|
||||
// per a stb_vorbis. El `buffer` local es destruirà en sortir d'àmbit.
|
||||
JA_PlayMusic(JA_LoadMusic(buffer.data(),
|
||||
static_cast<Uint32>(buffer.size()),
|
||||
filename),
|
||||
loop);
|
||||
Audio::get()->playMusic(basename(filename), loop);
|
||||
}
|
||||
|
||||
} // namespace scenes
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include "core/jail/jail_audio.hpp"
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/jail/jinput.hpp"
|
||||
#include "game/info.hpp"
|
||||
@@ -76,7 +76,7 @@ namespace scenes {
|
||||
}
|
||||
|
||||
void SecretaScene::beginFinalFade() {
|
||||
JA_FadeOutMusic(250);
|
||||
Audio::get()->fadeOutMusic(250);
|
||||
fade_.startFadeOut();
|
||||
phase_ = Phase::FinalFadeOut;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include <cstdlib>
|
||||
#include <cstring>
|
||||
|
||||
#include "core/jail/jail_audio.hpp"
|
||||
#include "core/audio/audio.hpp"
|
||||
#include "core/jail/jdraw8.hpp"
|
||||
#include "core/jail/jinput.hpp"
|
||||
#include "game/info.hpp"
|
||||
@@ -93,7 +93,7 @@ namespace scenes {
|
||||
|
||||
void SlidesScene::beginFinalFade() {
|
||||
if (num_piramide_at_start_ != 7) {
|
||||
JA_FadeOutMusic(250);
|
||||
Audio::get()->fadeOutMusic(250);
|
||||
}
|
||||
fade_.startFadeOut();
|
||||
phase_ = Phase::FadeFinal;
|
||||
@@ -105,7 +105,7 @@ namespace scenes {
|
||||
// el final natural crida JA_FadeOutMusic (beginFinalFade() distingeix).
|
||||
if (!skip_triggered_ && JI_AnyKey()) {
|
||||
skip_triggered_ = true;
|
||||
if (num_piramide_at_start_ != 7) JA_FadeOutMusic(250);
|
||||
if (num_piramide_at_start_ != 7) Audio::get()->fadeOutMusic(250);
|
||||
fade_.startFadeOut();
|
||||
phase_ = Phase::FadeFinal;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user