From 9b15ebc1a58f2338ab9cc9753ad55a70f0945d92 Mon Sep 17 00:00:00 2001 From: Reimar Date: Wed, 5 Nov 2025 12:07:16 +0100 Subject: [PATCH] Add zombo hp bar --- src/Game.cpp | 7 +++++-- src/GameRenderer.cpp | 8 ++++++++ src/GameRenderer.hpp | 2 ++ src/Zombo.cpp | 5 +++++ src/Zombo.hpp | 3 ++- 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index 8c746c6..c2f00a6 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -55,9 +55,12 @@ void Game::update(std::stop_token stop_token) arrow.x > zombo.x && arrow.x < zombo.x + zombo_sprite->width && arrow.y > zombo.y && arrow.y < zombo.y + zombo_sprite->height ) { + zombo.hp--; + zombo.x += std::cos(arrow.angle) * 8; + zombo.y += std::sin(arrow.angle) * 8; + std::erase(arrows, arrow); - zombo.hp--; if (zombo.hp == 0) { std::erase(zombos, zombo); player.gold += 10; @@ -159,7 +162,7 @@ void Game::run() if (e.type == SDL_MOUSEBUTTONDOWN && e.button.button == 1 && player.shooting_cooldown == 0) { arrows.emplace_back(player.x, player.y, player.angle); - player.shooting_cooldown = 40; + player.shooting_cooldown = 20; } int mouse_x, mouse_y; diff --git a/src/GameRenderer.cpp b/src/GameRenderer.cpp index ec1f1a1..3df2e5d 100644 --- a/src/GameRenderer.cpp +++ b/src/GameRenderer.cpp @@ -89,6 +89,14 @@ void GameRenderer::draw_sprite_rotated(const Sprite &sprite, const int x, const SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, angle, nullptr, SDL_FLIP_NONE); } +void GameRenderer::draw_rect(int x, int y, int width, int height, Color color) const +{ + SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); + + const SDL_Rect rect = { .x = x, .y = y, .w = width, .h = height }; + SDL_RenderFillRect(renderer, &rect); +} + void GameRenderer::clear_screen(Color color) const { SDL_SetRenderDrawColor(renderer, color.r, color.g, color.b, color.a); diff --git a/src/GameRenderer.hpp b/src/GameRenderer.hpp index 4254716..108e03e 100644 --- a/src/GameRenderer.hpp +++ b/src/GameRenderer.hpp @@ -40,6 +40,8 @@ public: void draw_sprite_rotated(const Sprite &sprite, int x, int y, double angle) const; + void draw_rect(int x, int y, int width, int height, Color color) const; + void clear_screen(Color color) const; void flush() const; diff --git a/src/Zombo.cpp b/src/Zombo.cpp index d2ecba1..7b0511d 100644 --- a/src/Zombo.cpp +++ b/src/Zombo.cpp @@ -33,4 +33,9 @@ void Zombo::draw(const GameRenderer *renderer, const Sprite &sprite, double play renderer->draw_sprite(sprite, draw_x, draw_y); else renderer->draw_sprite_flipped(sprite, draw_x, draw_y); + + if (hp < max_hp) { + renderer->draw_rect(draw_x, draw_y - 10, sprite.width, 5, rgb(0, 0, 0)); + renderer->draw_rect(draw_x, draw_y - 10, hp * sprite.width / max_hp, 5, rgb(255, 0, 0)); + } } diff --git a/src/Zombo.hpp b/src/Zombo.hpp index f939484..9462482 100644 --- a/src/Zombo.hpp +++ b/src/Zombo.hpp @@ -9,8 +9,9 @@ class Zombo public: double x; double y; - int hp = 3; + int hp = max_hp; + static constexpr int max_hp = 3; static constexpr double speed = 0.5; Zombo(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y);