diff options
Diffstat (limited to 'src/renderer.cpp')
-rw-r--r-- | src/renderer.cpp | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/src/renderer.cpp b/src/renderer.cpp index 21c4746..befad8a 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp | |||
@@ -325,16 +325,11 @@ void Renderer::renderGame( | |||
325 | 325 | ||
326 | SDL_SetRenderTarget(ren_.get(), nullptr); | 326 | SDL_SetRenderTarget(ren_.get(), nullptr); |
327 | 327 | ||
328 | // TODO: this is just moving interp. we also need zoom | ||
329 | SDL_Rect zoomRect { | 328 | SDL_Rect zoomRect { |
330 | TILE_WIDTH, TILE_HEIGHT, (windowTileWidth - 2) * TILE_WIDTH, (windowTileHeight - 2) * TILE_HEIGHT | 329 | TILE_WIDTH, TILE_HEIGHT, (windowTileWidth - 2) * TILE_WIDTH, (windowTileHeight - 2) * TILE_HEIGHT |
331 | }; | 330 | }; |
332 | 331 | ||
333 | if (game.moving) { | 332 | if (game.moving) { |
334 | double interp = | ||
335 | static_cast<double>(game.zoomProgress) / | ||
336 | static_cast<double>(game.zoomLength); | ||
337 | |||
338 | if (game.player_x > game.player_oldx) { | 333 | if (game.player_x > game.player_oldx) { |
339 | zoomRect.x = game.moveProgress.getProgress(0, TILE_WIDTH); | 334 | zoomRect.x = game.moveProgress.getProgress(0, TILE_WIDTH); |
340 | } else if (game.player_x < game.player_oldx) { | 335 | } else if (game.player_x < game.player_oldx) { |
@@ -348,6 +343,37 @@ void Renderer::renderGame( | |||
348 | } | 343 | } |
349 | } | 344 | } |
350 | 345 | ||
346 | if (game.zooming) { | ||
347 | int oldWidth = game.oldZoom * ZOOM_X_FACTOR * TILE_WIDTH; | ||
348 | int oldHeight = game.oldZoom * ZOOM_Y_FACTOR * TILE_HEIGHT; | ||
349 | |||
350 | SDL_Rect oldRect { | ||
351 | zoomRect.w / 2 - oldWidth / 2, | ||
352 | zoomRect.h / 2 - oldHeight / 2, | ||
353 | oldWidth, | ||
354 | oldHeight | ||
355 | }; | ||
356 | |||
357 | if (game.moving) { | ||
358 | if (game.player_x > game.player_oldx) { | ||
359 | oldRect.x += game.moveProgress.getProgress(0, TILE_WIDTH); | ||
360 | } else if (game.player_x < game.player_oldx) { | ||
361 | oldRect.x -= game.moveProgress.getProgress(TILE_WIDTH, 0); | ||
362 | } | ||
363 | |||
364 | if (game.player_y > game.player_oldy) { | ||
365 | oldRect.y += game.moveProgress.getProgress(0, TILE_HEIGHT); | ||
366 | } else if (game.player_y < game.player_oldy) { | ||
367 | oldRect.y -= game.moveProgress.getProgress(TILE_HEIGHT, 0); | ||
368 | } | ||
369 | } | ||
370 | |||
371 | zoomRect.x = game.zoomProgress.getProgress(oldRect.x, zoomRect.x); | ||
372 | zoomRect.y = game.zoomProgress.getProgress(oldRect.y, zoomRect.y); | ||
373 | zoomRect.w = game.zoomProgress.getProgress(oldRect.w, zoomRect.w); | ||
374 | zoomRect.h = game.zoomProgress.getProgress(oldRect.h, zoomRect.h); | ||
375 | } | ||
376 | |||
351 | SDL_RenderCopy(ren_.get(), canvas.get(), &zoomRect, nullptr); | 377 | SDL_RenderCopy(ren_.get(), canvas.get(), &zoomRect, nullptr); |
352 | SDL_RenderPresent(ren_.get()); | 378 | SDL_RenderPresent(ren_.get()); |
353 | } | 379 | } |