Skip to content

Commit 9b69671

Browse files
committed
Merge branch 'feature/actors' into nikola/lighthouse
2 parents 0b044e9 + 35428c8 commit 9b69671

File tree

7 files changed

+32
-24
lines changed

7 files changed

+32
-24
lines changed

src/EnemyColliderInfo.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#pragma once
2+
#include <glm/vec2.hpp>
3+
4+
namespace miracle {
5+
struct CollisionParams {
6+
glm::vec2 pos;
7+
float diameter;
8+
};
9+
} // namespace miracle

src/enemy.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include <enemy.hpp>
22
#include <algorithm>
3-
#include <utility>
43
#include "enemy_params.hpp"
54
#include "glm/geometric.hpp"
65
#include "glm/vec2.hpp"
@@ -28,7 +27,7 @@ void Enemy::translate(kvf::Seconds const dt) {
2827
m_sprite.transform.position += movement;
2928
}
3029

31-
std::pair<glm::vec2, float> Enemy::get_pos_diameter() const { return {m_sprite.transform.position, m_diameter}; }
30+
CollisionParams Enemy::get_collision_params() const { return {.pos = m_sprite.transform.position, .diameter = m_diameter}; }
3231
void Enemy::take_damage(std::size_t dmg) {
3332
can_render = true;
3433
m_health = (dmg >= m_health) ? 0 : (m_health - dmg);

src/enemy.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <le2d/service_locator.hpp>
99
#include <cstddef>
1010
#include <optional>
11+
#include "EnemyColliderInfo.hpp"
1112
#include "enemy_params.hpp"
1213
#include "glm/vec2.hpp"
1314
#include "le2d/texture.hpp"
@@ -21,7 +22,7 @@ class Enemy {
2122
void translate(kvf::Seconds dt);
2223
void take_damage(std::size_t dmg);
2324
[[nodiscard]] std::size_t get_health() const { return m_health; }
24-
[[nodiscard]] std::pair<glm::vec2, float> get_pos_diameter() const;
25+
[[nodiscard]] CollisionParams get_collision_params() const;
2526
bool can_render{false};
2627

2728
private:

src/game.cpp

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <glm/gtx/norm.hpp>
33
#include <le2d/context.hpp>
44
#include <cstddef>
5+
#include <format>
6+
#include <iterator>
57
#include <string>
68
#include <vector>
79
#include "enemy.hpp"
@@ -15,8 +17,7 @@
1517
#include "util/random.hpp"
1618

1719
namespace miracle {
18-
Game::Game(gsl::not_null<le::ServiceLocator const*> services)
19-
: m_services(services), m_lighthouse(services), m_light(services), m_score_text(le::drawable::Text()) {
20+
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services), m_light(services) {
2021
spawn_wave();
2122
auto const& data_loader = services->get<le::IDataLoader>();
2223
auto const& context = services->get<le::Context>();
@@ -45,13 +46,12 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
4546
for (auto& enemy : m_enemies) {
4647
m_light.check_enemy_collision(enemy);
4748
m_lighthouse.check_visibility_range(enemy);
48-
set_health_text();
49+
update_health_text();
4950
enemy.translate(dt);
5051
}
5152
// Keep track of how many enemies were defeated and calculate score
5253
auto res = std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
53-
increase_score(res * 10);
54-
54+
update_score(static_cast<int>(res * 10));
5555
m_light.set_position(m_cursor_pos);
5656
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
5757
}
@@ -76,15 +76,14 @@ void Game::spawn_wave() {
7676
m_enemies.insert(m_enemies.end(), std::make_move_iterator(new_wave.begin()), std::make_move_iterator(new_wave.end()));
7777
}
7878

79-
void Game::increase_score(std::size_t points) {
79+
void Game::update_score(int points) {
80+
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
81+
m_score_text.transform.position.y = static_cast<float>(framebuffer_size.y) / 2.0f - 50.0f;
8082
m_score += points;
81-
m_score_text.set_string(m_font, "Score: " + std::to_string(m_score));
82-
}
83-
84-
void Game::set_health_text() {
85-
float const health = m_lighthouse.get_health();
86-
std::string text = health > 0 ? "Health: " + std::format("{:.1f}", health) : "Game Over";
87-
m_health_text.set_string(m_font, text);
83+
m_score_str.clear();
84+
std::format_to(std::back_inserter(m_score_str), "Score: {}", m_score);
85+
m_score_text.set_string(m_font, m_score_str);
8886
}
87+
void Game::update_health_text() {}
8988

9089
} // namespace miracle

src/game.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ class Game {
2020

2121
void tick(kvf::Seconds dt);
2222
void render(le::Renderer& renderer) const;
23-
void increase_score(std::size_t points);
24-
void set_health_text();
23+
void update_score(int points);
24+
void update_health_text();
2525
void spawn_wave();
2626

2727
private:
@@ -32,13 +32,14 @@ class Game {
3232
le::Font m_font{};
3333
le::drawable::Text m_score_text{};
3434
le::drawable::Text m_health_text{};
35+
int m_score{};
36+
std::string m_score_str;
3537

3638
glm::vec2 m_cursor_pos{};
3739
std::size_t m_wave_count{};
3840
bool m_running{true};
3941
kvf::Seconds m_wave_interval{};
4042
kvf::Seconds m_time_since_last_wave_spawn{};
4143
std::vector<Enemy> m_enemies{};
42-
std::size_t m_score{};
4344
};
4445
} // namespace miracle

src/light.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ namespace miracle {
55
Light::Light(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_diameter(100) { m_sprite.create(150.0f, kvf::white_v); }
66

77
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)) {
8+
auto const [pos, diameter] = enemy.get_collision_params();
9+
if (glm::distance(pos, m_sprite.transform.position) < (diameter + m_diameter) / 2) {
1010
enemy.take_damage(1);
1111
} else {
1212
enemy.can_render = false;

src/lighthouse.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include <lighhouse.hpp>
2-
#include <cstddef>
32
#include "glm/geometric.hpp"
43
#include "le2d/asset_loader.hpp"
54
#include "le2d/data_loader.hpp"
@@ -26,15 +25,15 @@ void Lighthouse::rotate_towards_cursor(glm::vec2 cursor_pos) {
2625
}
2726
}
2827
void Lighthouse::check_visibility_range(Enemy& enemy) {
29-
auto [enemy_pos, enemy_diameter] = enemy.get_pos_diameter();
28+
auto [enemy_pos, enemy_diameter] = enemy.get_collision_params();
3029
if (glm::distance(m_sprite.transform.position, enemy_pos) < (m_visibility_diameter + enemy_diameter) / 2.0f) {
3130
enemy.can_render = true;
3231
// No need to check for damage taken if enemy isn't already in visibility radius
3332
check_damage_taken(enemy);
3433
}
3534
}
3635
void Lighthouse::check_damage_taken(Enemy& enemy) {
37-
auto [enemy_pos, enemy_diameter] = enemy.get_pos_diameter();
36+
auto [enemy_pos, enemy_diameter] = enemy.get_collision_params();
3837
if (glm::distance(m_sprite.transform.position, enemy_pos) < (m_hitbog_diameter + enemy_diameter) / 2.0f) {
3938
take_damage(enemy_diameter / 200);
4039
} // magic numbers

0 commit comments

Comments
 (0)