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+
2729void 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
4244void Lighthouse::take_damage (float dmg) { m_health -= dmg; }
4345
4446float Lighthouse::get_health () const { return m_health; }
47+
4548void Lighthouse::render (le::Renderer& renderer) const { m_sprite.draw (renderer); }
4649} // namespace miracle
0 commit comments