summary refs log tree commit diff stats
path: root/src/renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r--src/renderer.cpp19
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
37texture_ptr Renderer::renderMapLayer(const Map& map, int layer) { 37texture_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
87void Renderer::render(Game& game) { 97void 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