@@ -110,7 +110,7 @@ class ClassDB {
110110static  void  bind_method_godot (const  StringName &p_class_name, MethodBind *p_method);
111111
112112template  <class  T , bool  is_abstract>
113- static  void  _register_class (bool  p_virtual = false , bool  p_exposed = true );
113+ static  void  _register_class (bool  p_virtual = false , bool  p_exposed = true ,  bool  p_gameplay =  false );
114114
115115public: 
116116template  <class  T >
@@ -119,6 +119,8 @@ class ClassDB {
119119static  void  register_abstract_class ();
120120template  <class  T >
121121static  void  register_internal_class ();
122+ template  <class  T >
123+ static  void  register_gameplay_class ();
122124
123125_FORCE_INLINE_ static  void  _register_engine_class (const  StringName &p_name, const  GDExtensionInstanceBindingCallbacks *p_callbacks) {
124126instance_binding_callbacks[p_name] = p_callbacks;
@@ -169,7 +171,7 @@ class ClassDB {
169171}
170172
171173template  <class  T , bool  is_abstract>
172- void  ClassDB::_register_class (bool  p_virtual, bool  p_exposed) {
174+ void  ClassDB::_register_class (bool  p_virtual, bool  p_exposed,  bool  p_gameplay ) {
173175static_assert (TypesAreSame<typename  T::self_type, T>::value, " Class not declared properly, please use GDCLASS." 
174176instance_binding_callbacks[T::get_class_static ()] = &T::_gde_binding_callbacks;
175177
@@ -187,10 +189,11 @@ void ClassDB::_register_class(bool p_virtual, bool p_exposed) {
187189class_register_order.push_back (cl.name );
188190
189191//  Register this class with Godot
190- GDExtensionClassCreationInfo2  class_info = {
192+ GDExtensionClassCreationInfo3  class_info = {
191193p_virtual, //  GDExtensionBool is_virtual;
192194is_abstract, //  GDExtensionBool is_abstract;
193195p_exposed, //  GDExtensionBool is_exposed;
196+ p_gameplay, //  GDExtensionBool is_gameplay;
194197T::set_bind, //  GDExtensionClassSet set_func;
195198T::get_bind, //  GDExtensionClassGet get_func;
196199T::has_get_property_list () ? T::get_property_list_bind : nullptr , //  GDExtensionClassGetPropertyList get_property_list_func;
@@ -212,7 +215,7 @@ void ClassDB::_register_class(bool p_virtual, bool p_exposed) {
212215(void  *)&T::get_class_static (), //  void *class_userdata;
213216};
214217
215- internal::gdextension_interface_classdb_register_extension_class2  (internal::library, cl.name ._native_ptr (), cl.parent_name ._native_ptr (), &class_info);
218+ internal::gdextension_interface_classdb_register_extension_class3  (internal::library, cl.name ._native_ptr (), cl.parent_name ._native_ptr (), &class_info);
216219
217220//  call bind_methods etc. to register all members of the class
218221T::initialize_class ();
@@ -236,6 +239,11 @@ void ClassDB::register_internal_class() {
236239ClassDB::_register_class<T, false >(false , false );
237240}
238241
242+ template  <class  T >
243+ void  ClassDB::register_gameplay_class () {
244+ ClassDB::_register_class<T, false >(false , true , true );
245+ }
246+ 
239247template  <class  N , class  M , typename ... VarArgs>
240248MethodBind *ClassDB::bind_method (N p_method_name, M p_method, VarArgs... p_args) {
241249Variant args[sizeof ...(p_args) + 1 ] = { p_args..., Variant () }; //  +1 makes sure zero sized arrays are also supported.
@@ -295,6 +303,7 @@ MethodBind *ClassDB::bind_vararg_method(uint32_t p_flags, StringName p_name, M p
295303#define  GDREGISTER_VIRTUAL_CLASS (m_class ) ClassDB::register_class<m_class>(true );
296304#define  GDREGISTER_ABSTRACT_CLASS (m_class ) ClassDB::register_abstract_class<m_class>();
297305#define  GDREGISTER_INTERNAL_CLASS (m_class ) ClassDB::register_internal_class<m_class>();
306+ #define  GDREGISTER_GAMEPLAY_CLASS (m_class ) ClassDB::register_gameplay_class<m_class>();
298307
299308} //  namespace godot
300309
0 commit comments