summary refs log tree commit diff stats
path: root/src/renderer.cpp
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2022-03-12 14:12:42 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2022-03-12 14:12:42 -0500
commit4b6e5eb5d3e0733c239a7a231da91a9977c38246 (patch)
tree90b18271f180c56efc9995458714b2b0aa3725fc /src/renderer.cpp
parentbe9ccb73bc20b03f62c77f5d529602a10ef4eda9 (diff)
downloadether-4b6e5eb5d3e0733c239a7a231da91a9977c38246.tar.gz
ether-4b6e5eb5d3e0733c239a7a231da91a9977c38246.tar.bz2
ether-4b6e5eb5d3e0733c239a7a231da91a9977c38246.zip
dynamic wall and floor textures
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r--src/renderer.cpp80
1 files changed, 66 insertions, 14 deletions
diff --git a/src/renderer.cpp b/src/renderer.cpp index 0aaa14a..00b557a 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp
@@ -122,6 +122,18 @@ Renderer::Renderer()
122 } 122 }
123 123
124 SDL_SetTextureBlendMode(playerSheet_.get(), SDL_BLENDMODE_BLEND); 124 SDL_SetTextureBlendMode(playerSheet_.get(), SDL_BLENDMODE_BLEND);
125
126 {
127 surface_ptr pfs(IMG_Load("../res/runninbloods.png"));
128 if (!pfs)
129 {
130 throw img_error();
131 }
132
133 tileset_ = texture_ptr(SDL_CreateTextureFromSurface(ren_.get(), pfs.get()));
134 }
135
136 SDL_SetTextureBlendMode(tileset_.get(), SDL_BLENDMODE_BLEND);
125} 137}
126 138
127void Renderer::render( 139void Renderer::render(
@@ -151,12 +163,19 @@ void Renderer::render(
151 for (int x = game.map.getLeft(); x < game.map.getRight(); x++) 163 for (int x = game.map.getLeft(); x < game.map.getRight(); x++)
152 { 164 {
153 bool draw = true; 165 bool draw = true;
166 bool drawColour = false;
167 SDL_Rect rect {
168 game.map.getTrueX(x) * TILE_WIDTH,
169 game.map.getTrueY(y) * TILE_HEIGHT,
170 TILE_WIDTH,
171 TILE_HEIGHT};
154 172
155 if (!game.map.at(x,y).lit) 173 if (!game.map.at(x,y).lit)
156 { 174 {
157 if (drawDark) 175 if (drawDark)
158 { 176 {
159 SDL_SetRenderDrawColor(ren_.get(), 40, 40, 40, 255); 177 SDL_SetRenderDrawColor(ren_.get(), 40, 40, 40, 255);
178 drawColour = true;
160 } else { 179 } else {
161 draw = false; 180 draw = false;
162 } 181 }
@@ -186,6 +205,7 @@ void Renderer::render(
186 case Tile::Lamp: 205 case Tile::Lamp:
187 { 206 {
188 SDL_SetRenderDrawColor(ren_.get(), 0, 255, 255, alpha); 207 SDL_SetRenderDrawColor(ren_.get(), 0, 255, 255, alpha);
208 drawColour = true;
189 break; 209 break;
190 } 210 }
191 } 211 }
@@ -193,22 +213,47 @@ void Renderer::render(
193 213
194 if (draw) 214 if (draw)
195 { 215 {
196 SDL_Rect rect { 216 if (game.map.at(x,y).tile == Tile::Floor || game.map.at(x,y).tile == Tile::Dust) {
197 game.map.getTrueX(x) * TILE_WIDTH, 217 SDL_Rect tileRect {17 * 16, 15 * 16, 16, 16};
198 game.map.getTrueY(y) * TILE_HEIGHT, 218 SDL_RenderCopy(ren_.get(), tileset_.get(), &tileRect, &rect);
199 TILE_WIDTH, 219
200 TILE_HEIGHT}; 220 if (game.map.at(x,y).renderId != -1) {
201 221 tileRect.x = game.map.at(x,y).renderId % 24 * 16;
202 SDL_RenderFillRect(ren_.get(), &rect); 222 tileRect.y = game.map.at(x,y).renderId / 24 * 16;
223 SDL_RenderCopy(ren_.get(), tileset_.get(), &tileRect, &rect);
224 }
225 } else if (game.map.at(x,y).tile == Tile::Wall) {
226 SDL_Rect tileRect {
227 game.map.at(x,y).renderId % 24 * 16,
228 game.map.at(x,y).renderId / 24 * 16,
229 16,
230 16};
231
232 SDL_RenderCopy(ren_.get(), tileset_.get(), &tileRect, &rect);
233 }
203 234
204 if ((game.player_x == x && game.player_y == y) && game.renderPlayer) 235 if (drawColour) {
205 { 236 SDL_RenderFillRect(ren_.get(), &rect);
206 SDL_RenderCopy(ren_.get(), playerSheet_.get(), &game.playerAnim.getRenderRect(), &rect);
207 } 237 }
208 } 238 }
209 } 239 }
210 } 240 }
211 241
242 if (game.renderPlayer) {
243 SDL_Rect rect {
244 game.map.getTrueX(game.player_x) * TILE_WIDTH,
245 game.map.getTrueY(game.player_y) * TILE_HEIGHT,
246 TILE_WIDTH,
247 TILE_HEIGHT};
248
249 if (game.moving) {
250 rect.x = game.moveProgress.getProgress(game.map.getTrueX(game.player_oldx) * TILE_WIDTH, rect.x);
251 rect.y = game.moveProgress.getProgress(game.map.getTrueY(game.player_oldy) * TILE_HEIGHT, rect.y);
252 }
253
254 SDL_RenderCopy(ren_.get(), playerSheet_.get(), &game.playerAnim.getRenderRect(), &rect);
255 }
256
212 texture_ptr mask( 257 texture_ptr mask(
213 SDL_CreateTexture( 258 SDL_CreateTexture(
214 ren_.get(), 259 ren_.get(),
@@ -250,10 +295,17 @@ void Renderer::render(
250 SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0); 295 SDL_SetRenderDrawColor(ren_.get(), 0, 0, 0, 0);
251 SDL_RenderClear(ren_.get()); 296 SDL_RenderClear(ren_.get());
252 297
253 int fadeX = game.map.getTrueX(x) - game.map.at(x,y).lightRadius; 298 int posToUseX = game.map.getTrueX(x);
254 int fadeY = game.map.getTrueY(y) - game.map.at(x,y).lightRadius; 299 int posToUseY = game.map.getTrueY(y);
255 int fadeRight = game.map.getTrueX(x) + game.map.at(x,y).lightRadius; 300 if (game.map.at(x,y).lightType == Source::Player && game.moving) {
256 int fadeBottom = game.map.getTrueY(y) + game.map.at(x,y).lightRadius; 301 posToUseX = game.moveProgress.getProgress(game.map.getTrueX(game.player_oldx), posToUseX);
302 posToUseY = game.moveProgress.getProgress(game.map.getTrueY(game.player_oldy), posToUseY);
303 }
304
305 int fadeX = posToUseX - game.map.at(x,y).lightRadius;
306 int fadeY = posToUseY - game.map.at(x,y).lightRadius;
307 int fadeRight = posToUseX + game.map.at(x,y).lightRadius;
308 int fadeBottom = posToUseY + game.map.at(x,y).lightRadius;
257 309
258 SDL_Rect fadeRect { 310 SDL_Rect fadeRect {
259 fadeX * TILE_WIDTH, 311 fadeX * TILE_WIDTH,