Unravel Engine C++ Reference
Loading...
Searching...
No Matches
asset_extensions.h
Go to the documentation of this file.
1#pragma once
3#include <engine/engine_export.h>
4#include <string>
5#include <vector>
6
7namespace gfx
8{
9struct texture;
10struct shader;
11} // namespace gfx
12
13namespace unravel
14{
15class mesh;
16class material;
17struct prefab;
18struct scene_prefab;
19struct animation_clip;
20struct physics_material;
21struct audio_clip;
22struct script;
23struct font;
24struct ui_tree;
25struct style_sheet;
26
27} // namespace unravel
28
29namespace ex
30{
31
32template<typename T>
33auto get_suported_formats() -> const std::vector<std::string>&
34{
35 static_assert(!std::is_same_v<T, T>, "get_suported_formats must be specialized for this type");
36 static const std::vector<std::string> result = {};
37 return result;
38}
39
40template<typename T>
41auto get_suported_dependencies_formats() -> const std::vector<std::string>&;
42
43
44template<>
45inline auto get_suported_formats<unravel::font>() -> const std::vector<std::string>&
46{
47 static std::vector<std::string> formats = {".ttf", ".otf"};
48 return formats;
49}
50
51template<>
52inline auto get_suported_formats<gfx::texture>() -> const std::vector<std::string>&
53{
54 static std::vector<std::string> formats = {".etex", ".png", ".jpg", ".jpeg", ".tga", ".dds", ".ktx", ".pvr", ".exr", ".hdr", ".bmp", ".gif", ".psd"};
55 return formats;
56}
57
58template<>
59inline auto get_suported_formats<unravel::mesh>() -> const std::vector<std::string>&
60{
61 static std::vector<std::string> formats = {".emesh", ".gltf", ".glb", ".obj", ".fbx", ".FBX", ".dae", ".blend", ".3ds"};
62 return formats;
63}
64
65template<>
66inline auto get_suported_formats<unravel::audio_clip>() -> const std::vector<std::string>&
67{
68 static std::vector<std::string> formats = {".eaudioclip", ".ogg", ".wav", ".flac", ".mp3"};
69 return formats;
70}
71
72template<>
73inline auto get_suported_dependencies_formats<gfx::shader>() -> const std::vector<std::string>&
74{
75 static std::vector<std::string> formats = {".sh"};
76 return formats;
77}
78
79template<>
80inline auto get_suported_dependencies_formats<unravel::ui_tree>() -> const std::vector<std::string>&
81{
82 static std::vector<std::string> formats = {".rcss"};
83 return formats;
84}
85
86template<>
87inline auto get_suported_formats<gfx::shader>() -> const std::vector<std::string>&
88{
89 static std::vector<std::string> formats = {".sc"};
90 return formats;
91}
92
93template<>
94inline auto get_suported_formats<unravel::material>() -> const std::vector<std::string>&
95{
96 static std::vector<std::string> formats = {".mat", ".ematerial"};
97 return formats;
98}
99
100template<>
101inline auto get_suported_formats<unravel::animation_clip>() -> const std::vector<std::string>&
102{
103 static std::vector<std::string> formats = {".anim"};
104 return formats;
105}
106
107template<>
108inline auto get_suported_formats<unravel::prefab>() -> const std::vector<std::string>&
109{
110 static std::vector<std::string> formats = {".pfb"};
111 return formats;
112}
113
114template<>
115inline auto get_suported_formats<unravel::scene_prefab>() -> const std::vector<std::string>&
116{
117 static std::vector<std::string> formats = {".spfb"};
118 return formats;
119}
120
121template<>
122inline auto get_suported_formats<unravel::physics_material>() -> const std::vector<std::string>&
123{
124 static std::vector<std::string> formats = {".phm", ".ephmaterial"};
125 return formats;
126}
127
128template<>
129inline auto get_suported_formats<unravel::script>() -> const std::vector<std::string>&
130{
131 static std::vector<std::string> formats = {".cs"};
132 return formats;
133}
134
135template<>
136inline auto get_suported_formats<unravel::ui_tree>() -> const std::vector<std::string>&
137{
138 static std::vector<std::string> formats = {".rhtml"};
139 return formats;
140}
141
142template<>
143inline auto get_suported_formats<unravel::style_sheet>() -> const std::vector<std::string>&
144{
145 static std::vector<std::string> formats = {".rcss"};
146 return formats;
147}
148
167
168template<typename T>
169inline auto is_format(const std::string& ex) -> bool
170{
171 if(ex.empty())
172 {
173 return false;
174 }
175
176 const auto& supported = ex::get_suported_formats<T>();
177 return std::find_if(std::begin(supported),
178 std::end(supported),
179 [&](const std::string& el)
180 {
181 return el.find(ex) != std::string::npos;
182 }) != std::end(supported);
183}
184
185template<typename T>
186inline auto get_format(bool include_dot = true) -> std::string
187{
188 auto format = get_suported_formats<T>().front();
189 if(include_dot)
190 {
191 return format;
192 }
193 return format.substr(1);
194}
195
196template<typename T>
197inline auto get_suported_formats_with_wildcard() -> std::vector<std::string>
198{
199 auto formats = get_suported_formats<T>();
200 for(auto& fmt : formats)
201 {
202 fmt.insert(fmt.begin(), '*');
203 }
204
205 return formats;
206}
207
208inline auto get_meta_format() -> const std::string&
209{
210 static const std::string result = ".meta";
211 return result;
212}
213
214
215inline auto get_meta_directory_no_slash(const std::string& prefix = {}) -> std::string
216{
217 return prefix + "data";
218}
219
220inline auto get_data_directory_no_slash(const std::string& prefix = {}) -> std::string
221{
222 return prefix + "data";
223}
224
225inline auto get_compiled_directory_no_slash(const std::string& prefix = {}) -> std::string
226{
227 return prefix + "compiled";
228}
229
230inline auto get_meta_directory(const std::string& prefix = {}) -> std::string
231{
232 return get_meta_directory_no_slash(prefix + ":/");
233}
234
235inline auto get_data_directory(const std::string& prefix = {}) -> std::string
236{
237 return get_data_directory_no_slash(prefix + ":/");
238}
239
240inline auto get_compiled_directory(const std::string& prefix = {}) -> std::string
241{
242 return get_compiled_directory_no_slash(prefix + ":/");
243}
244
245
246inline auto get_type(const std::string& ex, bool is_directory = false) -> const std::string&
247{
249 {
250 static const std::string result = "Texture";
251 return result;
252 }
254 {
255 static const std::string result = "Shader";
256 return result;
257 }
259 {
260 static const std::string result = "Material";
261 return result;
262 }
264 {
265 static const std::string result = "Mesh";
266 return result;
267 }
269 {
270 static const std::string result = "Animation Clip";
271 return result;
272 }
274 {
275 static const std::string result = "Audio Clip";
276 return result;
277 }
279 {
280 static const std::string result = "Prefab";
281 return result;
282 }
284 {
285 static const std::string result = "Scene";
286 return result;
287 }
289 {
290 static const std::string result = "Physics Material";
291 return result;
292 }
294 {
295 static const std::string result = "Script";
296 return result;
297 }
299 {
300 static const std::string result = "Font";
301 return result;
302 }
304 {
305 static const std::string result = "UI Tree";
306 return result;
307 }
309 {
310 static const std::string result = "Style Sheet";
311 return result;
312 }
313 if(is_directory)
314 {
315 static const std::string result = "Folder";
316 return result;
317 }
318
319 static const std::string result;
320 return result;
321}
322
323template<typename T>
324inline auto get_type() -> const std::string&
325{
326 if constexpr(std::is_same_v<T, gfx::texture>)
327 {
328 static const std::string result = "Texture";
329 return result;
330 }
331 if constexpr(std::is_same_v<T, gfx::shader>)
332 {
333 static const std::string result = "Shader";
334 return result;
335 }
336 if constexpr(std::is_same_v<T, unravel::material>)
337 {
338 static const std::string result = "Material";
339 return result;
340 }
341 if constexpr(std::is_same_v<T, unravel::mesh>)
342 {
343 static const std::string result = "Mesh";
344 return result;
345 }
346 if constexpr(std::is_same_v<T, unravel::animation_clip>)
347 {
348 static const std::string result = "Animation Clip";
349 return result;
350 }
351 if constexpr(std::is_same_v<T, unravel::audio_clip>)
352 {
353 static const std::string result = "Audio Clip";
354 return result;
355 }
356 if constexpr(std::is_same_v<T, unravel::prefab>)
357 {
358 static const std::string result = "Prefab";
359 return result;
360 }
361 if constexpr(std::is_same_v<T, unravel::scene_prefab>)
362 {
363 static const std::string result = "Scene";
364 return result;
365 }
366 if constexpr(std::is_same_v<T, unravel::physics_material>)
367 {
368 static const std::string result = "Physics Material";
369 return result;
370 }
371 if constexpr(std::is_same_v<T, unravel::script>)
372 {
373 static const std::string result = "Script";
374 return result;
375 }
376 if constexpr(std::is_same_v<T, unravel::script_library>)
377 {
378 static const std::string result = "Scripts";
379 return result;
380 }
381 if constexpr(std::is_same_v<T, unravel::font>)
382 {
383 static const std::string result = "Font";
384 return result;
385 }
386 if constexpr(std::is_same_v<T, unravel::ui_tree>)
387 {
388 static const std::string result = "UI Tree";
389 return result;
390 }
391 if constexpr(std::is_same_v<T, unravel::style_sheet>)
392 {
393 static const std::string result = "Style Sheet";
394 return result;
395 }
396
397 static const std::string result;
398 return result;
399}
400
401} // namespace ex
ImGui::Font::Enum font
Definition hub.cpp:24
auto get_suported_formats< gfx::shader >() -> const std::vector< std::string > &
auto get_all_formats() -> const std::vector< std::vector< std::string > > &
auto get_format(bool include_dot=true) -> std::string
auto get_compiled_directory_no_slash(const std::string &prefix={}) -> std::string
auto get_suported_formats< unravel::ui_tree >() -> const std::vector< std::string > &
auto get_data_directory(const std::string &prefix={}) -> std::string
auto get_suported_formats< unravel::audio_clip >() -> const std::vector< std::string > &
auto get_type() -> const std::string &
auto is_format(const std::string &ex) -> bool
auto get_meta_directory_no_slash(const std::string &prefix={}) -> std::string
auto get_suported_formats< unravel::scene_prefab >() -> const std::vector< std::string > &
auto get_suported_formats< unravel::style_sheet >() -> const std::vector< std::string > &
auto get_suported_formats< unravel::animation_clip >() -> const std::vector< std::string > &
auto get_suported_formats< unravel::font >() -> const std::vector< std::string > &
auto get_meta_format() -> const std::string &
auto get_compiled_directory(const std::string &prefix={}) -> std::string
auto get_suported_formats< unravel::physics_material >() -> const std::vector< std::string > &
auto get_suported_formats< gfx::texture >() -> const std::vector< std::string > &
auto get_suported_dependencies_formats< gfx::shader >() -> const std::vector< std::string > &
auto get_meta_directory(const std::string &prefix={}) -> std::string
auto get_suported_formats< unravel::prefab >() -> const std::vector< std::string > &
auto get_suported_formats< unravel::material >() -> const std::vector< std::string > &
auto get_suported_formats< unravel::mesh >() -> const std::vector< std::string > &
auto get_suported_formats() -> const std::vector< std::string > &
auto get_suported_dependencies_formats< unravel::ui_tree >() -> const std::vector< std::string > &
auto get_data_directory_no_slash(const std::string &prefix={}) -> std::string
auto get_suported_dependencies_formats() -> const std::vector< std::string > &
auto get_suported_formats_with_wildcard() -> std::vector< std::string >
auto get_suported_formats< unravel::script >() -> const std::vector< std::string > &