diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-03-05 18:53:06 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-03-05 18:53:06 -0500 |
commit | 937875c4e1432b418f0f5051759e02c8d4c9ffa4 (patch) | |
tree | bfb08ae9f8e4619dc213e20739b4fbce682ae0d0 /src/renderer.cpp | |
parent | cd72ba5481705072b893d728e2f80931b5cca580 (diff) | |
download | tanetane-937875c4e1432b418f0f5051759e02c8d4c9ffa4.tar.gz tanetane-937875c4e1432b418f0f5051759e02c8d4c9ffa4.tar.bz2 tanetane-937875c4e1432b418f0f5051759e02c8d4c9ffa4.zip |
Added the mask sprite layer
This layer is below the normal sprite layer. Sprites on it are only rendered within the area of a zone that is defined per-map.
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r-- | src/renderer.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/renderer.cpp b/src/renderer.cpp index 5ab623a..ea8a2ac 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
@@ -178,6 +178,36 @@ void Renderer::render(Game& game) { | |||
178 | SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr); | 178 | SDL_RenderCopy(ren_.get(), mapSwapTex_.get(), nullptr, nullptr); |
179 | } | 179 | } |
180 | 180 | ||
181 | // Render mask sprite layer | ||
182 | if (!game.getMap().getMaskZone().empty()) { | ||
183 | texture_ptr spritesTex( | ||
184 | SDL_CreateTexture( | ||
185 | ren_.get(), | ||
186 | SDL_PIXELFORMAT_RGBA8888, | ||
187 | SDL_TEXTUREACCESS_TARGET, | ||
188 | mapBounds.w(), | ||
189 | mapBounds.h())); | ||
190 | |||
191 | if (!spritesTex) { | ||
192 | throw sdl_error(); | ||
193 | } | ||
194 | |||
195 | SDL_SetRenderTarget(ren_.get(), spritesTex.get()); | ||
196 | SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0); | ||
197 | SDL_RenderClear(ren_.get()); | ||
198 | |||
199 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Mask) | game.spriteView()) { | ||
200 | renderSprite(sprite); | ||
201 | } | ||
202 | |||
203 | const Zone& zone = game.getMap().getZone(game.getMap().getMaskZone()); | ||
204 | SDL_Rect zoneArea { zone.ul.x(), zone.ul.y(), zone.dr.x() - zone.ul.x(), zone.dr.y() - zone.ul.y() }; | ||
205 | |||
206 | SDL_SetRenderTarget(ren_.get(), canvas.get()); | ||
207 | SDL_SetTextureBlendMode(spritesTex.get(), SDL_BLENDMODE_BLEND); | ||
208 | SDL_RenderCopy(ren_.get(), spritesTex.get(), &zoneArea, &zoneArea); | ||
209 | } | ||
210 | |||
181 | // Render normal sprite layer | 211 | // Render normal sprite layer |
182 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) { | 212 | for (const Sprite& sprite : game.getSystem<TransformSystem>().getSpritesByY(SpriteLayer::Normal) | game.spriteView()) { |
183 | renderSprite(sprite); | 213 | renderSprite(sprite); |