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(), |