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