diff --git a/src/GameRenderer.cpp b/src/GameRenderer.cpp index f958992..379b15f 100644 --- a/src/GameRenderer.cpp +++ b/src/GameRenderer.cpp @@ -51,6 +51,12 @@ void GameRenderer::draw_sprite(const Sprite &sprite, const int x, const int y) c SDL_RenderCopy(renderer, sprite.texture, nullptr, &rect); } +void GameRenderer::draw_sprite_flipped(const Sprite &sprite, const int x, const int y) const +{ + const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height }; + SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, 0, nullptr, SDL_FLIP_HORIZONTAL); +} + void GameRenderer::draw_sprite_rotated(const Sprite &sprite, const int x, const int y, const double angle) const { const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height }; diff --git a/src/GameRenderer.hpp b/src/GameRenderer.hpp index 1e8fd3d..41acd15 100644 --- a/src/GameRenderer.hpp +++ b/src/GameRenderer.hpp @@ -26,6 +26,8 @@ public: void draw_sprite(const Sprite &sprite, int x, int y) const; + void draw_sprite_flipped(const Sprite &sprite, int x, int y) const; + void draw_sprite_rotated(const Sprite &sprite, int x, int y, double angle) const; void clear_screen(uint8_t r, uint8_t g, uint8_t b, uint8_t a) const; diff --git a/src/Zombo.cpp b/src/Zombo.cpp index 3e22afb..84608bd 100644 --- a/src/Zombo.cpp +++ b/src/Zombo.cpp @@ -10,9 +10,11 @@ void Zombo::update(const double player_x, const double player_y) void Zombo::draw(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y) const { - renderer->draw_sprite( - sprite, - (int)(x - sprite.width / 2 + renderer->screen_width / 2 - player_x), - (int)(y - sprite.height / 2 + renderer->screen_height / 2 - player_y) - ); + int draw_x = (int)(x - sprite.width / 2 + renderer->screen_width / 2 - player_x); + int draw_y = (int)(y - sprite.height / 2 + renderer->screen_height / 2 - player_y); + + if (x < player_x) + renderer->draw_sprite(sprite, draw_x, draw_y); + else + renderer->draw_sprite_flipped(sprite, draw_x, draw_y); }