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);
|
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
|
void Arrow::draw(const double player_x, const double player_y) const
|
||||||
{
|
{
|
||||||
renderer->draw_sprite_rotated(
|
renderer->draw_sprite_rotated(
|
||||||
|
|||||||
@ -19,6 +19,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
Arrow(GameRenderer *renderer, double x, double y, double angle);
|
Arrow(GameRenderer *renderer, double x, double y, double angle);
|
||||||
|
|
||||||
|
~Arrow();
|
||||||
|
|
||||||
void draw(double offset_x, double offset_y) const;
|
void draw(double offset_x, double offset_y) const;
|
||||||
|
|
||||||
void update();
|
void update();
|
||||||
|
|||||||
@ -23,7 +23,7 @@ void Game::update(std::stop_token stop_token)
|
|||||||
zombo.update(player.x, player.y);
|
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));
|
zombos.push_back(Zombo(&renderer, 20.0, 20.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,11 +45,11 @@ void Game::draw()
|
|||||||
|
|
||||||
map.draw(player.x, player.y);
|
map.draw(player.x, player.y);
|
||||||
|
|
||||||
for (const Zombo zombo : zombos) {
|
for (const Zombo &zombo : zombos) {
|
||||||
zombo.draw(player.x, player.y);
|
zombo.draw(player.x, player.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (const Arrow arrow : arrows) {
|
for (const Arrow &arrow : arrows) {
|
||||||
arrow.draw(player.x, player.y);
|
arrow.draw(player.x, player.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +109,7 @@ void Game::run()
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (e.type == SDL_MOUSEBUTTONDOWN && e.button.button == 1) {
|
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;
|
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
|
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 };
|
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;
|
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(Sprite sprite, int x, int y) const;
|
||||||
|
|
||||||
void draw_sprite_rotated(Sprite sprite, int x, int y, double angle) 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> Map::generate_tiles(const std::vector<Tile> &prev_tiles) const
|
||||||
{
|
{
|
||||||
std::vector<Tile> new_tiles = std::vector(prev_tiles.size(), Tile::grass);
|
std::vector<Tile> new_tiles = std::vector(prev_tiles.size(), Tile::grass);
|
||||||
|
|||||||
@ -24,6 +24,8 @@ public:
|
|||||||
|
|
||||||
Map(GameRenderer *renderer, int tile_size);
|
Map(GameRenderer *renderer, int tile_size);
|
||||||
|
|
||||||
|
~Map();
|
||||||
|
|
||||||
void draw(double player_x, double player_y) const;
|
void draw(double player_x, double player_y) const;
|
||||||
|
|
||||||
void check_bounds(double player_x, double player_y);
|
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);
|
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
|
void Player::draw() const
|
||||||
{
|
{
|
||||||
renderer->draw_sprite(
|
renderer->draw_sprite(
|
||||||
|
|||||||
@ -22,6 +22,8 @@ public:
|
|||||||
|
|
||||||
Player(GameRenderer *renderer);
|
Player(GameRenderer *renderer);
|
||||||
|
|
||||||
|
~Player();
|
||||||
|
|
||||||
void draw() const;
|
void draw() const;
|
||||||
|
|
||||||
void update();
|
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);
|
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)
|
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;
|
x += std::cos(angle) * speed;
|
||||||
else if (player_x < x) x_vel = -speed;
|
y += std::sin(angle) * speed;
|
||||||
|
|
||||||
if (player_y > y) y_vel = speed;
|
|
||||||
else if (player_y < y) y_vel = -speed;
|
|
||||||
|
|
||||||
x += x_vel;
|
|
||||||
y += y_vel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Zombo::draw(const double player_x, const double player_y) const
|
void Zombo::draw(const double player_x, const double player_y) const
|
||||||
|
|||||||
@ -18,6 +18,8 @@ private:
|
|||||||
public:
|
public:
|
||||||
Zombo(GameRenderer *renderer, double x, double y);
|
Zombo(GameRenderer *renderer, double x, double y);
|
||||||
|
|
||||||
|
~Zombo();
|
||||||
|
|
||||||
void update(double player_x, double player_y);
|
void update(double player_x, double player_y);
|
||||||
|
|
||||||
void draw(double player_x, double player_y) const;
|
void draw(double player_x, double player_y) const;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user