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 | ||