Add shooting cooldown

This commit is contained in:
Reimar 2025-11-04 12:16:38 +01:00
parent 4d3300e111
commit c5ea2d8993
3 changed files with 10 additions and 4 deletions

View File

@ -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); arrows.emplace_back(player.x, player.y, player.angle);
player.shooting_cooldown = 40;
} }
int mouse_x, mouse_y; int mouse_x, mouse_y;

View File

@ -5,7 +5,8 @@
Player::Player(GameRenderer *renderer) : renderer(renderer) Player::Player(GameRenderer *renderer) : renderer(renderer)
{ {
hero_sprite = renderer->load_sprite("./assets/hero_front.png", 40, 40); 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 void Player::draw() const
@ -17,7 +18,7 @@ void Player::draw() const
); );
renderer->draw_sprite_rotated( 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_width / 2 - bow_sprite->width / 2 + std::cos(angle) * 30),
(int)(renderer->screen_height / 2 - bow_sprite->height / 2 + std::sin(angle) * 30), (int)(renderer->screen_height / 2 - bow_sprite->height / 2 + std::sin(angle) * 30),
angle * 180 / std::numbers::pi angle * 180 / std::numbers::pi
@ -28,4 +29,6 @@ void Player::update()
{ {
x += x_vel; x += x_vel;
y += y_vel; y += y_vel;
if (shooting_cooldown > 0) shooting_cooldown--;
} }

View File

@ -8,7 +8,7 @@ class Player
{ {
private: private:
GameRenderer *renderer; GameRenderer *renderer;
std::unique_ptr<Sprite> hero_sprite, bow_sprite; std::unique_ptr<Sprite> hero_sprite, bow_sprite, bow_arrow_sprite;
public: public:
double x = 0; double x = 0;
@ -19,6 +19,8 @@ public:
double angle = 0.0; double angle = 0.0;
int shooting_cooldown = 0;
static constexpr double speed = 1.5; static constexpr double speed = 1.5;
Player(GameRenderer *renderer); Player(GameRenderer *renderer);