#ifndef GODOT_EXTRA_MACROS_H #define GODOT_EXTRA_MACROS_H #define PRELOAD_SCENE(m_scene) \ do { \ if (Node * node{ m_scene->instantiate() }) { \ if (Node3D * node_3d{ cast_to(node) }) { \ node_3d->set_visible(false); \ } \ get_tree()->get_current_scene()->add_child(node); \ node->connect("ready", callable_mp(node, &Node::queue_free)); \ } \ } while (0) #define BIND_GET_SET(m_property) \ ClassDB::bind_method(D_METHOD("set_" #m_property, #m_property), \ &self_type::set_##m_property); \ ClassDB::bind_method(D_METHOD("get_" #m_property), \ &self_type::get_##m_property) #define BIND_HPROPERTY(m_type, m_property, ...) \ BIND_GET_SET(m_property); \ ADD_PROPERTY(PropertyInfo(m_type, #m_property, __VA_ARGS__), \ "set_" #m_property, "get_" #m_property) #define BIND_PROPERTY(m_type, m_property) \ BIND_GET_SET(m_property); \ ADD_PROPERTY(PropertyInfo(m_type, #m_property), "set_" #m_property, \ "get_" #m_property) #define GETSET(m_value, ...) \ { \ auto m_value{ get_##m_value() }; \ __VA_ARGS__ \ set_##m_value(m_value); \ } #endif // !GODOT_EXTRA_MACROS_H