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