Skip to content

Commit 3f3bb6c

Browse files
committed
Add conditional enemy rendering
1 parent f32f0ee commit 3f3bb6c

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

src/enemy.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ Enemy::Enemy(gsl::not_null<le::ServiceLocator const*> services, EnemyParams cons
1818
// TODO: add proper textures
1919
}
2020

21-
void Enemy::render(le::Renderer& renderer) const { m_sprite.draw(renderer); }
21+
void Enemy::render(le::Renderer& renderer) const {
22+
if (m_can_render) { m_sprite.draw(renderer); }
23+
}
2224

2325
void Enemy::translate(kvf::Seconds const dt) {
2426
glm::vec2 const direction = glm::normalize(m_target_pos - m_sprite.transform.position);
@@ -27,6 +29,9 @@ void Enemy::translate(kvf::Seconds const dt) {
2729
}
2830

2931
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); }
32+
void Enemy::take_damage(std::size_t dmg) {
33+
m_can_render = true;
34+
m_health = m_health = (dmg >= m_health) ? 0 : (m_health - dmg);
35+
}
3136

3237
} // namespace miracle

src/enemy.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ class Enemy {
2222
void take_damage(std::size_t dmg);
2323
[[nodiscard]] std::size_t get_health() const { return m_health; }
2424
[[nodiscard]] std::pair<glm::vec2, float> get_pos_diameter() const;
25+
bool m_can_render{false};
2526

2627
private:
2728
gsl::not_null<le::ServiceLocator const*> m_services;

src/light.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ Light::Light(gsl::not_null<le::ServiceLocator const*> services) : m_services(ser
66

77
void Light::check_enemy_collision(Enemy& enemy) {
88
auto [pos, diameter] = enemy.get_pos_diameter();
9-
if (glm::distance(pos, m_sprite.transform.position) < (diameter + m_diameter)) { enemy.take_damage(1); }
9+
if (glm::distance(pos, m_sprite.transform.position) < (diameter + m_diameter)) {
10+
enemy.take_damage(1);
11+
} else {
12+
enemy.m_can_render = false;
13+
}
1014
}
1115
void Light::render(le::Renderer& renderer) const { m_sprite.draw(renderer); }
1216
void Light::set_position(glm::vec2 cursor_pos) { m_sprite.transform.position = cursor_pos; }

0 commit comments

Comments
 (0)