galaxy 1.0.0
Real-Time C++23 Game Programming Framework. Built on data-driven design principles and agile software engineering.
Loading...
Searching...
No Matches
Map.cpp
Go to the documentation of this file.
1
7
10#include "galaxy/error/Log.hpp"
11#include "galaxy/flags/DenySerialization.hpp"
13
14#include "Map.hpp"
15
16#ifdef GALAXY_WIN_PLATFORM
19#endif
20
21namespace galaxy
22{
23 namespace map
24 {
26 {
27 }
28
30 {
31 this->m_name = std::move(m.m_name);
32 this->m_registry = std::move(m.m_registry);
33 }
34
36 {
37 if (this != &m)
38 {
39 this->m_name = std::move(m.m_name);
40 this->m_registry = std::move(m.m_registry);
41 }
42
43 return *this;
44 }
45
47 {
48 }
49
50 void Map::load(const ldtk::Level& level)
51 {
52 m_name = level.name;
53
54 for (auto& layer : level.allLayers())
55 {
56 auto render_layer = 0;
57
58 if (layer.isVisible())
59 {
60 switch (layer.getType())
61 {
62 case ldtk::LayerType::IntGrid:
64 break;
65
66 case ldtk::LayerType::Entities:
68 break;
69
70 case ldtk::LayerType::Tiles:
71 case ldtk::LayerType::AutoLayer:
72 parse_tile_layer(layer, render_layer);
73 break;
74 }
75 }
76
77 ++render_layer;
78 }
79 }
80
81 void Map::parse_intgrid_layer(const ldtk::Layer& layer)
82 {
83 GALAXY_LOG(GALAXY_WARNING, "IntGrid layer is not supported at this time.");
84 }
85
86 void Map::parse_entitiy_layer(const ldtk::Layer& layer)
87 {
88 for (const auto& entity : layer.allEntities())
89 {
90 auto count = 0;
91 const auto& id = entity.getName();
92
93 // name = identifier
94 if (id == "COLLISION")
95 {
96 const auto entt = m_registry.create();
97
98 auto& tag = m_registry.m_entt.get<components::Tag>(entt);
99 tag.m_tag = id + std::to_string(count);
100 }
101 else
102 {
103 GALAXY_LOG(GALAXY_WARNING, "Attempted to parse unknown entity '{0}'.", entity.getName());
104 }
105
106 count++;
107 }
108 }
109
110 void Map::parse_tile_layer(const ldtk::Layer& layer, const int render_layer)
111 {
112 const auto entity = m_registry.create();
113 m_registry.m_entt.emplace<flags::DenySerialization>(entity);
114 m_registry.m_entt.remove<flags::Disabled>(entity);
115
116 auto& tag = m_registry.m_entt.emplace<components::Tag>(entity);
117 tag.m_tag = layer.getName();
118
119 auto& tilemap = m_registry.m_entt.emplace<components::TileMap>(entity);
120 tilemap.m_batch.init(static_cast<int>(layer.allTiles().size()));
121
122 for (const auto& tile : layer.allTiles())
123 {
124 auto ldtk_verts = tile.getVertices();
125
126 std::array<graphics::Vertex, 4> vertices;
127
128 for (auto i = 0; i < ldtk_verts.size(); ++i)
129 {
130 vertices[i].m_pos.x = ldtk_verts[i].pos.x;
131 vertices[i].m_pos.y = ldtk_verts[i].pos.y;
132 vertices[i].m_texels.x = ldtk_verts[i].tex.x;
133 vertices[i].m_texels.y = ldtk_verts[i].tex.y;
134
135 // todo indices?
136 }
137
138 tilemap.m_batch.push(vertices);
139 }
140
141 auto file = std::filesystem::path(layer.getTileset().path).filename().string();
142 tilemap.set_texture(file);
143 tilemap.m_render_layer = render_layer;
144 tilemap.m_tint = glm::vec4(1.0f, 1.0f, 1.0f, layer.getOpacity());
145
146 auto& transform = m_registry.m_entt.emplace<components::Transform>(entity);
147 transform.m_tf.set_pos(layer.getOffset().x, layer.getOffset().y);
148 }
149
150 const std::string& Map::name() const
151 {
152 return m_name;
153 }
154
155 } // namespace map
156} // namespace galaxy
157
158#ifdef GALAXY_WIN_PLATFORM
160#endif
#define GALAXY_WARNING
Definition Log.hpp:24
#define GALAXY_LOG(level, msg,...)
Definition Log.hpp:29
#define GALAXY_DISABLE_WARNING_POP
Definition Pragma.hpp:44
#define GALAXY_DISABLE_WARNING(x)
Definition Pragma.hpp:45
#define GALAXY_DISABLE_WARNING_PUSH
Pragma.hpp galaxy.
Definition Pragma.hpp:43
Tag an entity.
Definition Tag.hpp:21
std::string m_tag
Tag.
Definition Tag.hpp:87
Rendering data for a single level/map in a LDTK world.
Definition TileMap.hpp:22
graphics::VertexBatch m_batch
Vertex data batch.
Definition TileMap.hpp:63
Defines the 2D transformation of an entity.
Definition Transform.hpp:22
graphics::Transform m_tf
Transformation object.
Definition Transform.hpp:81
entt::entity create()
Create an entity with some default components.
Definition Registry.cpp:52
entt::registry m_entt
Scene entities.
Definition Registry.hpp:169
Used to stop an entity from being updated/rendered.
Definition Disabled.hpp:21
An LDTK level.
Definition Map.hpp:26
void parse_entitiy_layer(const ldtk::Layer &layer)
Parse LDTK entity layer.
Definition Map.cpp:86
core::Registry m_registry
Map entities.
Definition Map.hpp:103
std::string m_name
Map name.
Definition Map.hpp:109
void parse_tile_layer(const ldtk::Layer &layer, const int render_layer)
Parse LDTK tile layer / auto layer.
Definition Map.cpp:110
Map()
Constructor.
Definition Map.cpp:25
Map & operator=(Map &&)
Move assignment operator.
Definition Map.cpp:35
~Map()
Destructor.
Definition Map.cpp:46
void load(const ldtk::Level &level)
Load a map from an ldtk level.
Definition Map.cpp:50
const std::string & name() const
Get map name.
Definition Map.cpp:150
void parse_intgrid_layer(const ldtk::Layer &layer)
Parse LDTK int-grid layer.
Definition Map.cpp:81
Timer.hpp galaxy.
Definition Async.hpp:17