diff options
author | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-09 22:28:27 -0500 |
---|---|---|
committer | Kelly Rauchenberger <fefferburbia@gmail.com> | 2021-02-09 22:28:27 -0500 |
commit | 5931470800c43260f600303d1231dbaf586f26fc (patch) | |
tree | aaaa30ee6bae81c1badc8b70d2fbdce33a058d5a /src/renderer.cpp | |
parent | 315ca2fb388f790791c9ce372cf44e00d51e0e7f (diff) | |
download | tanetane-5931470800c43260f600303d1231dbaf586f26fc.tar.gz tanetane-5931470800c43260f600303d1231dbaf586f26fc.tar.bz2 tanetane-5931470800c43260f600303d1231dbaf586f26fc.zip |
Map changing!
Also removed some dependencies on the Renderer. More changes need to be made. Fading to black before the change would be good. And making sure the characters are facing the right direction. Maybe that code shouldn't live in Game, either. Later we also want to combine the tilesets for these two maps (and any others that are on Tanetane).
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 | ||