Destroy sprites on quit, other fixes
This commit is contained in:
parent
ce2113d910
commit
37dd9606cc
@ -8,6 +8,11 @@ Arrow::Arrow(GameRenderer *renderer, const double x, const double y, const doubl
|
||||
sprite = renderer->load_sprite("./assets/arrow.png", 22, 8);
|
||||
}
|
||||
|
||||
Arrow::~Arrow()
|
||||
{
|
||||
renderer->unload_sprite(sprite);
|
||||
}
|
||||
|
||||
void Arrow::draw(const double player_x, const double player_y) const
|
||||
{
|
||||
renderer->draw_sprite_rotated(
|
||||
|
||||
@ -19,6 +19,8 @@ private:
|
||||
public:
|
||||
Arrow(GameRenderer *renderer, double x, double y, double angle);
|
||||
|
||||
~Arrow();
|
||||
|
||||
void draw(double offset_x, double offset_y) const;
|
||||
|
||||
void update();
|
||||
|
||||
@ -23,7 +23,7 @@ void Game::update(std::stop_token stop_token)
|
||||
zombo.update(player.x, player.y);
|
||||
}
|
||||
|
||||
if (ticks % 100 == 0) {
|
||||
if (ticks % 100 == 0 && zombos.size() < 20) {
|
||||
zombos.push_back(Zombo(&renderer, 20.0, 20.0));
|
||||
}
|
||||
|
||||
@ -45,11 +45,11 @@ void Game::draw()
|
||||
|
||||
map.draw(player.x, player.y);
|
||||
|
||||
for (const Zombo zombo : zombos) {
|
||||
for (const Zombo &zombo : zombos) {
|
||||
zombo.draw(player.x, player.y);
|
||||
}
|
||||
|
||||
for (const Arrow arrow : arrows) {
|
||||
for (const Arrow &arrow : arrows) {
|
||||
arrow.draw(player.x, player.y);
|
||||
}
|
||||
|
||||
@ -109,7 +109,7 @@ void Game::run()
|
||||
}
|
||||
|
||||
if (e.type == SDL_MOUSEBUTTONDOWN && e.button.button == 1) {
|
||||
arrows.push_back(Arrow(&renderer, player.x, player.y, player.angle));
|
||||
arrows.emplace_back(&renderer, player.x, player.y, player.angle);
|
||||
}
|
||||
|
||||
int mouse_x, mouse_y;
|
||||
|
||||
@ -48,6 +48,11 @@ Sprite GameRenderer::load_sprite(const std::string &file, const int width, const
|
||||
};
|
||||
}
|
||||
|
||||
void GameRenderer::unload_sprite(const Sprite &sprite)
|
||||
{
|
||||
SDL_DestroyTexture(sprite.texture);
|
||||
}
|
||||
|
||||
void GameRenderer::draw_sprite(const Sprite sprite, const int x, const int y) const
|
||||
{
|
||||
const SDL_Rect rect = { .x = x, .y = y, .w = sprite.width, .h = sprite.height };
|
||||
|
||||
@ -23,6 +23,8 @@ public:
|
||||
|
||||
Sprite load_sprite(const std::string &file, int width, int height) const;
|
||||
|
||||
void unload_sprite(const Sprite &sprite);
|
||||
|
||||
void draw_sprite(Sprite sprite, int x, int y) const;
|
||||
|
||||
void draw_sprite_rotated(Sprite sprite, int x, int y, double angle) const;
|
||||
|
||||
@ -28,6 +28,12 @@ Map::Map(GameRenderer *renderer, int tile_size) :
|
||||
}
|
||||
}
|
||||
|
||||
Map::~Map()
|
||||
{
|
||||
renderer->unload_sprite(grass_sprite);
|
||||
renderer->unload_sprite(path_sprite);
|
||||
}
|
||||
|
||||
std::vector<Tile> Map::generate_tiles(const std::vector<Tile> &prev_tiles) const
|
||||
{
|
||||
std::vector<Tile> new_tiles = std::vector(prev_tiles.size(), Tile::grass);
|
||||
|
||||
@ -24,6 +24,8 @@ public:
|
||||
|
||||
Map(GameRenderer *renderer, int tile_size);
|
||||
|
||||
~Map();
|
||||
|
||||
void draw(double player_x, double player_y) const;
|
||||
|
||||
void check_bounds(double player_x, double player_y);
|
||||
|
||||
@ -8,6 +8,12 @@ Player::Player(GameRenderer *renderer) : renderer(renderer)
|
||||
bow_sprite = renderer->load_sprite("./assets/bow_arrow.png", 22, 32);
|
||||
}
|
||||
|
||||
Player::~Player()
|
||||
{
|
||||
renderer->unload_sprite(hero_sprite);
|
||||
renderer->unload_sprite(bow_sprite);
|
||||
}
|
||||
|
||||
void Player::draw() const
|
||||
{
|
||||
renderer->draw_sprite(
|
||||
|
||||
@ -22,6 +22,8 @@ public:
|
||||
|
||||
Player(GameRenderer *renderer);
|
||||
|
||||
~Player();
|
||||
|
||||
void draw() const;
|
||||
|
||||
void update();
|
||||
|
||||
@ -5,18 +5,17 @@ Zombo::Zombo(GameRenderer *renderer, const double x, const double y) : renderer(
|
||||
sprite = renderer->load_sprite("./assets/zombo.png", 40, 40);
|
||||
}
|
||||
|
||||
Zombo::~Zombo()
|
||||
{
|
||||
renderer->unload_sprite(sprite);
|
||||
}
|
||||
|
||||
void Zombo::update(const double player_x, const double player_y)
|
||||
{
|
||||
double x_vel = 0, y_vel = 0;
|
||||
double angle = std::atan2(player_y - y, player_x - x);
|
||||
|
||||
if (player_x > x) x_vel = speed;
|
||||
else if (player_x < x) x_vel = -speed;
|
||||
|
||||
if (player_y > y) y_vel = speed;
|
||||
else if (player_y < y) y_vel = -speed;
|
||||
|
||||
x += x_vel;
|
||||
y += y_vel;
|
||||
x += std::cos(angle) * speed;
|
||||
y += std::sin(angle) * speed;
|
||||
}
|
||||
|
||||
void Zombo::draw(const double player_x, const double player_y) const
|
||||
|
||||
@ -18,6 +18,8 @@ private:
|
||||
public:
|
||||
Zombo(GameRenderer *renderer, double x, double y);
|
||||
|
||||
~Zombo();
|
||||
|
||||
void update(double player_x, double player_y);
|
||||
|
||||
void draw(double player_x, double player_y) const;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user