-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathenemy.cpp
More file actions
36 lines (30 loc) · 1.34 KB
/
enemy.cpp
File metadata and controls
36 lines (30 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <enemy.hpp>
#include <algorithm>
#include "enemy_params.hpp"
#include "glm/geometric.hpp"
#include "glm/vec2.hpp"
#include "kvf/color.hpp"
#include "util/random.hpp"
namespace miracle {
Enemy::Enemy(gsl::not_null<le::ServiceLocator const*> services, EnemyParams const& params)
: m_services(services), m_target_pos(params.target_pos), m_move_speed(params.move_speed), m_diameter(util::random_range(40.0f, 60.0f)) {
m_sprite.create(m_diameter, kvf::red_v);
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
auto const radius = static_cast<float>(std::max(framebuffer_size.x, framebuffer_size.y)) / 2.0f;
m_sprite.transform.position = util::get_random_location_on_radius(radius);
// TODO: add proper textures
}
void Enemy::render(le::Renderer& renderer) const {
if (can_render) { m_sprite.draw(renderer); }
}
void Enemy::translate(kvf::Seconds const dt) {
glm::vec2 const direction = glm::normalize(m_target_pos - m_sprite.transform.position);
glm::vec2 const movement = direction * m_move_speed * dt.count();
m_sprite.transform.position += movement;
}
CollisionParams Enemy::get_collision_params() const { return {.pos = m_sprite.transform.position, .diameter = m_diameter}; }
void Enemy::take_damage(std::size_t dmg) {
can_render = true;
m_health = (dmg >= m_health) ? 0 : (m_health - dmg);
}
} // namespace miracle