diff options
| author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-14 16:13:08 -0500 |
|---|---|---|
| committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-14 16:13:08 -0500 |
| commit | ce0628c5ad96e094db12a67d4e98b445fa873ad3 (patch) | |
| tree | 94a67903059685969085f7ee5724b9960c74d3f6 /src/renderer.cpp | |
| parent | 73c9b0fb4eb35e73d0005f896462e748a207d2b1 (diff) | |
| download | tanetane-ce0628c5ad96e094db12a67d4e98b445fa873ad3.tar.gz tanetane-ce0628c5ad96e094db12a67d4e98b445fa873ad3.tar.bz2 tanetane-ce0628c5ad96e094db12a67d4e98b445fa873ad3.zip | |
Added map fadeouts
Screen fadeouts and map fadeouts are now handled by the effect system.
Diffstat (limited to 'src/renderer.cpp')
| -rw-r--r-- | src/renderer.cpp | 52 |
1 files changed, 50 insertions, 2 deletions
| diff --git a/src/renderer.cpp b/src/renderer.cpp index 0e5f8f1..c80b0d3 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include "transform_system.h" | 6 | #include "transform_system.h" |
| 7 | #include "camera_system.h" | 7 | #include "camera_system.h" |
| 8 | #include "message_system.h" | 8 | #include "message_system.h" |
| 9 | #include "effect_system.h" | ||
| 9 | 10 | ||
| 10 | Renderer::Renderer() { | 11 | Renderer::Renderer() { |
| 11 | win_ = window_ptr( | 12 | win_ = window_ptr( |
| @@ -110,10 +111,22 @@ void Renderer::renderSprite(const Sprite& sprite) { | |||
| 110 | } | 111 | } |
| 111 | 112 | ||
| 112 | void Renderer::render(Game& game) { | 113 | void Renderer::render(Game& game) { |
| 114 | auto& effects = game.getSystem<EffectSystem>(); | ||
| 115 | |||
| 113 | if (cachedMapName_ != game.getMap().getName()) { | 116 | if (cachedMapName_ != game.getMap().getName()) { |
| 114 | cachedMapName_ = game.getMap().getName(); | 117 | cachedMapName_ = game.getMap().getName(); |
| 115 | renLay1_ = renderMapLayer(game.getMap(), 0); | 118 | renLay1_ = renderMapLayer(game.getMap(), 0); |
| 116 | renLay0_ = renderMapLayer(game.getMap(), 1); | 119 | renLay0_ = renderMapLayer(game.getMap(), 1); |
| 120 | |||
| 121 | vec2i mapBounds = game.getMap().getMapSize() * game.getMap().getTileSize(); | ||
| 122 | mapSwapTex_.reset(SDL_CreateTexture( | ||
| 123 | ren_.get(), | ||
| 124 | SDL_PIXELFORMAT_RGBA8888, | ||
| 125 | SDL_TEXTUREACCESS_TARGET, | ||
| 126 | mapBounds.w(), | ||
| 127 | mapBounds.h())); | ||
| 128 | |||
| 129 | SDL_SetTextureBlendMode(mapSwapTex_.get(), SDL_BLENDMODE_BLEND); | ||
| 117 | } | 130 | } |
| 118 | 131 | ||
| 119 | vec2i mapBounds = game.getMap().getMapSize() * game.getMap().getTileSize(); | 132 | vec2i mapBounds = game.getMap().getMapSize() * game.getMap().getTileSize(); |
| @@ -135,14 +148,48 @@ void Renderer::render(Game& game) { | |||
| 135 | SDL_SetRenderDrawColor(ren_.get(), 255, 255, 255, 255); | 148 | SDL_SetRenderDrawColor(ren_.get(), 255, 255, 255, 255); |
| 136 | SDL_RenderClear(ren_.get()); | 149 | SDL_RenderClear(ren_.get()); |
| 137 | 150 | ||
| 151 | // Render lower map layer | ||
| 138 | SDL_RenderCopy(ren_.get(), renLay1_.get(), nullptr, nullptr); | 152 | SDL_RenderCopy(ren_.get(), renLay1_.get(), nullptr, nullptr); |
| 139 | 153 | ||
| 154 | if (effects.isMapFaded()) { | ||
| 155 | SDL_SetRenderTarget(ren_.get(), mapSwapTex_.get()); | ||
| 156 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0); | ||
| 157 | SDL_RenderClear(ren_.get()); | ||
| 158 | SDL_RenderCopy(ren_.get(), renLay1_.get(), nullptr, nullptr); | ||
| 159 | |||
| 160 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_MOD); | ||
| 161 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 255); | ||
| 162 | SDL_RenderFillRect(ren_.get(), nullptr); | ||
| 163 | |||
| 164 | SDL_SetRenderTarget(ren_.get(), canvas.get()); | ||
| 165 | SDL_SetTextureAlphaMod(mapSwapTex_.get(), effects.getMapFadeProgress() * 255); | ||
| 166 | SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr); | ||
| 167 | } | ||
| 168 | |||
| 169 | // Render normal sprite layer | ||
| 140 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) { | 170 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) { |
| 141 | renderSprite(sprite); | 171 | renderSprite(sprite); |
| 142 | } | 172 | } |
| 143 | 173 | ||
| 174 | // Render upper map layer | ||
| 144 | SDL_RenderCopy(ren_.get(), renLay0_.get(), nullptr, nullptr); | 175 | SDL_RenderCopy(ren_.get(), renLay0_.get(), nullptr, nullptr); |
| 145 | 176 | ||
| 177 | if (effects.isMapFaded()) { | ||
| 178 | SDL_SetRenderTarget(ren_.get(), mapSwapTex_.get()); | ||
| 179 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0); | ||
| 180 | SDL_RenderClear(ren_.get()); | ||
| 181 | SDL_RenderCopy(ren_.get(), renLay0_.get(), nullptr, nullptr); | ||
| 182 | |||
| 183 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_MOD); | ||
| 184 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 255); | ||
| 185 | SDL_RenderFillRect(ren_.get(), nullptr); | ||
| 186 | |||
| 187 | SDL_SetRenderTarget(ren_.get(), canvas.get()); | ||
| 188 | SDL_SetTextureAlphaMod(mapSwapTex_.get(), effects.getMapFadeProgress() * 255); | ||
| 189 | SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr); | ||
| 190 | } | ||
| 191 | |||
| 192 | // Render above sprite layer | ||
| 146 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Above) | game.spriteView()) { | 193 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Above) | game.spriteView()) { |
| 147 | renderSprite(sprite); | 194 | renderSprite(sprite); |
| 148 | } | 195 | } |
| @@ -170,6 +217,7 @@ void Renderer::render(Game& game) { | |||
| 170 | SDL_RenderCopy(ren_.get(), canvas.get(), &cameraField, nullptr); | 217 | SDL_RenderCopy(ren_.get(), canvas.get(), &cameraField, nullptr); |
| 171 | 218 | ||
| 172 | if (game.getSystem<MessageSystem>().getCutsceneBarsProgress() > 0) { | 219 | if (game.getSystem<MessageSystem>().getCutsceneBarsProgress() > 0) { |
| 220 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_NONE); | ||
| 173 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 255); | 221 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 255); |
| 174 | 222 | ||
| 175 | int topBarHeight = 16.0 * game.getSystem<MessageSystem>().getCutsceneBarsProgress(); | 223 | int topBarHeight = 16.0 * game.getSystem<MessageSystem>().getCutsceneBarsProgress(); |
| @@ -277,9 +325,9 @@ void Renderer::render(Game& game) { | |||
| 277 | } | 325 | } |
| 278 | } | 326 | } |
| 279 | 327 | ||
| 280 | if (game.getFadeoutProgress() > 0.0) { | 328 | if (effects.isScreenFaded()) { |
| 281 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_BLEND); | 329 | SDL_SetRenderDrawBlendMode(ren_.get(), SDL_BLENDMODE_BLEND); |
| 282 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, game.getFadeoutProgress() * 255); | 330 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, effects.getScreenFadeProgress() * 255); |
| 283 | SDL_RenderFillRect(ren_.get(), nullptr); | 331 | SDL_RenderFillRect(ren_.get(), nullptr); |
| 284 | } | 332 | } |
| 285 | 333 | ||
