diff --git a/src/Game.cpp b/src/Game.cpp index f17c008..24f2de4 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -114,8 +114,9 @@ void Game::run() } } - if (e.type == SDL_MOUSEBUTTONDOWN && e.button.button == 1) { + 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; } int mouse_x, mouse_y; diff --git a/src/Player.cpp b/src/Player.cpp index a4d8258..be28dc0 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -5,7 +5,8 @@ Player::Player(GameRenderer *renderer) : renderer(renderer) { hero_sprite = renderer->load_sprite("./assets/hero_front.png", 40, 40); - bow_sprite = renderer->load_sprite("./assets/bow_arrow.png", 22, 32); + bow_arrow_sprite = renderer->load_sprite("./assets/bow_arrow.png", 22, 32); + bow_sprite = renderer->load_sprite("./assets/bow.png", 22, 32); } void Player::draw() const @@ -17,7 +18,7 @@ void Player::draw() const ); renderer->draw_sprite_rotated( - *bow_sprite, + shooting_cooldown > 0 ? *bow_sprite : *bow_arrow_sprite, (int)(renderer->screen_width / 2 - bow_sprite->width / 2 + std::cos(angle) * 30), (int)(renderer->screen_height / 2 - bow_sprite->height / 2 + std::sin(angle) * 30), angle * 180 / std::numbers::pi @@ -28,4 +29,6 @@ void Player::update() { x += x_vel; y += y_vel; + + if (shooting_cooldown > 0) shooting_cooldown--; } diff --git a/src/Player.hpp b/src/Player.hpp index 8497055..7333671 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -8,7 +8,7 @@ class Player { private: GameRenderer *renderer; - std::unique_ptr hero_sprite, bow_sprite; + std::unique_ptr hero_sprite, bow_sprite, bow_arrow_sprite; public: double x = 0; @@ -19,6 +19,8 @@ public: double angle = 0.0; + int shooting_cooldown = 0; + static constexpr double speed = 1.5; Player(GameRenderer *renderer);