Skip to content

Commit 7cef3ab

Browse files
committed
Refactor lighthouse
- Create Lighthouse class - Add texture rendering with placeholder texture
1 parent 279c008 commit 7cef3ab

File tree

5 files changed

+59
-21
lines changed

5 files changed

+59
-21
lines changed

assets/images/lighthouse.png

21 KB
Loading

src/game.cpp

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,10 @@
11
#include <game.hpp>
22
#include <glm/gtx/norm.hpp>
33
#include <le2d/context.hpp>
4-
#include <cmath>
4+
#include "lighhouse.hpp"
55

66
namespace miracle {
7-
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services) {
8-
m_triangle.vertices = {
9-
le::Vertex{.position = {-50.0f, -50.0f}},
10-
le::Vertex{.position = {+50.0f, -50.0f}},
11-
le::Vertex{.position = {+0.0f, +75.0f}},
12-
};
13-
m_circle.create(50.0f);
14-
}
7+
Game::Game(gsl::not_null<le::ServiceLocator const*> services) : m_services(services), m_lighthouse(services) { m_circle.create(50.0f); }
158

169
void Game::on_cursor_pos(le::event::CursorPos const& cursor_pos) {
1710
auto const framebuffer_size = m_services->get<le::Context>().framebuffer_size();
@@ -20,20 +13,11 @@ void Game::on_cursor_pos(le::event::CursorPos const& cursor_pos) {
2013

2114
void Game::tick([[maybe_unused]] kvf::Seconds const dt) {
2215
m_circle.transform.position = m_cursor_pos;
23-
24-
auto const dist_sq = glm::length2(m_cursor_pos);
25-
if (dist_sq > 0.1f) {
26-
auto const dist = std::sqrt(dist_sq);
27-
auto const normalized = m_cursor_pos / dist;
28-
static constexpr auto up_v = glm::vec2{0.0f, 1.0f};
29-
auto const dot = glm::dot(normalized, up_v);
30-
auto const angle = glm::degrees(std::acos(dot));
31-
m_triangle.transform.orientation = m_cursor_pos.x > 0.0f ? -angle : angle;
32-
}
16+
m_lighthouse.rotate_towards_cursor(m_cursor_pos);
3317
}
3418

3519
void Game::render(le::Renderer& renderer) const {
36-
m_triangle.draw(renderer);
3720
m_circle.draw(renderer);
21+
m_lighthouse.render(renderer);
3822
}
3923
} // namespace miracle

src/game.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
#include <le2d/event.hpp>
55
#include <le2d/renderer.hpp>
66
#include <le2d/service_locator.hpp>
7+
#include "lighhouse.hpp"
78

89
namespace miracle {
910
class Game {
@@ -18,8 +19,8 @@ class Game {
1819
private:
1920
gsl::not_null<le::ServiceLocator const*> m_services;
2021

21-
le::drawable::Triangle m_triangle{};
2222
le::drawable::Circle m_circle{};
23+
Lighthouse m_lighthouse;
2324

2425
glm::vec2 m_cursor_pos{};
2526
};

src/lighhouse.hpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#pragma once
2+
#include <glm/gtx/norm.hpp>
3+
#include <kvf/time.hpp>
4+
#include <le2d/context.hpp>
5+
#include <le2d/drawable/shape.hpp>
6+
#include <le2d/event.hpp>
7+
#include <le2d/renderer.hpp>
8+
#include <le2d/service_locator.hpp>
9+
#include "glm/ext/vector_float2.hpp"
10+
#include "gsl/pointers"
11+
#include "le2d/texture.hpp"
12+
namespace miracle {
13+
class Lighthouse {
14+
public:
15+
explicit Lighthouse(gsl::not_null<le::ServiceLocator const*> services);
16+
void rotate_towards_cursor(glm::vec2 const& cursor_pos);
17+
void render(le::Renderer& renderer) const;
18+
19+
private:
20+
le::drawable::Circle m_sprite{};
21+
std::optional<le::Texture> m_texture;
22+
gsl::not_null<le::ServiceLocator const*> m_services;
23+
};
24+
} // namespace miracle

src/lighthouse.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <lighhouse.hpp>
2+
#include "le2d/asset_loader.hpp"
3+
#include "le2d/data_loader.hpp"
4+
5+
namespace miracle {
6+
7+
Lighthouse::Lighthouse(gsl::not_null<le::ServiceLocator const*> services) : m_services(services) {
8+
m_sprite.create(200.0f);
9+
10+
auto const& data_loader = services->get<le::IDataLoader>();
11+
auto const& context = services->get<le::Context>();
12+
auto asset_loader = le::AssetLoader{&data_loader, &context};
13+
m_texture = asset_loader.load_texture("images/lighthouse.png");
14+
m_sprite.texture = &m_texture.value();
15+
}
16+
void Lighthouse::rotate_towards_cursor(glm::vec2 const& cursor_pos) {
17+
auto const dist_sq = glm::length2((cursor_pos));
18+
if (dist_sq > 0.1f) {
19+
auto const dist = std::sqrt(dist_sq);
20+
auto const normalized = cursor_pos / dist;
21+
static constexpr auto up_v = glm::vec2(0.01f, 1.0f);
22+
auto const dot = glm::dot(normalized, up_v);
23+
auto const angle = glm::degrees(std::acos(dot));
24+
m_sprite.transform.orientation = cursor_pos.x > 0.0f ? -angle : angle;
25+
}
26+
}
27+
28+
void Lighthouse::render(le::Renderer& renderer) const { m_sprite.draw(renderer); }
29+
} // namespace miracle

0 commit comments

Comments
 (0)