Skip to content

Commit 19bc668

Browse files
committed
Add simple collision detection
and enemy removal
1 parent 26b9323 commit 19bc668

File tree

3 files changed

+17
-3
lines changed

3 files changed

+17
-3
lines changed

src/enemy.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77

88
namespace miracle {
99
Enemy::Enemy(gsl::not_null<le::ServiceLocator const*> services, glm::vec2 target_pos, float move_speed)
10-
: m_services(services), m_target_pos(target_pos), m_move_speed(move_speed) {
11-
m_sprite.create(50.0f, kvf::red_v);
10+
: m_services(services), m_target_pos(target_pos), m_move_speed(move_speed), m_diameter(util::random_range(40.0f, 60.0f)) {
11+
m_sprite.create(m_diameter, kvf::red_v);
1212
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
1313
auto const radius = static_cast<float>(std::max(framebuffer_size.x, framebuffer_size.y)) / 2.0f;
1414

@@ -24,4 +24,8 @@ void Enemy::translate(kvf::Seconds const dt) {
2424
m_sprite.transform.position += movement;
2525
}
2626

27+
void Enemy::check_collision(glm::vec2 pos, float radius) {
28+
if (glm::distance(pos, m_sprite.transform.position) < radius + m_diameter / 2) { m_health = 0; }
29+
}
30+
2731
} // namespace miracle

src/enemy.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,17 @@ class Enemy {
1717

1818
void render(le::Renderer& renderer) const;
1919
void translate(kvf::Seconds dt);
20+
// There are temporary parameters, will take the light beam object once it is created
21+
void check_collision(glm::vec2 pos, float radius);
22+
[[nodiscard]] std::size_t get_health() const { return m_health; }
2023

2124
private:
2225
gsl::not_null<le::ServiceLocator const*> m_services;
2326
std::optional<le::Texture> m_texture;
2427
le::drawable::Circle m_sprite{};
2528
glm::vec2 m_target_pos{};
2629
float m_move_speed{};
30+
float m_diameter{};
31+
std::size_t m_health{100};
2732
};
2833
} // namespace miracle

src/game.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include <game.hpp>
22
#include <glm/gtx/norm.hpp>
33
#include <le2d/context.hpp>
4+
#include <algorithm>
45
#include <cstddef>
56
#include <vector>
67
#include "enemy.hpp"
@@ -26,7 +27,11 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
2627
spawn_wave();
2728
m_time_since_last_wave_spawn = kvf::Seconds{};
2829
}
29-
for (auto& enemy : m_enemies) { enemy.translate(dt); }
30+
for (auto& enemy : m_enemies) {
31+
enemy.check_collision(m_circle.transform.position, 50.0f);
32+
enemy.translate(dt);
33+
}
34+
std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
3035
m_circle.transform.position = m_cursor_pos;
3136
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
3237
}

0 commit comments

Comments
 (0)