From 8513b2dad0ec43678f17cca0510db4d1a938279a Mon Sep 17 00:00:00 2001 From: heavydemon21 Date: Fri, 22 Nov 2024 17:08:55 +0100 Subject: working moving camera, flip animations, resizing with animations, and black bars --- src/crepe/facade/SDLContext.cpp | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) (limited to 'src/crepe/facade/SDLContext.cpp') diff --git a/src/crepe/facade/SDLContext.cpp b/src/crepe/facade/SDLContext.cpp index f49539c..29a8195 100644 --- a/src/crepe/facade/SDLContext.cpp +++ b/src/crepe/facade/SDLContext.cpp @@ -5,11 +5,9 @@ #include #include #include -#include #include #include #include -#include #include #include @@ -109,21 +107,24 @@ SDL_Rect SDLContext::get_src_rect(const Sprite & sprite) const { .h = sprite.sprite_rect.h, }; } -SDL_Rect SDLContext::get_dst_rect(const Sprite & sprite, const Vector2 & pos, - const Vector2 & scale) const { +SDL_Rect SDLContext::get_dst_rect(const Sprite & sprite, const Vector2 & pos, const Vector2 & cam_pos, + const double & img_scale, const Vector2 & cam_scale) const { int pixel_width, pixel_height; if (sprite.sprite_rect.w > sprite.sprite_rect.h) { - pixel_width = static_cast(sprite.width * scale.x); + pixel_width = static_cast(sprite.width * cam_scale.x); pixel_height = static_cast(pixel_width / sprite.aspect_ratio); } else { - pixel_height = static_cast(sprite.height * scale.y); + pixel_height = static_cast(sprite.height * cam_scale.y); pixel_width = static_cast(pixel_height * sprite.aspect_ratio); } - int pixel_x = static_cast((pos.x - pixel_width / 2)); - int pixel_y = static_cast((pos.y - pixel_height / 2)); + pixel_width *= img_scale; + pixel_height *= img_scale; + + int pixel_x = static_cast((pos.x - cam_pos.x - pixel_width / 2)); + int pixel_y = static_cast((pos.y - cam_pos.y - pixel_height / 2)); return SDL_Rect{ .x = pixel_x, @@ -134,27 +135,27 @@ SDL_Rect SDLContext::get_dst_rect(const Sprite & sprite, const Vector2 & pos, } void SDLContext::draw_particle(const Sprite & sprite, const Vector2 & pos, - const double & angle, const Vector2 & scale) { + const double & angle, const Vector2 & cam_pos, const double & img_scale, const Vector2 & cam_scale) { SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); SDL_Rect srcrect = this->get_src_rect(sprite); - SDL_Rect dstrect = this->get_dst_rect(sprite, pos, scale); + SDL_Rect dstrect = this->get_dst_rect(sprite, pos, cam_pos, img_scale, cam_scale); SDL_RenderCopyEx(this->game_renderer.get(), sprite.sprite_image->texture.get(), &srcrect, &dstrect, angle, NULL, render_flip); } -void SDLContext::draw(const Sprite & sprite, const Transform & transform, const Vector2 & scale) { +void SDLContext::draw(const Sprite & sprite, const Transform & transform, const Vector2 & cam_pos, const Vector2 & cam_scale) { SDL_RendererFlip render_flip = (SDL_RendererFlip) ((SDL_FLIP_HORIZONTAL * sprite.flip.flip_x) | (SDL_FLIP_VERTICAL * sprite.flip.flip_y)); SDL_Rect srcrect = this->get_src_rect(sprite); - SDL_Rect dstrect = this->get_dst_rect(sprite, transform.position, scale); + SDL_Rect dstrect = this->get_dst_rect(sprite, transform.position, cam_pos, transform.scale, cam_scale); SDL_RenderCopyEx(this->game_renderer.get(), sprite.sprite_image->texture.get(), &srcrect, &dstrect, transform.rotation, NULL, render_flip); -- cgit v1.2.3