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 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
Original file line number Diff line number Diff line change 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;
Original file line number Diff line number Diff line change 1010#include " util/random.hpp"
1111
1212namespace 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
1815void 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
3936void 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}
Original file line number Diff line number Diff line change 77#include < cstddef>
88#include " enemy.hpp"
99#include " lighhouse.hpp"
10+ #include " light.hpp"
1011
1112namespace miracle {
1213class 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{};
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