Core: Handle disabled class detection in ClassDB
This commit is contained in:
@ -41,6 +41,24 @@
|
||||
|
||||
#include <type_traits>
|
||||
|
||||
template <typename T, typename = void>
|
||||
struct is_class_enabled;
|
||||
|
||||
template <>
|
||||
struct is_class_enabled<Object> : std::true_type {};
|
||||
|
||||
template <typename T>
|
||||
struct is_class_enabled<T, std::enable_if_t<std::is_base_of_v<Object, T>>> {
|
||||
static constexpr bool value = is_class_enabled<typename T::super_type>::value;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
inline constexpr bool is_class_enabled_v = is_class_enabled<T>::value;
|
||||
|
||||
#define GD_IS_CLASS_ENABLED(m_class) is_class_enabled_v<m_class>
|
||||
|
||||
#include "core/disabled_classes.gen.h"
|
||||
|
||||
#define DEFVAL(m_defval) (m_defval)
|
||||
#define DEFVAL_ARRAY DEFVAL(ClassDB::default_array_arg)
|
||||
|
||||
@ -551,25 +569,24 @@ public:
|
||||
|
||||
#endif // DEBUG_ENABLED
|
||||
|
||||
#define GDREGISTER_CLASS(m_class) \
|
||||
if (m_class::_class_is_enabled) { \
|
||||
::ClassDB::register_class<m_class>(); \
|
||||
#define GDREGISTER_CLASS(m_class) \
|
||||
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
|
||||
::ClassDB::register_class<m_class>(); \
|
||||
}
|
||||
#define GDREGISTER_VIRTUAL_CLASS(m_class) \
|
||||
if (m_class::_class_is_enabled) { \
|
||||
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
|
||||
::ClassDB::register_class<m_class>(true); \
|
||||
}
|
||||
#define GDREGISTER_ABSTRACT_CLASS(m_class) \
|
||||
if (m_class::_class_is_enabled) { \
|
||||
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
|
||||
::ClassDB::register_abstract_class<m_class>(); \
|
||||
}
|
||||
#define GDREGISTER_INTERNAL_CLASS(m_class) \
|
||||
if (m_class::_class_is_enabled) { \
|
||||
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
|
||||
::ClassDB::register_internal_class<m_class>(); \
|
||||
}
|
||||
|
||||
#define GDREGISTER_RUNTIME_CLASS(m_class) \
|
||||
if (m_class::_class_is_enabled) { \
|
||||
if constexpr (GD_IS_CLASS_ENABLED(m_class)) { \
|
||||
::ClassDB::register_runtime_class<m_class>(); \
|
||||
}
|
||||
|
||||
|
||||
@ -30,7 +30,6 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "core/disabled_classes.gen.h"
|
||||
#include "core/extension/gdextension_interface.h"
|
||||
#include "core/object/message_queue.h"
|
||||
#include "core/object/object_id.h"
|
||||
@ -135,9 +134,6 @@ enum PropertyUsageFlags {
|
||||
PROPERTY_USAGE_NO_EDITOR = PROPERTY_USAGE_STORAGE,
|
||||
};
|
||||
|
||||
// Respective values are defined by disabled_classes.gen.h
|
||||
#define GD_IS_CLASS_ENABLED(m_class) m_class::_class_is_enabled
|
||||
|
||||
#define ADD_SIGNAL(m_signal) ::ClassDB::add_signal(get_class_static(), m_signal)
|
||||
#define ADD_PROPERTY(m_property, m_setter, m_getter) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter))
|
||||
#define ADD_PROPERTYI(m_property, m_setter, m_getter, m_index) ::ClassDB::add_property(get_class_static(), m_property, StringName(m_setter), StringName(m_getter), m_index)
|
||||
@ -498,7 +494,6 @@ private:
|
||||
friend class ::ClassDB; \
|
||||
\
|
||||
public: \
|
||||
static constexpr bool _class_is_enabled = !bool(GD_IS_DEFINED(ClassDB_Disable_##m_class)) && m_inherits::_class_is_enabled; \
|
||||
virtual const StringName *_get_class_namev() const override { \
|
||||
return &get_class_static(); \
|
||||
} \
|
||||
@ -786,8 +781,6 @@ public: // Should be protected, but bug in clang++.
|
||||
_FORCE_INLINE_ static void register_custom_data_to_otdb() {}
|
||||
|
||||
public:
|
||||
static constexpr bool _class_is_enabled = true;
|
||||
|
||||
void notify_property_list_changed();
|
||||
|
||||
static void *get_class_ptr_static() {
|
||||
|
||||
Reference in New Issue
Block a user