Skip to content

Commit 73c20f3

Browse files
committed
Add Light class
- move light to separate class - let light manage its effect on the enemies - enemies take tick damage
1 parent 037c44e commit 73c20f3

File tree

6 files changed

+51
-13
lines changed

6 files changed

+51
-13
lines changed

src/enemy.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include <enemy.hpp>
22
#include <algorithm>
3+
#include <utility>
34
#include "enemy_params.hpp"
45
#include "glm/geometric.hpp"
56
#include "glm/vec2.hpp"
@@ -25,8 +26,7 @@ void Enemy::translate(kvf::Seconds const dt) {
2526
m_sprite.transform.position += movement;
2627
}
2728

28-
void Enemy::check_collision(glm::vec2 pos, float radius) {
29-
if (glm::distance(pos, m_sprite.transform.position) < radius + m_diameter / 2) { m_health = 0; }
30-
}
29+
std::pair<glm::vec2, float> Enemy::get_pos_diameter() const { return {m_sprite.transform.position, m_diameter}; }
30+
void Enemy::take_damage(std::size_t dmg) { m_health = m_health = (dmg >= m_health) ? 0 : (m_health - dmg); }
3131

3232
} // namespace miracle

src/enemy.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include <le2d/event.hpp>
77
#include <le2d/renderer.hpp>
88
#include <le2d/service_locator.hpp>
9+
#include <cstddef>
910
#include <optional>
1011
#include "enemy_params.hpp"
1112
#include "glm/vec2.hpp"
@@ -18,9 +19,9 @@ class Enemy {
1819

1920
void render(le::Renderer& renderer) const;
2021
void translate(kvf::Seconds dt);
21-
// There are temporary parameters, will take the light beam object once it is created
22-
void check_collision(glm::vec2 pos, float radius);
22+
void take_damage(std::size_t dmg);
2323
[[nodiscard]] std::size_t get_health() const { return m_health; }
24+
[[nodiscard]] std::pair<glm::vec2, float> get_pos_diameter() const;
2425

2526
private:
2627
gsl::not_null<le::ServiceLocator const*> m_services;

src/game.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,7 @@
1010
#include "util/random.hpp"
1111

1212
namespace miracle {
13-
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services) {
14-
m_circle.create(70.0f);
15-
spawn_wave();
16-
}
13+
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services), m_light(services) { spawn_wave(); }
1714

1815
void Game::on_cursor_pos(le::event::CursorPos const& cursor_pos) {
1916
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
@@ -28,16 +25,16 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
2825
m_time_since_last_wave_spawn = kvf::Seconds{};
2926
}
3027
for (auto& enemy : m_enemies) {
31-
enemy.check_collision(m_circle.transform.position, 50.0f);
28+
m_light.check_enemy_collision(enemy);
3229
enemy.translate(dt);
3330
}
3431
std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
35-
m_circle.transform.position = m_cursor_pos;
32+
m_light.set_position(m_cursor_pos);
3633
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
3734
}
3835

3936
void Game::render(le::Renderer& renderer) const {
40-
m_circle.draw(renderer);
37+
m_light.render(renderer);
4138
m_lighthouse.render(renderer);
4239
for (auto const& enemy : m_enemies) { enemy.render(renderer); }
4340
}

src/game.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#include <cstddef>
88
#include "enemy.hpp"
99
#include "lighhouse.hpp"
10+
#include "light.hpp"
1011

1112
namespace miracle {
1213
class Game {
@@ -22,7 +23,7 @@ class Game {
2223
private:
2324
gsl::not_null<le::ServiceLocator const*> m_services;
2425

25-
le::drawable::Circle m_circle{};
26+
Light m_light;
2627
Lighthouse m_lighthouse;
2728
glm::vec2 m_cursor_pos{};
2829
std::size_t m_wave_count{};

src/light.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#include <light.hpp>
2+
#include "kvf/color.hpp"
3+
4+
namespace miracle {
5+
Light::Light(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_diameter(100) { m_sprite.create(150.0f, kvf::white_v); }
6+
7+
void Light::check_enemy_collision(Enemy& enemy) {
8+
auto [pos, diameter] = enemy.get_pos_diameter();
9+
if (glm::distance(pos, m_sprite.transform.position) < (diameter + m_diameter)) { enemy.take_damage(1); }
10+
}
11+
void Light::render(le::Renderer& renderer) const { m_sprite.draw(renderer); }
12+
void Light::set_position(glm::vec2 cursor_pos) { m_sprite.transform.position = cursor_pos; }
13+
} // namespace miracle

src/light.hpp

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#pragma once
2+
3+
#include "enemy.hpp"
4+
#include "glm/vec2.hpp"
5+
#include "gsl/pointers"
6+
#include "le2d/drawable/shape.hpp"
7+
#include "le2d/renderer.hpp"
8+
#include "le2d/service_locator.hpp"
9+
#include "le2d/texture.hpp"
10+
11+
namespace miracle {
12+
class Light {
13+
public:
14+
explicit Light(gsl::not_null<le::ServiceLocator const*> services);
15+
16+
void render(le::Renderer& renderer) const;
17+
void set_position(glm::vec2 cursor_pos);
18+
void check_enemy_collision(Enemy& enemy);
19+
20+
private:
21+
gsl::not_null<le::ServiceLocator const*> m_services;
22+
std::optional<le::Texture> m_texture;
23+
le::drawable::Circle m_sprite{};
24+
float m_diameter{};
25+
};
26+
} // namespace miracle

0 commit comments

Comments
 (0)