Skip to content

Commit 6bf6962

Browse files
committed
Refactor for PR
- add collision parameters struct - fix collision calculation - improve text score handling - remove redundand initialization of text
1 parent 0770ebb commit 6bf6962

File tree

6 files changed

+28
-15
lines changed

6 files changed

+28
-15
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 & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ void Enemy::translate(kvf::Seconds const dt) {
2828
m_sprite.transform.position += movement;
2929
}
3030

31-
std::pair<glm::vec2, float> Enemy::get_pos_diameter() const { return {m_sprite.transform.position, m_diameter}; }
31+
CollisionParams Enemy::get_collision_params() const { return {.pos = m_sprite.transform.position, .diameter = m_diameter}; }
3232
void Enemy::take_damage(std::size_t dmg) {
3333
m_can_render = true;
3434
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 m_can_render{false};
2627

2728
private:

src/game.cpp

Lines changed: 10 additions & 8 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"
@@ -14,16 +16,12 @@
1416
#include "util/random.hpp"
1517

1618
namespace miracle {
17-
Game::Game(gsl::not_null<le::ServiceLocator const*> services)
18-
: m_services(services), m_lighthouse(services), m_light(services), m_score_text(le::drawable::Text()) {
19+
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services), m_light(services) {
1920
spawn_wave();
2021
auto const& data_loader = services->get<le::IDataLoader>();
2122
auto const& context = services->get<le::Context>();
2223
auto const asset_loader = le::AssetLoader{&data_loader, &context};
2324
m_font = asset_loader.load_font("fonts/specialElite.ttf");
24-
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
25-
26-
m_score_text.transform.position.y = static_cast<float>(framebuffer_size.y) / 2.0f - 50.0f;
2725
}
2826

2927
void Game::on_cursor_pos(le::event::CursorPos const& cursor_pos) {
@@ -44,7 +42,7 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
4442
}
4543
// Keep track of how many enemies were defeated and calculate score
4644
auto res = std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
47-
increase_score(res * 10);
45+
update_score(res * 10);
4846
m_light.set_position(m_cursor_pos);
4947
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
5048
}
@@ -68,8 +66,12 @@ void Game::spawn_wave() {
6866
m_enemies.insert(m_enemies.end(), std::make_move_iterator(new_wave.begin()), std::make_move_iterator(new_wave.end()));
6967
}
7068

71-
void Game::increase_score(std::size_t points) {
69+
void Game::update_score(int points) {
70+
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
71+
m_score_text.transform.position.y = static_cast<float>(framebuffer_size.y) / 2.0f - 50.0f;
7272
m_score += points;
73-
m_score_text.set_string(m_font, "Score: " + std::to_string(m_score));
73+
m_score_str.clear();
74+
std::format_to(std::back_inserter(m_score_str), "Score: {}", m_score);
75+
m_score_text.set_string(m_font, m_score_str);
7476
}
7577
} // namespace miracle

src/game.hpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ 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-
[[nodiscard]] std::string get_score_string() const;
23+
void update_score(int points);
2524
void spawn_wave();
2625

2726
private:
@@ -31,12 +30,14 @@ class Game {
3130

3231
le::Font m_font{};
3332
le::drawable::Text m_score_text{};
33+
int m_score{};
34+
std::string m_score_str;
35+
3436
glm::vec2 m_cursor_pos{};
3537
std::size_t m_wave_count{};
3638
bool m_running{true};
3739
kvf::Seconds m_wave_interval{};
3840
kvf::Seconds m_time_since_last_wave_spawn{};
3941
std::vector<Enemy> m_enemies{};
40-
std::size_t m_score{};
4142
};
4243
} // 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.m_can_render = false;

0 commit comments

Comments
 (0)