Unravel Engine C++ Reference
Loading...
Searching...
No Matches
gizmo.h
Go to the documentation of this file.
1#pragma once
2
3#include "entt/meta/factory.hpp"
4#include <base/basetypes.hpp>
5#include <context/context.hpp>
9
10namespace unravel
11{
12class camera;
13
15{
16 std::vector<std::function<void()>> callbacks;
17};
18
19struct gizmo : crtp_meta_type<gizmo>
20{
21 virtual ~gizmo() = default;
22
23 virtual void draw(rtti::context& ctx, entt::meta_any& var, const camera& cam, gfx::dd_raii& dd, dd_2d_raii& dd_2d) = 0;
24 virtual void draw_billboard(rtti::context& ctx, entt::meta_any& var, const camera& cam, gfx::dd_raii& dd) = 0;
25
26 template<typename T>
27 static void create_and_register(const entt::meta_type& inspected_type,
28 std::unordered_map<entt::id_type, std::shared_ptr<gizmo>>& type_map)
29 {
30 type_map[inspected_type.info().index()] = std::make_shared<T>();
31 }
32};
33
35{
36 entt::meta_factory<gizmo>{}.type("gizmo"_hs);
37}
38#define GIZMO_REFLECT(gizmo_renderer_type, inspected_type) \
39 REFLECT_INLINE(gizmo_renderer_type) \
40 { \
41 entt::meta_factory<gizmo_renderer_type>{} \
42 .type(entt::hashed_string{#gizmo_renderer_type}) \
43 .custom<entt::attributes>( \
44 entt::attributes{entt::attribute{"inspected_type", entt::resolve<inspected_type>()}}) \
45 .base<gizmo>() \
46 .func<&gizmo::create_and_register<gizmo_renderer_type>>("create_and_register"_hs); \
47 }
48
49} // namespace unravel
Class representing a camera. Contains functionality for manipulating and updating a camera....
Definition camera.h:62
#define REFLECT_INLINE(cls)
Definition reflection.h:144
std::vector< std::function< void()> > callbacks
Definition gizmo.h:16
virtual ~gizmo()=default
virtual void draw_billboard(rtti::context &ctx, entt::meta_any &var, const camera &cam, gfx::dd_raii &dd)=0
static void create_and_register(const entt::meta_type &inspected_type, std::unordered_map< entt::id_type, std::shared_ptr< gizmo > > &type_map)
Definition gizmo.h:27
virtual void draw(rtti::context &ctx, entt::meta_any &var, const camera &cam, gfx::dd_raii &dd, dd_2d_raii &dd_2d)=0