Skip to content

Commit f32f0ee

Browse files
committed
Add simple score tracking and display
1 parent 73c20f3 commit f32f0ee

File tree

3 files changed

+32
-3
lines changed

3 files changed

+32
-3
lines changed

assets/fonts/specialElite.ttf

148 KB
Binary file not shown.

src/game.cpp

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,29 @@
22
#include <glm/gtx/norm.hpp>
33
#include <le2d/context.hpp>
44
#include <cstddef>
5+
#include <string>
56
#include <vector>
67
#include "enemy.hpp"
78
#include "enemy_params.hpp"
89
#include "kvf/time.hpp"
10+
#include "le2d/asset_loader.hpp"
11+
#include "le2d/data_loader.hpp"
12+
#include "le2d/drawable/text.hpp"
913
#include "lighhouse.hpp"
1014
#include "util/random.hpp"
1115

1216
namespace miracle {
13-
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services), m_light(services) { spawn_wave(); }
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+
spawn_wave();
20+
auto const& data_loader = services->get<le::IDataLoader>();
21+
auto const& context = services->get<le::Context>();
22+
auto const asset_loader = le::AssetLoader{&data_loader, &context};
23+
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;
27+
}
1428

1529
void Game::on_cursor_pos(le::event::CursorPos const& cursor_pos) {
1630
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
@@ -25,10 +39,12 @@ void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
2539
m_time_since_last_wave_spawn = kvf::Seconds{};
2640
}
2741
for (auto& enemy : m_enemies) {
28-
m_light.check_enemy_collision(enemy);
42+
m_light.check_enemy_collision(enemy);
2943
enemy.translate(dt);
3044
}
31-
std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
45+
// Keep track of how many enemies were defeated and calculate score
46+
auto res = std::erase_if(m_enemies, [](Enemy const& enemy) { return !enemy.get_health(); });
47+
increase_score(res * 10);
3248
m_light.set_position(m_cursor_pos);
3349
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
3450
}
@@ -37,6 +53,7 @@ void Game::render(le::Renderer& renderer) const {
3753
m_light.render(renderer);
3854
m_lighthouse.render(renderer);
3955
for (auto const& enemy : m_enemies) { enemy.render(renderer); }
56+
m_score_text.draw(renderer);
4057
}
4158

4259
void Game::spawn_wave() {
@@ -50,4 +67,9 @@ void Game::spawn_wave() {
5067
}
5168
m_enemies.insert(m_enemies.end(), std::make_move_iterator(new_wave.begin()), std::make_move_iterator(new_wave.end()));
5269
}
70+
71+
void Game::increase_score(std::size_t points) {
72+
m_score += points;
73+
m_score_text.set_string(m_font, "Score: " + std::to_string(m_score));
74+
}
5375
} // namespace miracle

src/game.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include <le2d/service_locator.hpp>
77
#include <cstddef>
88
#include "enemy.hpp"
9+
#include "le2d/drawable/text.hpp"
10+
#include "le2d/font.hpp"
911
#include "lighhouse.hpp"
1012
#include "light.hpp"
1113

@@ -18,11 +20,15 @@ class Game {
1820

1921
void tick(kvf::Seconds dt);
2022
void render(le::Renderer& renderer) const;
23+
void increase_score(std::size_t points);
24+
[[nodiscard]] std::string get_score_string() const;
2125
void spawn_wave();
2226

2327
private:
2428
gsl::not_null<le::ServiceLocator const*> m_services;
2529

30+
le::Font m_font{};
31+
le::drawable::Text m_score_text{};
2632
Light m_light;
2733
Lighthouse m_lighthouse;
2834
glm::vec2 m_cursor_pos{};
@@ -31,5 +37,6 @@ class Game {
3137
kvf::Seconds m_wave_interval{};
3238
kvf::Seconds m_time_since_last_wave_spawn{};
3339
std::vector<Enemy> m_enemies{};
40+
std::size_t m_score{};
3441
};
3542
} // namespace miracle

0 commit comments

Comments
 (0)