diff --git a/src/Arrow.cpp b/src/Arrow.cpp index e1ed310..f0c6161 100644 --- a/src/Arrow.cpp +++ b/src/Arrow.cpp @@ -1,20 +1,13 @@ #include #include -#include #include "Arrow.hpp" -Arrow::Arrow(GameRenderer *renderer, const double x, const double y, const double angle) - : renderer(renderer), x(x), y(y), angle(angle) -{ - sprite = renderer->load_sprite("./assets/arrow.png", 22, 8); -} - -void Arrow::draw(const double player_x, const double player_y) const +void Arrow::draw(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y) const { renderer->draw_sprite_rotated( - *sprite, - (int)(x - sprite->width / 2 + renderer->screen_width / 2 - player_x), - (int)(y - sprite->height / 2 + renderer->screen_height / 2 - player_y), + sprite, + (int)(x - sprite.width / 2 + renderer->screen_width / 2 - player_x), + (int)(y - sprite.height / 2 + renderer->screen_height / 2 - player_y), angle * 180 / std::numbers::pi ); } diff --git a/src/Arrow.hpp b/src/Arrow.hpp index d2f7f09..0619d40 100644 --- a/src/Arrow.hpp +++ b/src/Arrow.hpp @@ -8,9 +8,6 @@ class Arrow { private: - GameRenderer *renderer; - std::unique_ptr sprite; - double x; double y; double angle; @@ -18,9 +15,9 @@ private: static constexpr int speed = 5; public: - Arrow(GameRenderer *renderer, double x, double y, double angle); + Arrow(double x, double y, double angle) : x(x), y(y), angle(angle) {} - void draw(double offset_x, double offset_y) const; + void draw(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y) const; void update(); }; diff --git a/src/Game.cpp b/src/Game.cpp index c4dfd5b..b5d1e1e 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -6,6 +6,12 @@ using namespace std::literals::chrono_literals; +Game::Game() : renderer("Zombo Shooter", 800, 450), player(&renderer), map(&renderer, 40) +{ + arrow_sprite = renderer.load_sprite("./assets/arrow.png", 22, 8); + zombo_sprite = renderer.load_sprite("./assets/zombo.png", 40, 40); +} + void Game::update(std::stop_token stop_token) { while (!stop_token.stop_requested()) { @@ -24,7 +30,7 @@ void Game::update(std::stop_token stop_token) } if (ticks % 100 == 0 && zombos.size() < 20) { - zombos.emplace_back(&renderer, 20.0, 20.0); + zombos.emplace_back(20.0, 20.0); } renderer.redraw(); @@ -46,11 +52,11 @@ void Game::draw() map.draw(player.x, player.y); for (const Zombo &zombo : zombos) { - zombo.draw(player.x, player.y); + zombo.draw(&renderer, *zombo_sprite, player.x, player.y); } for (const Arrow &arrow : arrows) { - arrow.draw(player.x, player.y); + arrow.draw(&renderer, *arrow_sprite, player.x, player.y); } player.draw(); @@ -109,7 +115,7 @@ void Game::run() } if (e.type == SDL_MOUSEBUTTONDOWN && e.button.button == 1) { - arrows.emplace_back(&renderer, player.x, player.y, player.angle); + arrows.emplace_back(player.x, player.y, player.angle); } int mouse_x, mouse_y; diff --git a/src/Game.hpp b/src/Game.hpp index 9b423b8..4fe3bef 100644 --- a/src/Game.hpp +++ b/src/Game.hpp @@ -17,6 +17,7 @@ private: Map map; std::vector arrows; std::vector zombos; + std::unique_ptr arrow_sprite, zombo_sprite; std::mutex game_mutex; unsigned int ticks = 0; @@ -24,7 +25,7 @@ private: void update(std::stop_token stop_token); public: - Game() : renderer("Zombo Shooter", 800, 450), player(&renderer), map(&renderer, 40) {} + Game(); ~Game() = default; diff --git a/src/Sprite.cpp b/src/Sprite.cpp index bfc71ef..9f211c0 100644 --- a/src/Sprite.cpp +++ b/src/Sprite.cpp @@ -1,7 +1,6 @@ #include #include #include "Sprite.hpp" -#include Sprite::Sprite(SDL_Renderer *renderer, const std::string &file, int width, int height) : width(width), height(height) { diff --git a/src/Zombo.cpp b/src/Zombo.cpp index 38d0802..3e22afb 100644 --- a/src/Zombo.cpp +++ b/src/Zombo.cpp @@ -1,10 +1,5 @@ #include "Zombo.hpp" -Zombo::Zombo(GameRenderer *renderer, const double x, const double y) : renderer(renderer), x(x), y(y) -{ - sprite = renderer->load_sprite("./assets/zombo.png", 40, 40); -} - void Zombo::update(const double player_x, const double player_y) { double angle = std::atan2(player_y - y, player_x - x); @@ -13,11 +8,11 @@ void Zombo::update(const double player_x, const double player_y) y += std::sin(angle) * speed; } -void Zombo::draw(const double player_x, const double player_y) const +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.0 + renderer->screen_width / 2.0 - player_x), - (int)(y - sprite->height / 2.0 + renderer->screen_height / 2.0 - player_y) + sprite, + (int)(x - sprite.width / 2 + renderer->screen_width / 2 - player_x), + (int)(y - sprite.height / 2 + renderer->screen_height / 2 - player_y) ); } diff --git a/src/Zombo.hpp b/src/Zombo.hpp index 16e113c..2eaac1b 100644 --- a/src/Zombo.hpp +++ b/src/Zombo.hpp @@ -8,20 +8,17 @@ class Zombo { private: - GameRenderer *renderer; - std::unique_ptr sprite; - double x; double y; static constexpr double speed = 0.5; public: - Zombo(GameRenderer *renderer, double x, double y); + Zombo(const double x, const double y) : x(x), y(y) {} void update(double player_x, double player_y); - void draw(double player_x, double player_y) const; + void draw(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y) const; }; #endif