|
@@ -104,6 +104,7 @@ public:
|
|
|
private:
|
|
|
// This may only contain custom classes, not Godot classes
|
|
|
static std::unordered_map<StringName, ClassInfo> classes;
|
|
|
+ static std::unordered_map<StringName, const GDExtensionInstanceBindingCallbacks *> instance_binding_callbacks;
|
|
|
|
|
|
static MethodBind *bind_methodfi(uint32_t p_flags, MethodBind *p_bind, const MethodDefinition &method_name, const void **p_defs, int p_defcount);
|
|
|
static void initialize_class(const ClassInfo &cl);
|
|
@@ -117,6 +118,8 @@ public:
|
|
|
static void register_class(bool p_virtual = false);
|
|
|
template <class T>
|
|
|
static void register_abstract_class();
|
|
|
+ template <class T>
|
|
|
+ static void register_engine_class();
|
|
|
|
|
|
template <class N, class M, typename... VarArgs>
|
|
|
static MethodBind *bind_method(N p_method_name, M p_method, VarArgs... p_args);
|
|
@@ -137,6 +140,7 @@ public:
|
|
|
static MethodBind *get_method(const StringName &p_class, const StringName &p_method);
|
|
|
|
|
|
static GDExtensionClassCallVirtual get_virtual_func(void *p_userdata, GDExtensionConstStringNamePtr p_name);
|
|
|
+ static const GDExtensionInstanceBindingCallbacks *get_instance_binding_callbacks(const StringName &p_class);
|
|
|
|
|
|
static void initialize(GDExtensionInitializationLevel p_level);
|
|
|
static void deinitialize(GDExtensionInitializationLevel p_level);
|
|
@@ -161,6 +165,8 @@ public:
|
|
|
|
|
|
template <class T, bool is_abstract>
|
|
|
void ClassDB::_register_class(bool p_virtual) {
|
|
|
+ instance_binding_callbacks[T::get_class_static()] = &T::___binding_callbacks;
|
|
|
+
|
|
|
// Register this class within our plugin
|
|
|
ClassInfo cl;
|
|
|
cl.name = T::get_class_static();
|
|
@@ -213,6 +219,11 @@ void ClassDB::register_abstract_class() {
|
|
|
ClassDB::_register_class<T, true>();
|
|
|
}
|
|
|
|
|
|
+template <class T>
|
|
|
+void ClassDB::register_engine_class() {
|
|
|
+ instance_binding_callbacks[T::get_class_static()] = &T::___binding_callbacks;
|
|
|
+}
|
|
|
+
|
|
|
template <class N, class M, typename... VarArgs>
|
|
|
MethodBind *ClassDB::bind_method(N p_method_name, M p_method, VarArgs... p_args) {
|
|
|
Variant args[sizeof...(p_args) + 1] = { p_args..., Variant() }; // +1 makes sure zero sized arrays are also supported.
|