Skip to content

Commit e3847d8

Browse files
committed
Cleanup
- Avoid redundant computation - Avoid square root and division - Misc file changes and formatting / indents
1 parent 145da27 commit e3847d8

File tree

10 files changed

+40
-44
lines changed

10 files changed

+40
-44
lines changed

src/EnemyColliderInfo.hpp

Lines changed: 0 additions & 9 deletions
This file was deleted.

src/enemy.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
#include <enemy.hpp>
22
#include <algorithm>
3-
#include "enemy_params.hpp"
43
#include "glm/geometric.hpp"
5-
#include "glm/vec2.hpp"
64
#include "kvf/color.hpp"
75
#include "util/random.hpp"
86

97
namespace miracle {
10-
Enemy::Enemy(gsl::not_null<le::ServiceLocator const*> services, EnemyParams const& params)
8+
Enemy::Enemy(gsl::not_null<le::ServiceLocator const*> services, Params const& params)
119
: m_services(services), m_target_pos(params.target_pos), m_move_speed(params.move_speed), m_diameter(util::random_range(40.0f, 60.0f)) {
1210
m_sprite.create(m_diameter, kvf::red_v);
1311
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
@@ -27,7 +25,8 @@ void Enemy::translate(kvf::Seconds const dt) {
2725
m_sprite.transform.position += movement;
2826
}
2927

30-
CollisionParams Enemy::get_collision_params() const { return {.pos = m_sprite.transform.position, .diameter = m_diameter}; }
28+
auto Enemy::get_collision_info() const -> CollisionInfo { return {.pos = m_sprite.transform.position, .diameter = m_diameter}; }
29+
3130
void Enemy::take_damage(std::size_t dmg) {
3231
can_render = true;
3332
m_health = (dmg >= m_health) ? 0 : (m_health - dmg);

src/enemy.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,21 +8,29 @@
88
#include <le2d/service_locator.hpp>
99
#include <cstddef>
1010
#include <optional>
11-
#include "EnemyColliderInfo.hpp"
12-
#include "enemy_params.hpp"
1311
#include "glm/vec2.hpp"
1412
#include "le2d/texture.hpp"
1513

1614
namespace miracle {
1715
class Enemy {
1816
public:
19-
explicit Enemy(gsl::not_null<le::ServiceLocator const*> services, EnemyParams const& params);
17+
struct Params {
18+
glm::vec2 target_pos{};
19+
float move_speed{};
20+
};
21+
22+
struct CollisionInfo {
23+
glm::vec2 pos{};
24+
float diameter{};
25+
};
26+
27+
explicit Enemy(gsl::not_null<le::ServiceLocator const*> services, Params const& params);
2028

2129
void render(le::Renderer& renderer) const;
2230
void translate(kvf::Seconds dt);
2331
void take_damage(std::size_t dmg);
2432
[[nodiscard]] std::size_t get_health() const { return m_health; }
25-
[[nodiscard]] CollisionParams get_collision_params() const;
33+
[[nodiscard]] CollisionInfo get_collision_info() const;
2634
bool can_render{false};
2735

2836
private:

src/enemy_params.hpp

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/game.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,13 @@
11
#include <game.hpp>
22
#include <glm/gtx/norm.hpp>
33
#include <le2d/context.hpp>
4+
#include <algorithm>
45
#include <cstddef>
56
#include <format>
67
#include <iterator>
78
#include <string>
89
#include <vector>
910
#include "enemy.hpp"
10-
#include "enemy_params.hpp"
11-
#include "glm/ext/vector_float2.hpp"
1211
#include "kvf/time.hpp"
1312
#include "le2d/asset_loader.hpp"
1413
#include "le2d/data_loader.hpp"
@@ -63,13 +62,15 @@ void Game::render(le::Renderer& renderer) const {
6362
void Game::spawn_wave() {
6463
++m_wave_count;
6564
m_wave_interval += kvf::Seconds{5};
66-
std::vector<Enemy> new_wave;
67-
std::size_t const wave_size = m_wave_count * 3;
68-
new_wave.reserve(wave_size);
69-
for (std::size_t i = 0; i < wave_size; ++i) {
70-
new_wave.emplace_back(m_services, EnemyParams{.target_pos = glm::vec2{0.0f, 0.0f}, .move_speed = util::random_range(35.0f, 65.0f)});
65+
std::vector<Enemy> new_wave{};
66+
int wave_size = m_wave_count * 3;
67+
new_wave.reserve(static_cast<std::size_t>(wave_size));
68+
for (; wave_size > 0; --wave_size) {
69+
auto const params = Enemy::Params{.target_pos = glm::vec2{0.0f, 0.0f}, .move_speed = util::random_range(35.0f, 65.0f)};
70+
new_wave.emplace_back(m_services, params);
7171
}
72-
m_enemies.insert(m_enemies.end(), std::make_move_iterator(new_wave.begin()), std::make_move_iterator(new_wave.end()));
72+
m_enemies.reserve(m_enemies.size() + new_wave.size());
73+
std::ranges::move(new_wave, std::back_inserter(m_enemies));
7374
}
7475

7576
void Game::update_score(int points) {

src/game.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Game {
3636
std::string m_score_str;
3737
std::string m_health_str;
3838
glm::vec2 m_cursor_pos{};
39-
std::size_t m_wave_count{};
39+
int m_wave_count{};
4040
bool m_running{true};
4141
kvf::Seconds m_wave_interval{};
4242
kvf::Seconds m_time_since_last_wave_spawn{};

src/lighhouse.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Lighthouse {
1919
void rotate_towards_cursor(glm::vec2 cursor_pos);
2020
void render(le::Renderer& renderer) const;
2121
void check_visibility_range(Enemy& enemy);
22-
void check_damage_taken(Enemy& enemy);
22+
void check_damage_taken(float enemy_diameter, float dist_sq);
2323
void take_damage(float dmg);
2424
[[nodiscard]] float get_health() const;
2525

src/light.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ 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 const [pos, diameter] = enemy.get_collision_params();
8+
auto const [pos, diameter] = enemy.get_collision_info();
99
if (glm::distance(pos, m_sprite.transform.position) < (diameter + m_diameter) / 2) {
1010
enemy.take_damage(1);
1111
} else {

src/lighthouse.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1+
#include <glm/gtc/matrix_transform.hpp>
12
#include <lighhouse.hpp>
2-
#include "glm/geometric.hpp"
3+
#include "glm/gtx/norm.hpp"
34
#include "le2d/asset_loader.hpp"
45
#include "le2d/data_loader.hpp"
56

@@ -24,23 +25,25 @@ void Lighthouse::rotate_towards_cursor(glm::vec2 cursor_pos) {
2425
m_sprite.transform.orientation = cursor_pos.x > 0.0f ? -angle : angle;
2526
}
2627
}
28+
2729
void Lighthouse::check_visibility_range(Enemy& enemy) {
28-
auto [enemy_pos, enemy_diameter] = enemy.get_collision_params();
29-
if (glm::distance(m_sprite.transform.position, enemy_pos) < (m_visibility_diameter + enemy_diameter) / 2.0f) {
30+
auto [enemy_pos, enemy_diameter] = enemy.get_collision_info();
31+
auto const dist_sq = glm::length2(m_sprite.transform.position - enemy_pos);
32+
auto const viz_dist = (m_visibility_diameter + enemy_diameter) * 0.5f;
33+
if (dist_sq < viz_dist * viz_dist) {
3034
enemy.can_render = true;
3135
// No need to check for damage taken if enemy isn't already in visibility radius
32-
check_damage_taken(enemy);
36+
check_damage_taken(enemy_diameter, dist_sq);
3337
}
3438
}
35-
void Lighthouse::check_damage_taken(Enemy& enemy) {
36-
auto [enemy_pos, enemy_diameter] = enemy.get_collision_params();
37-
if (glm::distance(m_sprite.transform.position, enemy_pos) < (m_hitbox_diameter + enemy_diameter) / 2.0f) {
38-
take_damage(enemy_diameter / 200);
39-
} // magic numbers
39+
void Lighthouse::check_damage_taken(float const enemy_diameter, float const dist_sq) {
40+
auto const hitbox_dist = (m_hitbox_diameter + enemy_diameter) * 0.5f;
41+
if (dist_sq < hitbox_dist * hitbox_dist) { take_damage(enemy_diameter * 0.005f); } // magic numbers
4042
}
4143

4244
void Lighthouse::take_damage(float dmg) { m_health -= dmg; }
4345

4446
float Lighthouse::get_health() const { return m_health; }
47+
4548
void Lighthouse::render(le::Renderer& renderer) const { m_sprite.draw(renderer); }
4649
} // namespace miracle

src/resources.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#pragma once

0 commit comments

Comments
 (0)