Remove arrows when out of bounds

This commit is contained in:
Reimar 2025-11-04 14:02:08 +01:00
parent c5ea2d8993
commit d2718ca045
3 changed files with 18 additions and 4 deletions

View File

@ -1,20 +1,18 @@
#ifndef ARROW_HPP
#define ARROW_HPP
#include <memory>
#include "GameRenderer.hpp"
#include "Sprite.hpp"
class Arrow
{
private:
public:
double x;
double y;
double angle;
static constexpr int speed = 5;
public:
Arrow(double x, double y, double angle) : x(x), y(y), angle(angle) {}
void draw(const GameRenderer *renderer, const Sprite &sprite, double player_x, double player_y) const;

View File

@ -25,6 +25,21 @@ void Game::update(std::stop_token stop_token)
arrow.update();
}
std::erase_if(arrows, [this](const Arrow &arrow) {
if (arrow.x < map.tile_offset_x * map.tile_size || arrow.y < map.tile_offset_x * map.tile_size) {
return true;
}
if (
arrow.x > (double)map.tiles.size() * map.tile_size + map.tile_offset_x ||
arrow.y > (double)map.tiles[0].size() * map.tile_size + map.tile_offset_y
) {
return true;
}
return false;
});
for (Zombo &zombo : zombos) {
zombo.update(player.x, player.y);
}

View File

@ -11,7 +11,6 @@ class Map
{
private:
GameRenderer *renderer;
std::vector<std::vector<Tile>> tiles;
std::unique_ptr<Sprite> grass_sprite, path_sprite;
@ -22,6 +21,8 @@ public:
double tile_offset_y;
int tile_size;
std::vector<std::vector<Tile>> tiles;
Map(GameRenderer *renderer, int tile_size);
~Map() = default;