diff options
| -rw-r--r-- | src/game.cpp | 14 | ||||
| -rw-r--r-- | src/game.h | 6 | ||||
| -rw-r--r-- | src/muxer.cpp | 14 | ||||
| -rw-r--r-- | src/muxer.h | 2 | ||||
| -rw-r--r-- | src/renderer.cpp | 6 |
5 files changed, 36 insertions, 6 deletions
| diff --git a/src/game.cpp b/src/game.cpp index 72bcbfa..caa465c 100644 --- a/src/game.cpp +++ b/src/game.cpp | |||
| @@ -16,6 +16,7 @@ Game::Game(std::mt19937& rng, Muxer& muxer, Renderer& renderer) : | |||
| 16 | sign(renderer.getFont()) | 16 | sign(renderer.getFont()) |
| 17 | { | 17 | { |
| 18 | losePopLampTimer.accumulate(losePopLampTimer.getDt()); | 18 | losePopLampTimer.accumulate(losePopLampTimer.getDt()); |
| 19 | initialFade.start(1000); | ||
| 19 | 20 | ||
| 20 | do { | 21 | do { |
| 21 | loadMap(); | 22 | loadMap(); |
| @@ -846,6 +847,19 @@ void Game::updatePlaying(size_t frameTime) { | |||
| 846 | 847 | ||
| 847 | switch (losing) | 848 | switch (losing) |
| 848 | { | 849 | { |
| 850 | case LoseState::NewGame: | ||
| 851 | { | ||
| 852 | if (!startedMusic) { | ||
| 853 | startedMusic = true; | ||
| 854 | muxer.startMusic(); | ||
| 855 | } | ||
| 856 | initialFade.tick(frameTime); | ||
| 857 | if (initialFade.isComplete()) { | ||
| 858 | losing = LoseState::None; | ||
| 859 | } | ||
| 860 | break; | ||
| 861 | } | ||
| 862 | |||
| 849 | case LoseState::None: | 863 | case LoseState::None: |
| 850 | { | 864 | { |
| 851 | if (moving) { | 865 | if (moving) { |
| diff --git a/src/game.h b/src/game.h index 839be67..3b092dd 100644 --- a/src/game.h +++ b/src/game.h | |||
| @@ -21,6 +21,7 @@ constexpr int TilesetIndex(int x, int y) { | |||
| 21 | } | 21 | } |
| 22 | 22 | ||
| 23 | enum class LoseState { | 23 | enum class LoseState { |
| 24 | NewGame, | ||
| 24 | None, | 25 | None, |
| 25 | PoppingLamps, | 26 | PoppingLamps, |
| 26 | PoppingPlayer, | 27 | PoppingPlayer, |
| @@ -66,7 +67,10 @@ public: | |||
| 66 | 67 | ||
| 67 | bool quit = false; | 68 | bool quit = false; |
| 68 | bool quitting = false; // <- whether we will quit after losing, vs starting a new game | 69 | bool quitting = false; // <- whether we will quit after losing, vs starting a new game |
| 69 | LoseState losing = LoseState::None; | 70 | LoseState losing = LoseState::NewGame; |
| 71 | |||
| 72 | Interpolation initialFade; | ||
| 73 | bool startedMusic = false; | ||
| 70 | 74 | ||
| 71 | Map map; | 75 | Map map; |
| 72 | std::list<Kickup> kickups; | 76 | std::list<Kickup> kickups; |
| diff --git a/src/muxer.cpp b/src/muxer.cpp index c93c45a..6ae6936 100644 --- a/src/muxer.cpp +++ b/src/muxer.cpp | |||
| @@ -26,11 +26,6 @@ Muxer::Muxer() { | |||
| 26 | 26 | ||
| 27 | FMOD::Studio::Bank* stringsBank = nullptr; | 27 | FMOD::Studio::Bank* stringsBank = nullptr; |
| 28 | ERRCHECK(system_->loadBankFile("../res/fmod/Build/Desktop/Master Bank.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank)); | 28 | ERRCHECK(system_->loadBankFile("../res/fmod/Build/Desktop/Master Bank.strings.bank", FMOD_STUDIO_LOAD_BANK_NORMAL, &stringsBank)); |
| 29 | |||
| 30 | FMOD::Studio::EventDescription* exploration_desc = nullptr; | ||
| 31 | ERRCHECK(system_->getEvent("event:/exploration", &exploration_desc)); | ||
| 32 | ERRCHECK(exploration_desc->createInstance(&exploration_event_)); | ||
| 33 | ERRCHECK(exploration_event_->start()); | ||
| 34 | } | 29 | } |
| 35 | 30 | ||
| 36 | void Muxer::setPlayerLoc(int x, int y) { | 31 | void Muxer::setPlayerLoc(int x, int y) { |
| @@ -96,6 +91,15 @@ void Muxer::setMusicLevel(int level) { | |||
| 96 | } | 91 | } |
| 97 | } | 92 | } |
| 98 | 93 | ||
| 94 | void Muxer::startMusic() { | ||
| 95 | FMOD::Studio::EventDescription* exploration_desc = nullptr; | ||
| 96 | ERRCHECK(system_->getEvent("event:/exploration", &exploration_desc)); | ||
| 97 | ERRCHECK(exploration_desc->createInstance(&exploration_event_)); | ||
| 98 | ERRCHECK(exploration_event_->start()); | ||
| 99 | |||
| 100 | transition_state_ = TransitionState::Pre; | ||
| 101 | } | ||
| 102 | |||
| 99 | void Muxer::stopMusic() { | 103 | void Muxer::stopMusic() { |
| 100 | switch (transition_state_) { | 104 | switch (transition_state_) { |
| 101 | case TransitionState::Pre: { | 105 | case TransitionState::Pre: { |
| diff --git a/src/muxer.h b/src/muxer.h index 9750808..acceca8 100644 --- a/src/muxer.h +++ b/src/muxer.h | |||
| @@ -34,6 +34,8 @@ public: | |||
| 34 | 34 | ||
| 35 | void setMusicLevel(int level); | 35 | void setMusicLevel(int level); |
| 36 | 36 | ||
| 37 | void startMusic(); | ||
| 38 | |||
| 37 | void stopMusic(); | 39 | void stopMusic(); |
| 38 | 40 | ||
| 39 | void update(); | 41 | void update(); |
| diff --git a/src/renderer.cpp b/src/renderer.cpp index b24ddbf..b6a9b4a 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
| @@ -396,6 +396,12 @@ void Renderer::renderGame( | |||
| 396 | 396 | ||
| 397 | SDL_RenderCopy(ren_.get(), canvas.get(), &zoomRect, nullptr); | 397 | SDL_RenderCopy(ren_.get(), canvas.get(), &zoomRect, nullptr); |
| 398 | 398 | ||
| 399 | if (game.losing == LoseState::NewGame) { | ||
| 400 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_BLEND); | ||
| 401 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, game.initialFade.getProgress(255, 0)); | ||
| 402 | SDL_RenderFillRect(ren_.get(), nullptr); | ||
| 403 | } | ||
| 404 | |||
| 399 | texture_ptr overlays( | 405 | texture_ptr overlays( |
| 400 | SDL_CreateTexture( | 406 | SDL_CreateTexture( |
| 401 | ren_.get(), | 407 | ren_.get(), |
