summary refs log tree commit diff stats
path: root/src/renderer.cpp
diff options
context:
space:
mode:
authorKelly Rauchenberger <fefferburbia@gmail.com>2021-02-14 16:13:08 -0500
committerKelly Rauchenberger <fefferburbia@gmail.com>2021-02-14 16:13:08 -0500
commitce0628c5ad96e094db12a67d4e98b445fa873ad3 (patch)
tree94a67903059685969085f7ee5724b9960c74d3f6 /src/renderer.cpp
parent73c9b0fb4eb35e73d0005f896462e748a207d2b1 (diff)
downloadtanetane-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.cpp52
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
10Renderer::Renderer() { 11Renderer::Renderer() {
11 win_ = window_ptr( 12 win_ = window_ptr(
@@ -110,10 +111,22 @@ void Renderer::renderSprite(const Sprite& sprite) {
110} 111}
111 112
112void Renderer::render(Game& game) { 113void 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