From d46ee05126c8971ca659d1cade03a5a3a5aebbb4 Mon Sep 17 00:00:00 2001 From: Reimar Date: Mon, 27 Oct 2025 10:30:03 +0100 Subject: [PATCH] Add bow --- src/Game.cpp | 4 ++++ src/GameRenderer.cpp | 5 ++--- src/GameRenderer.hpp | 2 +- src/Player.cpp | 8 ++++++++ src/Player.hpp | 4 +++- 5 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/Game.cpp b/src/Game.cpp index e85f481..2192ca1 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -87,6 +87,10 @@ void Game::run() } } + int mouse_x, mouse_y; + SDL_GetMouseState(&mouse_x, &mouse_y); + player.angle = std::atan2(mouse_y - renderer.screen_height / 2, mouse_x - renderer.screen_width / 2); + draw(); } } diff --git a/src/GameRenderer.cpp b/src/GameRenderer.cpp index d897bbc..c08ae72 100644 --- a/src/GameRenderer.cpp +++ b/src/GameRenderer.cpp @@ -54,11 +54,10 @@ void GameRenderer::draw_sprite(const Sprite sprite, const int x, const int y) co SDL_RenderCopy(renderer, sprite.texture, nullptr, &rect); } -void GameRenderer::draw_sprite_rotated(const Sprite sprite, const int x, const int y, const double angle, const int center_x, const int center_y) const +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 }; - const SDL_Point center = { .x = center_x, .y = center_y }; - SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, angle, ¢er, SDL_FLIP_NONE); + SDL_RenderCopyEx(renderer, sprite.texture, nullptr, &rect, angle, nullptr, SDL_FLIP_NONE); } void GameRenderer::clear_screen(const int r, const int g, const int b, const int a) const diff --git a/src/GameRenderer.hpp b/src/GameRenderer.hpp index c4770a8..6cde332 100644 --- a/src/GameRenderer.hpp +++ b/src/GameRenderer.hpp @@ -25,7 +25,7 @@ public: void draw_sprite(Sprite sprite, int x, int y) const; - void draw_sprite_rotated(Sprite sprite, int x, int y, double angle, int center_x, int center_y) const; + void draw_sprite_rotated(Sprite sprite, int x, int y, double angle) const; void clear_screen(int r, int g, int b, int a) const; diff --git a/src/Player.cpp b/src/Player.cpp index 57bc8f0..cf2a237 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -4,6 +4,7 @@ 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); } void Player::draw() const @@ -13,6 +14,13 @@ void Player::draw() const renderer->screen_width / 2 - hero_sprite.width / 2, renderer->screen_height / 2 - hero_sprite.height / 2 ); + + renderer->draw_sprite_rotated( + bow_sprite, + renderer->screen_width / 2 - bow_sprite.width / 2 + std::cos(angle) * 30, + renderer->screen_height / 2 - bow_sprite.height / 2 + std::sin(angle) * 30, + angle * 180 / M_PI + ); } void Player::update() diff --git a/src/Player.hpp b/src/Player.hpp index a887d05..6932f1e 100644 --- a/src/Player.hpp +++ b/src/Player.hpp @@ -7,7 +7,7 @@ class Player { private: GameRenderer *renderer; - Sprite hero_sprite; + Sprite hero_sprite, bow_sprite; public: double x = 0; @@ -16,6 +16,8 @@ public: double x_vel = 0; double y_vel = 0; + double angle = 0.0; + const double speed = 1.5; Player(GameRenderer *renderer);