File tree Expand file tree Collapse file tree 6 files changed +51
-13
lines changed Expand file tree Collapse file tree 6 files changed +51
-13
lines changed Original file line number Diff line number Diff line change 1
1
#include < enemy.hpp>
2
2
#include < algorithm>
3
+ #include < utility>
3
4
#include " enemy_params.hpp"
4
5
#include " glm/geometric.hpp"
5
6
#include " glm/vec2.hpp"
@@ -25,8 +26,7 @@ void Enemy::translate(kvf::Seconds const dt) {
25
26
m_sprite.transform .position += movement;
26
27
}
27
28
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); }
31
31
32
32
} // namespace miracle
Original file line number Diff line number Diff line change 6
6
#include < le2d/event.hpp>
7
7
#include < le2d/renderer.hpp>
8
8
#include < le2d/service_locator.hpp>
9
+ #include < cstddef>
9
10
#include < optional>
10
11
#include " enemy_params.hpp"
11
12
#include " glm/vec2.hpp"
@@ -18,9 +19,9 @@ class Enemy {
18
19
19
20
void render (le::Renderer& renderer) const ;
20
21
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);
23
23
[[nodiscard]] std::size_t get_health () const { return m_health; }
24
+ [[nodiscard]] std::pair<glm::vec2, float > get_pos_diameter () const ;
24
25
25
26
private:
26
27
gsl::not_null<le::ServiceLocator const *> m_services;
Original file line number Diff line number Diff line change 10
10
#include " util/random.hpp"
11
11
12
12
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 (); }
17
14
18
15
void Game::on_cursor_pos (le::event::CursorPos const & cursor_pos) {
19
16
auto const framebuffer_size = m_services->get <le::Context>().framebuffer_size ();
@@ -28,16 +25,16 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
28
25
m_time_since_last_wave_spawn = kvf::Seconds{};
29
26
}
30
27
for (auto & enemy : m_enemies) {
31
- enemy. check_collision (m_circle. transform . position , 50 . 0f );
28
+ m_light. check_enemy_collision (enemy );
32
29
enemy.translate (dt);
33
30
}
34
31
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) ;
36
33
m_lighthouse.rotate_towards_cursor (m_cursor_pos);
37
34
}
38
35
39
36
void Game::render (le::Renderer& renderer) const {
40
- m_circle. draw (renderer);
37
+ m_light. render (renderer);
41
38
m_lighthouse.render (renderer);
42
39
for (auto const & enemy : m_enemies) { enemy.render (renderer); }
43
40
}
Original file line number Diff line number Diff line change 7
7
#include < cstddef>
8
8
#include " enemy.hpp"
9
9
#include " lighhouse.hpp"
10
+ #include " light.hpp"
10
11
11
12
namespace miracle {
12
13
class Game {
@@ -22,7 +23,7 @@ class Game {
22
23
private:
23
24
gsl::not_null<le::ServiceLocator const *> m_services;
24
25
25
- le::drawable::Circle m_circle{} ;
26
+ Light m_light ;
26
27
Lighthouse m_lighthouse;
27
28
glm::vec2 m_cursor_pos{};
28
29
std::size_t m_wave_count{};
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
You can’t perform that action at this time.
0 commit comments