diff --git a/audio/audio.cpp b/audio/audio.cpp index 92bc11a0..0824bb7c 100644 --- a/audio/audio.cpp +++ b/audio/audio.cpp @@ -57,6 +57,11 @@ AudioManager& AudioManager::Get() void AudioManager::ChangeMusicTrack(MusicIndex musicI) { + if (!mMusicStack.empty()) + { + mMusicStack.pop(); + } + auto* music = GetMusic(musicI); mMusicStack.push(music); mLogger.Debug() << "Changing track to: " << musicI diff --git a/bak/ttmRenderer.cpp b/bak/ttmRenderer.cpp index 76e9fcd4..e69c4408 100644 --- a/bak/ttmRenderer.cpp +++ b/bak/ttmRenderer.cpp @@ -93,40 +93,7 @@ bool TTMRenderer::AdvanceAction() mRenderer.GetForegroundLayer()); }, [&](const BAK::Update& sr){ - if (mScreen) - { - mRenderer.RenderSprite( - *mScreen, - mPaletteSlots.at(mCurrentPaletteSlot).mPaletteData, - glm::ivec2{0, 0}, false, mRenderer.GetBackgroundLayer()); - } - - mRenderer.RenderTexture( - mRenderer.GetSavedImagesLayerBG(), - glm::ivec2{0}, - mRenderer.GetBackgroundLayer()); - - mRenderer.RenderTexture( - mRenderer.GetSavedImagesLayer0(), - glm::ivec2{0}, - mRenderer.GetBackgroundLayer()); - - mRenderer.RenderTexture( - mRenderer.GetSavedImagesLayer1(), - glm::ivec2{0}, - mRenderer.GetBackgroundLayer()); - - mRenderer.RenderTexture( - mRenderer.GetForegroundLayer(), - glm::ivec2{0, 0}, - mRenderer.GetBackgroundLayer()); - - auto bg = mRenderer.GetBackgroundLayer(); - bg.Invert(); - mRenderedFrames.AddTexture(bg); - - mRenderer.GetForegroundLayer() = Graphics::Texture{320, 200}; - mRenderer.GetBackgroundLayer() = Graphics::Texture{320, 200}; + RenderFrame(); }, [&](const BAK::SaveImage& si){ mRenderer.SaveImage(si.pos, si.dims, mImageSaveLayer); @@ -183,5 +150,41 @@ bool TTMRenderer::AdvanceAction() return false; } +void TTMRenderer::RenderFrame() +{ + if (mScreen) + { + mRenderer.RenderSprite( + *mScreen, + mPaletteSlots.at(mCurrentPaletteSlot).mPaletteData, + glm::ivec2{0, 0}, false, mRenderer.GetBackgroundLayer()); + } + + mRenderer.RenderTexture( + mRenderer.GetSavedImagesLayerBG(), + glm::ivec2{0}, + mRenderer.GetBackgroundLayer()); + mRenderer.RenderTexture( + mRenderer.GetSavedImagesLayer0(), + glm::ivec2{0}, + mRenderer.GetBackgroundLayer()); + + mRenderer.RenderTexture( + mRenderer.GetSavedImagesLayer1(), + glm::ivec2{0}, + mRenderer.GetBackgroundLayer()); + + mRenderer.RenderTexture( + mRenderer.GetForegroundLayer(), + glm::ivec2{0, 0}, + mRenderer.GetBackgroundLayer()); + + auto bg = mRenderer.GetBackgroundLayer(); + bg.Invert(); + mRenderedFrames.AddTexture(bg); + + mRenderer.GetForegroundLayer() = Graphics::Texture{320, 200}; + mRenderer.GetBackgroundLayer() = Graphics::Texture{320, 200}; +} } diff --git a/bak/ttmRenderer.hpp b/bak/ttmRenderer.hpp index 88d1beee..8dffbe31 100644 --- a/bak/ttmRenderer.hpp +++ b/bak/ttmRenderer.hpp @@ -23,6 +23,8 @@ class TTMRenderer private: bool AdvanceAction(); + void RenderFrame(); + TTMRunner mRunner; struct PaletteSlot diff --git a/gui/dynamicTTM.cpp b/gui/dynamicTTM.cpp index 9c0e908e..3961a4ce 100644 --- a/gui/dynamicTTM.cpp +++ b/gui/dynamicTTM.cpp @@ -1,5 +1,8 @@ #include "gui/dynamicTTM.hpp" +#include "audio/audio.hpp" + +#include "bak/dialogAction.hpp" #include "gui/backgrounds.hpp" #include "gui/colors.hpp" #include "gui/callbackDelay.hpp" @@ -156,6 +159,16 @@ bool DynamicTTM::AdvanceAction() [&](const BAK::Purge&){ assert(false); }, + [&](const BAK::PlaySoundS& sound){ + if (sound.mSoundIndex < 255) + { + AudioA::AudioManager::Get().PlaySound(AudioA::SoundIndex{sound.mSoundIndex}); + } + else + { + AudioA::AudioManager::Get().ChangeMusicTrack(AudioA::MusicIndex{sound.mSoundIndex}); + } + }, [&](const BAK::GotoTag& sa){ assert(false); },