diff options
Diffstat (limited to 'src/renderer.cpp')
| -rw-r--r-- | src/renderer.cpp | 19 |
1 files changed, 14 insertions, 5 deletions
| diff --git a/src/renderer.cpp b/src/renderer.cpp index 87bbbcd..e9db413 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
| @@ -35,6 +35,16 @@ Renderer::Renderer() { | |||
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | texture_ptr Renderer::renderMapLayer(const Map& map, int layer) { | 37 | texture_ptr Renderer::renderMapLayer(const Map& map, int layer) { |
| 38 | if (cachedTilesetName_ != map.getTilesetFilename()) { | ||
| 39 | surface_ptr pfs(IMG_Load(map.getTilesetFilename().c_str())); | ||
| 40 | if (!pfs) { | ||
| 41 | throw img_error(); | ||
| 42 | } | ||
| 43 | |||
| 44 | tilesetTex_ = texture_ptr(SDL_CreateTextureFromSurface(ren_.get(), pfs.get())); | ||
| 45 | cachedTilesetName_ = map.getTilesetFilename(); | ||
| 46 | } | ||
| 47 | |||
| 38 | vec2i mapBounds = map.getMapSize() * map.getTileSize(); | 48 | vec2i mapBounds = map.getMapSize() * map.getTileSize(); |
| 39 | 49 | ||
| 40 | texture_ptr canvas( | 50 | texture_ptr canvas( |
| @@ -77,7 +87,7 @@ texture_ptr Renderer::renderMapLayer(const Map& map, int layer) { | |||
| 77 | } else if (tile.flipVertical) { | 87 | } else if (tile.flipVertical) { |
| 78 | flip = SDL_FLIP_VERTICAL; | 88 | flip = SDL_FLIP_VERTICAL; |
| 79 | } | 89 | } |
| 80 | SDL_RenderCopyEx(ren_.get(), textures_[map.getTilesetTextureId()].get(), &srcRect, &destRect, 0, nullptr, flip); | 90 | SDL_RenderCopyEx(ren_.get(), tilesetTex_.get(), &srcRect, &destRect, 0, nullptr, flip); |
| 81 | } | 91 | } |
| 82 | } | 92 | } |
| 83 | 93 | ||
| @@ -85,10 +95,9 @@ texture_ptr Renderer::renderMapLayer(const Map& map, int layer) { | |||
| 85 | } | 95 | } |
| 86 | 96 | ||
| 87 | void Renderer::render(Game& game) { | 97 | void Renderer::render(Game& game) { |
| 88 | if (!renLay1_) { | 98 | if (cachedMapName_ != game.getMap().getName()) { |
| 99 | cachedMapName_ = game.getMap().getName(); | ||
| 89 | renLay1_ = renderMapLayer(game.getMap(), 0); | 100 | renLay1_ = renderMapLayer(game.getMap(), 0); |
| 90 | } | ||
| 91 | if (!renLay0_) { | ||
| 92 | renLay0_ = renderMapLayer(game.getMap(), 1); | 101 | renLay0_ = renderMapLayer(game.getMap(), 1); |
| 93 | } | 102 | } |
| 94 | 103 | ||
| @@ -118,7 +127,7 @@ void Renderer::render(Game& game) { | |||
| 118 | const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).at(sprite.animationFrame)); | 127 | const SpriteFrame& frame = sprite.frames.at(sprite.animations.at(sprite.animationId).at(sprite.animationFrame)); |
| 119 | const SDL_Rect& src = frame.srcRect; | 128 | const SDL_Rect& src = frame.srcRect; |
| 120 | SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() }; | 129 | SDL_Rect dest { sprite.loc.x() - frame.center.x(), sprite.loc.y() - frame.center.y(), frame.size.w(), frame.size.h() }; |
| 121 | SDL_RenderCopy(ren_.get(), textures_.at(sprite.textureId).get(), &src, &dest); | 130 | SDL_RenderCopy(ren_.get(), textures_.at(loadImageFromFile(sprite.spritesheet)).get(), &src, &dest); |
| 122 | } | 131 | } |
| 123 | } | 132 | } |
| 124 | 133 | ||
