2
0
Эх сурвалжийг харах

Merge pull request #50381 from reduz/implement-disable-classes

Implement the ability to disable classes
Rémi Verschelde 4 жил өмнө
parent
commit
8747f25653
44 өөрчлөгдсөн 822 нэмэгдсэн , 790 устгасан
  1. 2 0
      SConstruct
  2. 11 0
      core/object/class_db.h
  3. 79 79
      core/register_core_types.cpp
  4. 7 0
      core/typedefs.h
  5. 37 37
      editor/editor_node.cpp
  6. 1 1
      editor/editor_settings.cpp
  7. 1 1
      main/main.cpp
  8. 12 0
      methods.py
  9. 1 1
      modules/basis_universal/register_types.cpp
  10. 9 9
      modules/csg/register_types.cpp
  11. 1 1
      modules/enet/register_types.cpp
  12. 1 1
      modules/fbx/register_types.cpp
  13. 1 1
      modules/gdnative/nativescript/register_types.cpp
  14. 3 3
      modules/gdnative/net/register_types.cpp
  15. 1 1
      modules/gdnative/pluginscript/register_types.cpp
  16. 2 2
      modules/gdnative/register_types.cpp
  17. 1 1
      modules/gdnative/videodecoder/register_types.cpp
  18. 1 1
      modules/gdnative/xr/register_types.cpp
  19. 3 3
      modules/gdscript/language_server/gdscript_language_server.cpp
  20. 1 1
      modules/gdscript/register_types.cpp
  21. 15 15
      modules/gltf/register_types.cpp
  22. 1 1
      modules/gridmap/register_types.cpp
  23. 1 1
      modules/jsonrpc/register_types.cpp
  24. 1 1
      modules/lightmapper_rd/register_types.cpp
  25. 1 1
      modules/minimp3/register_types.cpp
  26. 1 1
      modules/mobile_vr/register_types.cpp
  27. 2 2
      modules/mono/register_types.cpp
  28. 1 1
      modules/navigation/register_types.cpp
  29. 2 2
      modules/opensimplex/register_types.cpp
  30. 2 2
      modules/regex/register_types.cpp
  31. 1 1
      modules/stb_vorbis/register_types.cpp
  32. 1 1
      modules/theora/register_types.cpp
  33. 2 2
      modules/upnp/register_types.cpp
  34. 49 49
      modules/visual_script/register_types.cpp
  35. 1 1
      modules/webm/register_types.cpp
  36. 4 4
      modules/webrtc/register_types.cpp
  37. 1 1
      modules/websocket/register_types.cpp
  38. 1 1
      modules/webxr/register_types.cpp
  39. 3 3
      platform/android/api/api.cpp
  40. 1 1
      platform/android/java_godot_lib_jni.cpp
  41. 2 2
      platform/javascript/api/api.cpp
  42. 472 472
      scene/register_scene_types.cpp
  43. 80 80
      servers/register_server_types.cpp
  44. 2 2
      tests/test_object.h

+ 2 - 0
SConstruct

@@ -142,6 +142,7 @@ opts.Add("extra_suffix", "Custom extra suffix added to the base filename of all
 opts.Add(BoolVariable("vsproj", "Generate a Visual Studio solution", False))
 opts.Add(BoolVariable("vsproj", "Generate a Visual Studio solution", False))
 opts.Add(BoolVariable("disable_3d", "Disable 3D nodes for a smaller executable", False))
 opts.Add(BoolVariable("disable_3d", "Disable 3D nodes for a smaller executable", False))
 opts.Add(BoolVariable("disable_advanced_gui", "Disable advanced GUI nodes and behaviors", False))
 opts.Add(BoolVariable("disable_advanced_gui", "Disable advanced GUI nodes and behaviors", False))
+opts.Add("disable_classes", "Disable given classes (comma separated)", "")
 opts.Add(BoolVariable("modules_enabled_by_default", "If no, disable all modules except ones explicitly enabled", True))
 opts.Add(BoolVariable("modules_enabled_by_default", "If no, disable all modules except ones explicitly enabled", True))
 opts.Add(BoolVariable("no_editor_splash", "Don't use the custom splash screen for the editor", False))
 opts.Add(BoolVariable("no_editor_splash", "Don't use the custom splash screen for the editor", False))
 opts.Add("system_certs_path", "Use this path as SSL certificates default for editor (for package maintainers)", "")
 opts.Add("system_certs_path", "Use this path as SSL certificates default for editor (for package maintainers)", "")
@@ -642,6 +643,7 @@ if selected_platform in platform_list:
 
 
     if env["tools"]:
     if env["tools"]:
         env.Append(CPPDEFINES=["TOOLS_ENABLED"])
         env.Append(CPPDEFINES=["TOOLS_ENABLED"])
+    methods.write_disabled_classes(env["disable_classes"].split(","))
     if env["disable_3d"]:
     if env["disable_3d"]:
         if env["tools"]:
         if env["tools"]:
             print(
             print(

+ 11 - 0
core/object/class_db.h

@@ -434,4 +434,15 @@ public:
 
 
 #endif
 #endif
 
 
+#define GDREGISTER_CLASS(m_class)                    \
+	if (!GD_IS_DEFINED(ClassDB_Disable_##m_class)) { \
+		ClassDB::register_class<m_class>();          \
+	}
+#define GDREGISTER_VIRTUAL_CLASS(m_class)            \
+	if (!GD_IS_DEFINED(ClassDB_Disable_##m_class)) { \
+		ClassDB::register_virtual_class<m_class>();  \
+	}
+
+#include "core/disabled_classes.gen.h"
+
 #endif // CLASS_DB_H
 #endif // CLASS_DB_H

+ 79 - 79
core/register_core_types.cpp

@@ -131,50 +131,50 @@ void register_core_types() {
 	resource_format_image.instantiate();
 	resource_format_image.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_format_image);
 	ResourceLoader::add_resource_format_loader(resource_format_image);
 
 
-	ClassDB::register_class<Object>();
-
-	ClassDB::register_virtual_class<Script>();
-
-	ClassDB::register_class<RefCounted>();
-	ClassDB::register_class<WeakRef>();
-	ClassDB::register_class<Resource>();
-	ClassDB::register_class<Image>();
-
-	ClassDB::register_virtual_class<InputEvent>();
-	ClassDB::register_virtual_class<InputEventWithModifiers>();
-	ClassDB::register_virtual_class<InputEventFromWindow>();
-	ClassDB::register_class<InputEventKey>();
-	ClassDB::register_virtual_class<InputEventMouse>();
-	ClassDB::register_class<InputEventMouseButton>();
-	ClassDB::register_class<InputEventMouseMotion>();
-	ClassDB::register_class<InputEventJoypadButton>();
-	ClassDB::register_class<InputEventJoypadMotion>();
-	ClassDB::register_class<InputEventScreenDrag>();
-	ClassDB::register_class<InputEventScreenTouch>();
-	ClassDB::register_class<InputEventAction>();
-	ClassDB::register_virtual_class<InputEventGesture>();
-	ClassDB::register_class<InputEventMagnifyGesture>();
-	ClassDB::register_class<InputEventPanGesture>();
-	ClassDB::register_class<InputEventMIDI>();
+	GDREGISTER_CLASS(Object);
+
+	GDREGISTER_VIRTUAL_CLASS(Script);
+
+	GDREGISTER_CLASS(RefCounted);
+	GDREGISTER_CLASS(WeakRef);
+	GDREGISTER_CLASS(Resource);
+	GDREGISTER_CLASS(Image);
+
+	GDREGISTER_VIRTUAL_CLASS(InputEvent);
+	GDREGISTER_VIRTUAL_CLASS(InputEventWithModifiers);
+	GDREGISTER_VIRTUAL_CLASS(InputEventFromWindow);
+	GDREGISTER_CLASS(InputEventKey);
+	GDREGISTER_VIRTUAL_CLASS(InputEventMouse);
+	GDREGISTER_CLASS(InputEventMouseButton);
+	GDREGISTER_CLASS(InputEventMouseMotion);
+	GDREGISTER_CLASS(InputEventJoypadButton);
+	GDREGISTER_CLASS(InputEventJoypadMotion);
+	GDREGISTER_CLASS(InputEventScreenDrag);
+	GDREGISTER_CLASS(InputEventScreenTouch);
+	GDREGISTER_CLASS(InputEventAction);
+	GDREGISTER_VIRTUAL_CLASS(InputEventGesture);
+	GDREGISTER_CLASS(InputEventMagnifyGesture);
+	GDREGISTER_CLASS(InputEventPanGesture);
+	GDREGISTER_CLASS(InputEventMIDI);
 
 
 	// Network
 	// Network
-	ClassDB::register_virtual_class<IP>();
+	GDREGISTER_VIRTUAL_CLASS(IP);
 
 
-	ClassDB::register_virtual_class<StreamPeer>();
-	ClassDB::register_class<StreamPeerBuffer>();
-	ClassDB::register_class<StreamPeerTCP>();
-	ClassDB::register_class<TCPServer>();
+	GDREGISTER_VIRTUAL_CLASS(StreamPeer);
+	GDREGISTER_CLASS(StreamPeerBuffer);
+	GDREGISTER_CLASS(StreamPeerTCP);
+	GDREGISTER_CLASS(TCPServer);
 
 
-	ClassDB::register_virtual_class<PacketPeer>();
-	ClassDB::register_class<PacketPeerStream>();
-	ClassDB::register_class<PacketPeerUDP>();
-	ClassDB::register_class<UDPServer>();
+	GDREGISTER_VIRTUAL_CLASS(PacketPeer);
+	GDREGISTER_CLASS(PacketPeerStream);
+	GDREGISTER_CLASS(PacketPeerUDP);
+	GDREGISTER_CLASS(UDPServer);
 
 
 	ClassDB::register_custom_instance_class<HTTPClient>();
 	ClassDB::register_custom_instance_class<HTTPClient>();
 
 
 	// Crypto
 	// Crypto
-	ClassDB::register_class<HashingContext>();
-	ClassDB::register_class<AESContext>();
+	GDREGISTER_CLASS(HashingContext);
+	GDREGISTER_CLASS(AESContext);
 	ClassDB::register_custom_instance_class<X509Certificate>();
 	ClassDB::register_custom_instance_class<X509Certificate>();
 	ClassDB::register_custom_instance_class<CryptoKey>();
 	ClassDB::register_custom_instance_class<CryptoKey>();
 	ClassDB::register_custom_instance_class<HMACContext>();
 	ClassDB::register_custom_instance_class<HMACContext>();
@@ -188,42 +188,42 @@ void register_core_types() {
 	resource_format_loader_crypto.instantiate();
 	resource_format_loader_crypto.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_format_loader_crypto);
 	ResourceLoader::add_resource_format_loader(resource_format_loader_crypto);
 
 
-	ClassDB::register_virtual_class<MultiplayerPeer>();
-	ClassDB::register_class<MultiplayerAPI>();
-	ClassDB::register_class<MainLoop>();
-	ClassDB::register_class<Translation>();
-	ClassDB::register_class<OptimizedTranslation>();
-	ClassDB::register_class<UndoRedo>();
-	ClassDB::register_class<TriangleMesh>();
+	GDREGISTER_VIRTUAL_CLASS(MultiplayerPeer);
+	GDREGISTER_CLASS(MultiplayerAPI);
+	GDREGISTER_CLASS(MainLoop);
+	GDREGISTER_CLASS(Translation);
+	GDREGISTER_CLASS(OptimizedTranslation);
+	GDREGISTER_CLASS(UndoRedo);
+	GDREGISTER_CLASS(TriangleMesh);
 
 
-	ClassDB::register_class<ResourceFormatLoader>();
-	ClassDB::register_class<ResourceFormatSaver>();
+	GDREGISTER_CLASS(ResourceFormatLoader);
+	GDREGISTER_CLASS(ResourceFormatSaver);
 
 
-	ClassDB::register_class<_File>();
-	ClassDB::register_class<_Directory>();
-	ClassDB::register_class<_Thread>();
-	ClassDB::register_class<_Mutex>();
-	ClassDB::register_class<_Semaphore>();
+	GDREGISTER_CLASS(_File);
+	GDREGISTER_CLASS(_Directory);
+	GDREGISTER_CLASS(_Thread);
+	GDREGISTER_CLASS(_Mutex);
+	GDREGISTER_CLASS(_Semaphore);
 
 
-	ClassDB::register_class<XMLParser>();
-	ClassDB::register_class<JSON>();
+	GDREGISTER_CLASS(XMLParser);
+	GDREGISTER_CLASS(JSON);
 
 
-	ClassDB::register_class<ConfigFile>();
+	GDREGISTER_CLASS(ConfigFile);
 
 
-	ClassDB::register_class<PCKPacker>();
+	GDREGISTER_CLASS(PCKPacker);
 
 
-	ClassDB::register_class<PackedDataContainer>();
-	ClassDB::register_virtual_class<PackedDataContainerRef>();
-	ClassDB::register_class<AStar>();
-	ClassDB::register_class<AStar2D>();
-	ClassDB::register_class<EncodedObjectAsID>();
-	ClassDB::register_class<RandomNumberGenerator>();
+	GDREGISTER_CLASS(PackedDataContainer);
+	GDREGISTER_VIRTUAL_CLASS(PackedDataContainerRef);
+	GDREGISTER_CLASS(AStar);
+	GDREGISTER_CLASS(AStar2D);
+	GDREGISTER_CLASS(EncodedObjectAsID);
+	GDREGISTER_CLASS(RandomNumberGenerator);
 
 
-	ClassDB::register_virtual_class<ResourceImporter>();
+	GDREGISTER_VIRTUAL_CLASS(ResourceImporter);
 
 
-	ClassDB::register_class<NativeExtension>();
+	GDREGISTER_CLASS(NativeExtension);
 
 
-	ClassDB::register_virtual_class<NativeExtensionManager>();
+	GDREGISTER_VIRTUAL_CLASS(NativeExtensionManager);
 
 
 	native_extension_manager = memnew(NativeExtensionManager);
 	native_extension_manager = memnew(NativeExtensionManager);
 
 
@@ -253,22 +253,22 @@ void register_core_settings() {
 }
 }
 
 
 void register_core_singletons() {
 void register_core_singletons() {
-	ClassDB::register_class<ProjectSettings>();
-	ClassDB::register_virtual_class<IP>();
-	ClassDB::register_class<_Geometry2D>();
-	ClassDB::register_class<_Geometry3D>();
-	ClassDB::register_class<_ResourceLoader>();
-	ClassDB::register_class<_ResourceSaver>();
-	ClassDB::register_class<_OS>();
-	ClassDB::register_class<_Engine>();
-	ClassDB::register_class<_ClassDB>();
-	ClassDB::register_class<_Marshalls>();
-	ClassDB::register_class<TranslationServer>();
-	ClassDB::register_virtual_class<Input>();
-	ClassDB::register_class<InputMap>();
-	ClassDB::register_class<Expression>();
-	ClassDB::register_class<_EngineDebugger>();
-	ClassDB::register_class<Time>();
+	GDREGISTER_CLASS(ProjectSettings);
+	GDREGISTER_VIRTUAL_CLASS(IP);
+	GDREGISTER_CLASS(_Geometry2D);
+	GDREGISTER_CLASS(_Geometry3D);
+	GDREGISTER_CLASS(_ResourceLoader);
+	GDREGISTER_CLASS(_ResourceSaver);
+	GDREGISTER_CLASS(_OS);
+	GDREGISTER_CLASS(_Engine);
+	GDREGISTER_CLASS(_ClassDB);
+	GDREGISTER_CLASS(_Marshalls);
+	GDREGISTER_CLASS(TranslationServer);
+	GDREGISTER_VIRTUAL_CLASS(Input);
+	GDREGISTER_CLASS(InputMap);
+	GDREGISTER_CLASS(Expression);
+	GDREGISTER_CLASS(_EngineDebugger);
+	GDREGISTER_CLASS(Time);
 
 
 	Engine::get_singleton()->add_singleton(Engine::Singleton("ProjectSettings", ProjectSettings::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("ProjectSettings", ProjectSettings::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("IP", IP::get_singleton(), "IP"));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("IP", IP::get_singleton(), "IP"));

+ 7 - 0
core/typedefs.h

@@ -281,4 +281,11 @@ struct BuildIndexSequence<0, Is...> : IndexSequence<Is...> {};
 #define DEBUG_METHODS_ENABLED
 #define DEBUG_METHODS_ENABLED
 #endif
 #endif
 
 
+// Macro GD_IS_DEFINED() allows to check if a macro is defined. It needs to be defined to anything (say 1) to work.
+#define __GDARG_PLACEHOLDER_1 0,
+#define __gd_take_second_arg(__ignored, val, ...) val
+#define ____gd_is_defined(arg1_or_junk) __gd_take_second_arg(arg1_or_junk 1, 0)
+#define ___gd_is_defined(val) ____gd_is_defined(__GDARG_PLACEHOLDER_##val)
+#define GD_IS_DEFINED(x) ___gd_is_defined(x)
+
 #endif // TYPEDEFS_H
 #endif // TYPEDEFS_H

+ 37 - 37
editor/editor_node.cpp

@@ -3736,46 +3736,46 @@ void EditorNode::register_editor_types() {
 	ResourceLoader::set_timestamp_on_load(true);
 	ResourceLoader::set_timestamp_on_load(true);
 	ResourceSaver::set_timestamp_on_save(true);
 	ResourceSaver::set_timestamp_on_save(true);
 
 
-	ClassDB::register_class<EditorPaths>();
-	ClassDB::register_class<EditorPlugin>();
-	ClassDB::register_class<EditorTranslationParserPlugin>();
-	ClassDB::register_class<EditorImportPlugin>();
-	ClassDB::register_class<EditorScript>();
-	ClassDB::register_class<EditorSelection>();
-	ClassDB::register_class<EditorFileDialog>();
-	ClassDB::register_virtual_class<EditorSettings>();
-	ClassDB::register_class<EditorNode3DGizmo>();
-	ClassDB::register_class<EditorNode3DGizmoPlugin>();
-	ClassDB::register_virtual_class<EditorResourcePreview>();
-	ClassDB::register_class<EditorResourcePreviewGenerator>();
-	ClassDB::register_virtual_class<EditorFileSystem>();
-	ClassDB::register_class<EditorFileSystemDirectory>();
-	ClassDB::register_class<EditorVCSInterface>();
-	ClassDB::register_virtual_class<ScriptEditor>();
-	ClassDB::register_virtual_class<ScriptEditorBase>();
-	ClassDB::register_class<EditorSyntaxHighlighter>();
-	ClassDB::register_virtual_class<EditorInterface>();
-	ClassDB::register_class<EditorExportPlugin>();
-	ClassDB::register_class<EditorResourceConversionPlugin>();
-	ClassDB::register_class<EditorSceneImporter>();
-	ClassDB::register_class<EditorInspector>();
-	ClassDB::register_class<EditorInspectorPlugin>();
-	ClassDB::register_class<EditorProperty>();
-	ClassDB::register_class<AnimationTrackEditPlugin>();
-	ClassDB::register_class<ScriptCreateDialog>();
-	ClassDB::register_class<EditorFeatureProfile>();
-	ClassDB::register_class<EditorSpinSlider>();
-	ClassDB::register_class<EditorResourcePicker>();
-	ClassDB::register_class<EditorScriptPicker>();
-	ClassDB::register_class<EditorSceneImporterMesh>();
-	ClassDB::register_class<EditorSceneImporterMeshNode3D>();
-
-	ClassDB::register_virtual_class<FileSystemDock>();
+	GDREGISTER_CLASS(EditorPaths);
+	GDREGISTER_CLASS(EditorPlugin);
+	GDREGISTER_CLASS(EditorTranslationParserPlugin);
+	GDREGISTER_CLASS(EditorImportPlugin);
+	GDREGISTER_CLASS(EditorScript);
+	GDREGISTER_CLASS(EditorSelection);
+	GDREGISTER_CLASS(EditorFileDialog);
+	GDREGISTER_VIRTUAL_CLASS(EditorSettings);
+	GDREGISTER_CLASS(EditorNode3DGizmo);
+	GDREGISTER_CLASS(EditorNode3DGizmoPlugin);
+	GDREGISTER_VIRTUAL_CLASS(EditorResourcePreview);
+	GDREGISTER_CLASS(EditorResourcePreviewGenerator);
+	GDREGISTER_VIRTUAL_CLASS(EditorFileSystem);
+	GDREGISTER_CLASS(EditorFileSystemDirectory);
+	GDREGISTER_CLASS(EditorVCSInterface);
+	GDREGISTER_VIRTUAL_CLASS(ScriptEditor);
+	GDREGISTER_VIRTUAL_CLASS(ScriptEditorBase);
+	GDREGISTER_CLASS(EditorSyntaxHighlighter);
+	GDREGISTER_VIRTUAL_CLASS(EditorInterface);
+	GDREGISTER_CLASS(EditorExportPlugin);
+	GDREGISTER_CLASS(EditorResourceConversionPlugin);
+	GDREGISTER_CLASS(EditorSceneImporter);
+	GDREGISTER_CLASS(EditorInspector);
+	GDREGISTER_CLASS(EditorInspectorPlugin);
+	GDREGISTER_CLASS(EditorProperty);
+	GDREGISTER_CLASS(AnimationTrackEditPlugin);
+	GDREGISTER_CLASS(ScriptCreateDialog);
+	GDREGISTER_CLASS(EditorFeatureProfile);
+	GDREGISTER_CLASS(EditorSpinSlider);
+	GDREGISTER_CLASS(EditorResourcePicker);
+	GDREGISTER_CLASS(EditorScriptPicker);
+	GDREGISTER_CLASS(EditorSceneImporterMesh);
+	GDREGISTER_CLASS(EditorSceneImporterMeshNode3D);
+
+	GDREGISTER_VIRTUAL_CLASS(FileSystemDock);
 
 
 	// FIXME: Is this stuff obsolete, or should it be ported to new APIs?
 	// FIXME: Is this stuff obsolete, or should it be ported to new APIs?
-	ClassDB::register_class<EditorScenePostImport>();
+	GDREGISTER_CLASS(EditorScenePostImport);
 	//ClassDB::register_type<EditorImportExport>();
 	//ClassDB::register_type<EditorImportExport>();
-	ClassDB::register_class<EditorDebuggerPlugin>();
+	GDREGISTER_CLASS(EditorDebuggerPlugin);
 
 
 	NativeExtensionManager::get_singleton()->initialize_extensions(NativeExtension::INITIALIZATION_LEVEL_EDITOR);
 	NativeExtensionManager::get_singleton()->initialize_extensions(NativeExtension::INITIALIZATION_LEVEL_EDITOR);
 }
 }

+ 1 - 1
editor/editor_settings.cpp

@@ -884,7 +884,7 @@ void EditorSettings::create() {
 		return;
 		return;
 	}
 	}
 
 
-	ClassDB::register_class<EditorSettings>(); // Otherwise it can't be unserialized.
+	GDREGISTER_CLASS(EditorSettings); // Otherwise it can't be unserialized.
 
 
 	String config_file_path;
 	String config_file_path;
 	Ref<ConfigFile> extra_config = memnew(ConfigFile);
 	Ref<ConfigFile> extra_config = memnew(ConfigFile);

+ 1 - 1
main/main.cpp

@@ -549,7 +549,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
 
 
 	translation_server = memnew(TranslationServer);
 	translation_server = memnew(TranslationServer);
 	performance = memnew(Performance);
 	performance = memnew(Performance);
-	ClassDB::register_class<Performance>();
+	GDREGISTER_CLASS(Performance);
 	engine->add_singleton(Engine::Singleton("Performance", performance));
 	engine->add_singleton(Engine::Singleton("Performance", performance));
 
 
 	// Only flush stdout in debug builds by default, as spamming `print()` will
 	// Only flush stdout in debug builds by default, as spamming `print()` will

+ 12 - 0
methods.py

@@ -231,6 +231,18 @@ def is_module(path):
     return True
     return True
 
 
 
 
+def write_disabled_classes(class_list):
+    f = open("core/disabled_classes.gen.h", "w")
+    f.write("/* THIS FILE IS GENERATED DO NOT EDIT */\n")
+    f.write("#ifndef DISABLED_CLASSES_GEN_H\n")
+    f.write("#define DISABLED_CLASSES_GEN_H\n\n")
+    for c in class_list:
+        cs = c.strip()
+        if cs != "":
+            f.write("#define ClassDB_Disable_" + cs + " 1\n")
+    f.write("\n#endif\n")
+
+
 def write_modules(modules):
 def write_modules(modules):
     includes_cpp = ""
     includes_cpp = ""
     preregister_cpp = ""
     preregister_cpp = ""

+ 1 - 1
modules/basis_universal/register_types.cpp

@@ -272,7 +272,7 @@ void register_basis_universal_types() {
 	Image::basis_universal_packer = basis_universal_packer;
 	Image::basis_universal_packer = basis_universal_packer;
 #endif
 #endif
 	Image::basis_universal_unpacker = basis_universal_unpacker;
 	Image::basis_universal_unpacker = basis_universal_unpacker;
-	//ClassDB::register_class<TextureBasisU>();
+	//GDREGISTER_CLASS(TextureBasisU);
 }
 }
 
 
 void unregister_basis_universal_types() {
 void unregister_basis_universal_types() {

+ 9 - 9
modules/csg/register_types.cpp

@@ -36,15 +36,15 @@
 void register_csg_types() {
 void register_csg_types() {
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
 
 
-	ClassDB::register_virtual_class<CSGShape3D>();
-	ClassDB::register_virtual_class<CSGPrimitive3D>();
-	ClassDB::register_class<CSGMesh3D>();
-	ClassDB::register_class<CSGSphere3D>();
-	ClassDB::register_class<CSGBox3D>();
-	ClassDB::register_class<CSGCylinder3D>();
-	ClassDB::register_class<CSGTorus3D>();
-	ClassDB::register_class<CSGPolygon3D>();
-	ClassDB::register_class<CSGCombiner3D>();
+	GDREGISTER_VIRTUAL_CLASS(CSGShape3D);
+	GDREGISTER_VIRTUAL_CLASS(CSGPrimitive3D);
+	GDREGISTER_CLASS(CSGMesh3D);
+	GDREGISTER_CLASS(CSGSphere3D);
+	GDREGISTER_CLASS(CSGBox3D);
+	GDREGISTER_CLASS(CSGCylinder3D);
+	GDREGISTER_CLASS(CSGTorus3D);
+	GDREGISTER_CLASS(CSGPolygon3D);
+	GDREGISTER_CLASS(CSGCombiner3D);
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 	EditorPlugins::add_by_type<EditorPluginCSG>();
 	EditorPlugins::add_by_type<EditorPluginCSG>();

+ 1 - 1
modules/enet/register_types.cpp

@@ -41,7 +41,7 @@ void register_enet_types() {
 		enet_ok = true;
 		enet_ok = true;
 	}
 	}
 
 
-	ClassDB::register_class<ENetMultiplayerPeer>();
+	GDREGISTER_CLASS(ENetMultiplayerPeer);
 }
 }
 
 
 void unregister_enet_types() {
 void unregister_enet_types() {

+ 1 - 1
modules/fbx/register_types.cpp

@@ -46,7 +46,7 @@ void register_fbx_types() {
 	ClassDB::APIType prev_api = ClassDB::get_current_api();
 	ClassDB::APIType prev_api = ClassDB::get_current_api();
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
 
 
-	ClassDB::register_class<EditorSceneImporterFBX>();
+	GDREGISTER_CLASS(EditorSceneImporterFBX);
 
 
 	ClassDB::set_current_api(prev_api);
 	ClassDB::set_current_api(prev_api);
 
 

+ 1 - 1
modules/gdnative/nativescript/register_types.cpp

@@ -45,7 +45,7 @@ Ref<ResourceFormatSaverNativeScript> resource_saver_gdns;
 void register_nativescript_types() {
 void register_nativescript_types() {
 	native_script_language = memnew(NativeScriptLanguage);
 	native_script_language = memnew(NativeScriptLanguage);
 
 
-	ClassDB::register_class<NativeScript>();
+	GDREGISTER_CLASS(NativeScript);
 
 
 	native_script_language->set_language_index(ScriptServer::get_language_count());
 	native_script_language->set_language_index(ScriptServer::get_language_count());
 	ScriptServer::register_language(native_script_language);
 	ScriptServer::register_language(native_script_language);

+ 3 - 3
modules/gdnative/net/register_types.cpp

@@ -34,9 +34,9 @@
 #include "stream_peer_gdnative.h"
 #include "stream_peer_gdnative.h"
 
 
 void register_net_types() {
 void register_net_types() {
-	ClassDB::register_class<MultiplayerPeerGDNative>();
-	ClassDB::register_class<PacketPeerGDNative>();
-	ClassDB::register_class<StreamPeerGDNative>();
+	GDREGISTER_CLASS(MultiplayerPeerGDNative);
+	GDREGISTER_CLASS(PacketPeerGDNative);
+	GDREGISTER_CLASS(StreamPeerGDNative);
 }
 }
 
 
 void unregister_net_types() {
 void unregister_net_types() {

+ 1 - 1
modules/gdnative/pluginscript/register_types.cpp

@@ -107,7 +107,7 @@ void GDAPI godot_pluginscript_register_language(const godot_pluginscript_languag
 }
 }
 
 
 void register_pluginscript_types() {
 void register_pluginscript_types() {
-	ClassDB::register_class<PluginScript>();
+	GDREGISTER_CLASS(PluginScript);
 }
 }
 
 
 void unregister_pluginscript_types() {
 void unregister_pluginscript_types() {

+ 2 - 2
modules/gdnative/register_types.cpp

@@ -259,8 +259,8 @@ void register_gdnative_types() {
 	EditorNode::add_init_callback(editor_init_callback);
 	EditorNode::add_init_callback(editor_init_callback);
 #endif
 #endif
 
 
-	ClassDB::register_class<GDNativeLibrary>();
-	ClassDB::register_class<GDNative>();
+	GDREGISTER_CLASS(GDNativeLibrary);
+	GDREGISTER_CLASS(GDNative);
 
 
 	resource_loader_gdnlib.instantiate();
 	resource_loader_gdnlib.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_loader_gdnlib);
 	ResourceLoader::add_resource_format_loader(resource_loader_gdnlib);

+ 1 - 1
modules/gdnative/videodecoder/register_types.cpp

@@ -39,7 +39,7 @@ void register_videodecoder_types() {
 	resource_loader_vsgdnative.instantiate();
 	resource_loader_vsgdnative.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_loader_vsgdnative, true);
 	ResourceLoader::add_resource_format_loader(resource_loader_vsgdnative, true);
 
 
-	ClassDB::register_class<VideoStreamGDNative>();
+	GDREGISTER_CLASS(VideoStreamGDNative);
 }
 }
 
 
 void unregister_videodecoder_types() {
 void unregister_videodecoder_types() {

+ 1 - 1
modules/gdnative/xr/register_types.cpp

@@ -32,7 +32,7 @@
 #include "xr_interface_gdnative.h"
 #include "xr_interface_gdnative.h"
 
 
 void register_xr_types() {
 void register_xr_types() {
-	ClassDB::register_class<XRInterfaceGDNative>();
+	GDREGISTER_CLASS(XRInterfaceGDNative);
 	ClassDB::add_compatibility_class("ARVRInterfaceGDNative", "XRInterfaceGDNative");
 	ClassDB::add_compatibility_class("ARVRInterfaceGDNative", "XRInterfaceGDNative");
 }
 }
 
 

+ 3 - 3
modules/gdscript/language_server/gdscript_language_server.cpp

@@ -101,7 +101,7 @@ void GDScriptLanguageServer::stop() {
 }
 }
 
 
 void register_lsp_types() {
 void register_lsp_types() {
-	ClassDB::register_class<GDScriptLanguageProtocol>();
-	ClassDB::register_class<GDScriptTextDocument>();
-	ClassDB::register_class<GDScriptWorkspace>();
+	GDREGISTER_CLASS(GDScriptLanguageProtocol);
+	GDREGISTER_CLASS(GDScriptTextDocument);
+	GDREGISTER_CLASS(GDScriptWorkspace);
 }
 }

+ 1 - 1
modules/gdscript/register_types.cpp

@@ -112,7 +112,7 @@ static void _editor_init() {
 #endif // TOOLS_ENABLED
 #endif // TOOLS_ENABLED
 
 
 void register_gdscript_types() {
 void register_gdscript_types() {
-	ClassDB::register_class<GDScript>();
+	GDREGISTER_CLASS(GDScript);
 
 
 	script_language_gd = memnew(GDScriptLanguage);
 	script_language_gd = memnew(GDScriptLanguage);
 	ScriptServer::register_language(script_language_gd);
 	ScriptServer::register_language(script_language_gd);

+ 15 - 15
modules/gltf/register_types.cpp

@@ -62,25 +62,25 @@ void register_gltf_types() {
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 	ClassDB::APIType prev_api = ClassDB::get_current_api();
 	ClassDB::APIType prev_api = ClassDB::get_current_api();
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
-	ClassDB::register_class<EditorSceneImporterGLTF>();
-	ClassDB::register_class<GLTFMesh>();
+	GDREGISTER_CLASS(EditorSceneImporterGLTF);
+	GDREGISTER_CLASS(GLTFMesh);
 	EditorPlugins::add_by_type<SceneExporterGLTFPlugin>();
 	EditorPlugins::add_by_type<SceneExporterGLTFPlugin>();
 	ClassDB::set_current_api(prev_api);
 	ClassDB::set_current_api(prev_api);
 	EditorNode::add_init_callback(_editor_init);
 	EditorNode::add_init_callback(_editor_init);
 #endif
 #endif
-	ClassDB::register_class<GLTFSpecGloss>();
-	ClassDB::register_class<GLTFNode>();
-	ClassDB::register_class<GLTFAnimation>();
-	ClassDB::register_class<GLTFBufferView>();
-	ClassDB::register_class<GLTFAccessor>();
-	ClassDB::register_class<GLTFTexture>();
-	ClassDB::register_class<GLTFSkeleton>();
-	ClassDB::register_class<GLTFSkin>();
-	ClassDB::register_class<GLTFCamera>();
-	ClassDB::register_class<GLTFLight>();
-	ClassDB::register_class<GLTFState>();
-	ClassDB::register_class<GLTFDocument>();
-	ClassDB::register_class<PackedSceneGLTF>();
+	GDREGISTER_CLASS(GLTFSpecGloss);
+	GDREGISTER_CLASS(GLTFNode);
+	GDREGISTER_CLASS(GLTFAnimation);
+	GDREGISTER_CLASS(GLTFBufferView);
+	GDREGISTER_CLASS(GLTFAccessor);
+	GDREGISTER_CLASS(GLTFTexture);
+	GDREGISTER_CLASS(GLTFSkeleton);
+	GDREGISTER_CLASS(GLTFSkin);
+	GDREGISTER_CLASS(GLTFCamera);
+	GDREGISTER_CLASS(GLTFLight);
+	GDREGISTER_CLASS(GLTFState);
+	GDREGISTER_CLASS(GLTFDocument);
+	GDREGISTER_CLASS(PackedSceneGLTF);
 #endif
 #endif
 }
 }
 
 

+ 1 - 1
modules/gridmap/register_types.cpp

@@ -37,7 +37,7 @@
 
 
 void register_gridmap_types() {
 void register_gridmap_types() {
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
-	ClassDB::register_class<GridMap>();
+	GDREGISTER_CLASS(GridMap);
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 	EditorPlugins::add_by_type<GridMapEditorPlugin>();
 	EditorPlugins::add_by_type<GridMapEditorPlugin>();
 #endif
 #endif

+ 1 - 1
modules/jsonrpc/register_types.cpp

@@ -33,7 +33,7 @@
 #include "jsonrpc.h"
 #include "jsonrpc.h"
 
 
 void register_jsonrpc_types() {
 void register_jsonrpc_types() {
-	ClassDB::register_class<JSONRPC>();
+	GDREGISTER_CLASS(JSONRPC);
 }
 }
 
 
 void unregister_jsonrpc_types() {
 void unregister_jsonrpc_types() {

+ 1 - 1
modules/lightmapper_rd/register_types.cpp

@@ -54,7 +54,7 @@ void register_lightmapper_rd_types() {
 	GLOBAL_DEF("rendering/lightmapping/bake_quality/ultra_quality_probe_ray_count", 2048);
 	GLOBAL_DEF("rendering/lightmapping/bake_quality/ultra_quality_probe_ray_count", 2048);
 	GLOBAL_DEF("rendering/lightmapping/bake_performance/max_rays_per_probe_pass", 64);
 	GLOBAL_DEF("rendering/lightmapping/bake_performance/max_rays_per_probe_pass", 64);
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
-	ClassDB::register_class<LightmapperRD>();
+	GDREGISTER_CLASS(LightmapperRD);
 	Lightmapper::create_gpu = create_lightmapper_rd;
 	Lightmapper::create_gpu = create_lightmapper_rd;
 #endif
 #endif
 }
 }

+ 1 - 1
modules/minimp3/register_types.cpp

@@ -45,7 +45,7 @@ void register_minimp3_types() {
 		ResourceFormatImporter::get_singleton()->add_importer(mp3_import);
 		ResourceFormatImporter::get_singleton()->add_importer(mp3_import);
 	}
 	}
 #endif
 #endif
-	ClassDB::register_class<AudioStreamMP3>();
+	GDREGISTER_CLASS(AudioStreamMP3);
 }
 }
 
 
 void unregister_minimp3_types() {
 void unregister_minimp3_types() {

+ 1 - 1
modules/mobile_vr/register_types.cpp

@@ -33,7 +33,7 @@
 #include "mobile_vr_interface.h"
 #include "mobile_vr_interface.h"
 
 
 void register_mobile_vr_types() {
 void register_mobile_vr_types() {
-	ClassDB::register_class<MobileVRInterface>();
+	GDREGISTER_CLASS(MobileVRInterface);
 
 
 	if (XRServer::get_singleton()) {
 	if (XRServer::get_singleton()) {
 		Ref<MobileVRInterface> mobile_vr;
 		Ref<MobileVRInterface> mobile_vr;

+ 2 - 2
modules/mono/register_types.cpp

@@ -41,11 +41,11 @@ Ref<ResourceFormatSaverCSharpScript> resource_saver_cs;
 _GodotSharp *_godotsharp = nullptr;
 _GodotSharp *_godotsharp = nullptr;
 
 
 void register_mono_types() {
 void register_mono_types() {
-	ClassDB::register_class<CSharpScript>();
+	GDREGISTER_CLASS(CSharpScript);
 
 
 	_godotsharp = memnew(_GodotSharp);
 	_godotsharp = memnew(_GodotSharp);
 
 
-	ClassDB::register_class<_GodotSharp>();
+	GDREGISTER_CLASS(_GodotSharp);
 	Engine::get_singleton()->add_singleton(Engine::Singleton("GodotSharp", _GodotSharp::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("GodotSharp", _GodotSharp::get_singleton()));
 
 
 	script_language_cs = memnew(CSharpLanguage);
 	script_language_cs = memnew(CSharpLanguage);

+ 1 - 1
modules/navigation/register_types.cpp

@@ -56,7 +56,7 @@ void register_navigation_types() {
 
 
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
 	_nav_mesh_generator = memnew(NavigationMeshGenerator);
 	_nav_mesh_generator = memnew(NavigationMeshGenerator);
-	ClassDB::register_class<NavigationMeshGenerator>();
+	GDREGISTER_CLASS(NavigationMeshGenerator);
 	Engine::get_singleton()->add_singleton(Engine::Singleton("NavigationMeshGenerator", NavigationMeshGenerator::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("NavigationMeshGenerator", NavigationMeshGenerator::get_singleton()));
 #endif
 #endif
 
 

+ 2 - 2
modules/opensimplex/register_types.cpp

@@ -33,8 +33,8 @@
 #include "open_simplex_noise.h"
 #include "open_simplex_noise.h"
 
 
 void register_opensimplex_types() {
 void register_opensimplex_types() {
-	ClassDB::register_class<OpenSimplexNoise>();
-	ClassDB::register_class<NoiseTexture>();
+	GDREGISTER_CLASS(OpenSimplexNoise);
+	GDREGISTER_CLASS(NoiseTexture);
 }
 }
 
 
 void unregister_opensimplex_types() {
 void unregister_opensimplex_types() {

+ 2 - 2
modules/regex/register_types.cpp

@@ -33,8 +33,8 @@
 #include "regex.h"
 #include "regex.h"
 
 
 void register_regex_types() {
 void register_regex_types() {
-	ClassDB::register_class<RegExMatch>();
-	ClassDB::register_class<RegEx>();
+	GDREGISTER_CLASS(RegExMatch);
+	GDREGISTER_CLASS(RegEx);
 }
 }
 
 
 void unregister_regex_types() {
 void unregister_regex_types() {

+ 1 - 1
modules/stb_vorbis/register_types.cpp

@@ -45,7 +45,7 @@ void register_stb_vorbis_types() {
 		ResourceFormatImporter::get_singleton()->add_importer(ogg_import);
 		ResourceFormatImporter::get_singleton()->add_importer(ogg_import);
 	}
 	}
 #endif
 #endif
-	ClassDB::register_class<AudioStreamOGGVorbis>();
+	GDREGISTER_CLASS(AudioStreamOGGVorbis);
 }
 }
 
 
 void unregister_stb_vorbis_types() {
 void unregister_stb_vorbis_types() {

+ 1 - 1
modules/theora/register_types.cpp

@@ -38,7 +38,7 @@ void register_theora_types() {
 	resource_loader_theora.instantiate();
 	resource_loader_theora.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_loader_theora, true);
 	ResourceLoader::add_resource_format_loader(resource_loader_theora, true);
 
 
-	ClassDB::register_class<VideoStreamTheora>();
+	GDREGISTER_CLASS(VideoStreamTheora);
 }
 }
 
 
 void unregister_theora_types() {
 void unregister_theora_types() {

+ 2 - 2
modules/upnp/register_types.cpp

@@ -36,8 +36,8 @@
 #include "upnp_device.h"
 #include "upnp_device.h"
 
 
 void register_upnp_types() {
 void register_upnp_types() {
-	ClassDB::register_class<UPNP>();
-	ClassDB::register_class<UPNPDevice>();
+	GDREGISTER_CLASS(UPNP);
+	GDREGISTER_CLASS(UPNPDevice);
 }
 }
 
 
 void unregister_upnp_types() {
 void unregister_upnp_types() {

+ 49 - 49
modules/visual_script/register_types.cpp

@@ -51,59 +51,59 @@ void register_visual_script_types() {
 	//script_language_gd->init();
 	//script_language_gd->init();
 	ScriptServer::register_language(visual_script_language);
 	ScriptServer::register_language(visual_script_language);
 
 
-	ClassDB::register_class<VisualScript>();
-	ClassDB::register_virtual_class<VisualScriptNode>();
-	ClassDB::register_class<VisualScriptFunctionState>();
-	ClassDB::register_class<VisualScriptFunction>();
-	ClassDB::register_virtual_class<VisualScriptLists>();
-	ClassDB::register_class<VisualScriptComposeArray>();
-	ClassDB::register_class<VisualScriptOperator>();
-	ClassDB::register_class<VisualScriptVariableSet>();
-	ClassDB::register_class<VisualScriptVariableGet>();
-	ClassDB::register_class<VisualScriptConstant>();
-	ClassDB::register_class<VisualScriptIndexGet>();
-	ClassDB::register_class<VisualScriptIndexSet>();
-	ClassDB::register_class<VisualScriptGlobalConstant>();
-	ClassDB::register_class<VisualScriptClassConstant>();
-	ClassDB::register_class<VisualScriptMathConstant>();
-	ClassDB::register_class<VisualScriptBasicTypeConstant>();
-	ClassDB::register_class<VisualScriptEngineSingleton>();
-	ClassDB::register_class<VisualScriptSceneNode>();
-	ClassDB::register_class<VisualScriptSceneTree>();
-	ClassDB::register_class<VisualScriptResourcePath>();
-	ClassDB::register_class<VisualScriptSelf>();
-	ClassDB::register_class<VisualScriptCustomNode>();
-	ClassDB::register_class<VisualScriptSubCall>();
-	ClassDB::register_class<VisualScriptComment>();
-	ClassDB::register_class<VisualScriptConstructor>();
-	ClassDB::register_class<VisualScriptLocalVar>();
-	ClassDB::register_class<VisualScriptLocalVarSet>();
-	ClassDB::register_class<VisualScriptInputAction>();
-	ClassDB::register_class<VisualScriptDeconstruct>();
-	ClassDB::register_class<VisualScriptPreload>();
-	ClassDB::register_class<VisualScriptTypeCast>();
-
-	ClassDB::register_class<VisualScriptFunctionCall>();
-	ClassDB::register_class<VisualScriptPropertySet>();
-	ClassDB::register_class<VisualScriptPropertyGet>();
+	GDREGISTER_CLASS(VisualScript);
+	GDREGISTER_VIRTUAL_CLASS(VisualScriptNode);
+	GDREGISTER_CLASS(VisualScriptFunctionState);
+	GDREGISTER_CLASS(VisualScriptFunction);
+	GDREGISTER_VIRTUAL_CLASS(VisualScriptLists);
+	GDREGISTER_CLASS(VisualScriptComposeArray);
+	GDREGISTER_CLASS(VisualScriptOperator);
+	GDREGISTER_CLASS(VisualScriptVariableSet);
+	GDREGISTER_CLASS(VisualScriptVariableGet);
+	GDREGISTER_CLASS(VisualScriptConstant);
+	GDREGISTER_CLASS(VisualScriptIndexGet);
+	GDREGISTER_CLASS(VisualScriptIndexSet);
+	GDREGISTER_CLASS(VisualScriptGlobalConstant);
+	GDREGISTER_CLASS(VisualScriptClassConstant);
+	GDREGISTER_CLASS(VisualScriptMathConstant);
+	GDREGISTER_CLASS(VisualScriptBasicTypeConstant);
+	GDREGISTER_CLASS(VisualScriptEngineSingleton);
+	GDREGISTER_CLASS(VisualScriptSceneNode);
+	GDREGISTER_CLASS(VisualScriptSceneTree);
+	GDREGISTER_CLASS(VisualScriptResourcePath);
+	GDREGISTER_CLASS(VisualScriptSelf);
+	GDREGISTER_CLASS(VisualScriptCustomNode);
+	GDREGISTER_CLASS(VisualScriptSubCall);
+	GDREGISTER_CLASS(VisualScriptComment);
+	GDREGISTER_CLASS(VisualScriptConstructor);
+	GDREGISTER_CLASS(VisualScriptLocalVar);
+	GDREGISTER_CLASS(VisualScriptLocalVarSet);
+	GDREGISTER_CLASS(VisualScriptInputAction);
+	GDREGISTER_CLASS(VisualScriptDeconstruct);
+	GDREGISTER_CLASS(VisualScriptPreload);
+	GDREGISTER_CLASS(VisualScriptTypeCast);
+
+	GDREGISTER_CLASS(VisualScriptFunctionCall);
+	GDREGISTER_CLASS(VisualScriptPropertySet);
+	GDREGISTER_CLASS(VisualScriptPropertyGet);
 	//ClassDB::register_type<VisualScriptScriptCall>();
 	//ClassDB::register_type<VisualScriptScriptCall>();
-	ClassDB::register_class<VisualScriptEmitSignal>();
+	GDREGISTER_CLASS(VisualScriptEmitSignal);
 
 
-	ClassDB::register_class<VisualScriptReturn>();
-	ClassDB::register_class<VisualScriptCondition>();
-	ClassDB::register_class<VisualScriptWhile>();
-	ClassDB::register_class<VisualScriptIterator>();
-	ClassDB::register_class<VisualScriptSequence>();
-	//ClassDB::register_class<VisualScriptInputFilter>();
-	ClassDB::register_class<VisualScriptSwitch>();
-	ClassDB::register_class<VisualScriptSelect>();
+	GDREGISTER_CLASS(VisualScriptReturn);
+	GDREGISTER_CLASS(VisualScriptCondition);
+	GDREGISTER_CLASS(VisualScriptWhile);
+	GDREGISTER_CLASS(VisualScriptIterator);
+	GDREGISTER_CLASS(VisualScriptSequence);
+	//GDREGISTER_CLASS(VisualScriptInputFilter);
+	GDREGISTER_CLASS(VisualScriptSwitch);
+	GDREGISTER_CLASS(VisualScriptSelect);
 
 
-	ClassDB::register_class<VisualScriptYield>();
-	ClassDB::register_class<VisualScriptYieldSignal>();
+	GDREGISTER_CLASS(VisualScriptYield);
+	GDREGISTER_CLASS(VisualScriptYieldSignal);
 
 
-	ClassDB::register_class<VisualScriptBuiltinFunc>();
+	GDREGISTER_CLASS(VisualScriptBuiltinFunc);
 
 
-	ClassDB::register_class<VisualScriptExpression>();
+	GDREGISTER_CLASS(VisualScriptExpression);
 
 
 	register_visual_script_nodes();
 	register_visual_script_nodes();
 	register_visual_script_func_nodes();
 	register_visual_script_func_nodes();
@@ -114,7 +114,7 @@ void register_visual_script_types() {
 
 
 #ifdef TOOLS_ENABLED
 #ifdef TOOLS_ENABLED
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
 	ClassDB::set_current_api(ClassDB::API_EDITOR);
-	ClassDB::register_class<_VisualScriptEditor>();
+	GDREGISTER_CLASS(_VisualScriptEditor);
 	ClassDB::set_current_api(ClassDB::API_CORE);
 	ClassDB::set_current_api(ClassDB::API_CORE);
 	vs_editor_singleton = memnew(_VisualScriptEditor);
 	vs_editor_singleton = memnew(_VisualScriptEditor);
 	Engine::get_singleton()->add_singleton(Engine::Singleton("VisualScriptEditor", _VisualScriptEditor::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("VisualScriptEditor", _VisualScriptEditor::get_singleton()));

+ 1 - 1
modules/webm/register_types.cpp

@@ -38,7 +38,7 @@ void register_webm_types() {
 	resource_loader_webm.instantiate();
 	resource_loader_webm.instantiate();
 	ResourceLoader::add_resource_format_loader(resource_loader_webm, true);
 	ResourceLoader::add_resource_format_loader(resource_loader_webm, true);
 
 
-	ClassDB::register_class<VideoStreamWebm>();
+	GDREGISTER_CLASS(VideoStreamWebm);
 }
 }
 
 
 void unregister_webm_types() {
 void unregister_webm_types() {

+ 4 - 4
modules/webrtc/register_types.cpp

@@ -58,11 +58,11 @@ void register_webrtc_types() {
 
 
 	ClassDB::register_custom_instance_class<WebRTCPeerConnection>();
 	ClassDB::register_custom_instance_class<WebRTCPeerConnection>();
 #ifdef WEBRTC_GDNATIVE_ENABLED
 #ifdef WEBRTC_GDNATIVE_ENABLED
-	ClassDB::register_class<WebRTCPeerConnectionGDNative>();
-	ClassDB::register_class<WebRTCDataChannelGDNative>();
+	GDREGISTER_CLASS(WebRTCPeerConnectionGDNative);
+	GDREGISTER_CLASS(WebRTCDataChannelGDNative);
 #endif
 #endif
-	ClassDB::register_virtual_class<WebRTCDataChannel>();
-	ClassDB::register_class<WebRTCMultiplayerPeer>();
+	GDREGISTER_VIRTUAL_CLASS(WebRTCDataChannel);
+	GDREGISTER_CLASS(WebRTCMultiplayerPeer);
 }
 }
 
 
 void unregister_webrtc_types() {}
 void unregister_webrtc_types() {}

+ 1 - 1
modules/websocket/register_types.cpp

@@ -63,7 +63,7 @@ void register_websocket_types() {
 	WSLServer::make_default();
 	WSLServer::make_default();
 #endif
 #endif
 
 
-	ClassDB::register_virtual_class<WebSocketMultiplayerPeer>();
+	GDREGISTER_VIRTUAL_CLASS(WebSocketMultiplayerPeer);
 	ClassDB::register_custom_instance_class<WebSocketServer>();
 	ClassDB::register_custom_instance_class<WebSocketServer>();
 	ClassDB::register_custom_instance_class<WebSocketClient>();
 	ClassDB::register_custom_instance_class<WebSocketClient>();
 	ClassDB::register_custom_instance_class<WebSocketPeer>();
 	ClassDB::register_custom_instance_class<WebSocketPeer>();

+ 1 - 1
modules/webxr/register_types.cpp

@@ -34,7 +34,7 @@
 #include "webxr_interface_js.h"
 #include "webxr_interface_js.h"
 
 
 void register_webxr_types() {
 void register_webxr_types() {
-	ClassDB::register_virtual_class<WebXRInterface>();
+	GDREGISTER_VIRTUAL_CLASS(WebXRInterface);
 
 
 #ifdef JAVASCRIPT_ENABLED
 #ifdef JAVASCRIPT_ENABLED
 	Ref<WebXRInterfaceJS> webxr;
 	Ref<WebXRInterfaceJS> webxr;

+ 3 - 3
platform/android/api/api.cpp

@@ -44,11 +44,11 @@ void register_android_api() {
 	// `JNISingleton` registration occurs in
 	// `JNISingleton` registration occurs in
 	// `platform/android/java_godot_lib_jni.cpp#Java_org_godotengine_godot_GodotLib_setup`
 	// `platform/android/java_godot_lib_jni.cpp#Java_org_godotengine_godot_GodotLib_setup`
 	java_class_wrapper = memnew(JavaClassWrapper); // Dummy
 	java_class_wrapper = memnew(JavaClassWrapper); // Dummy
-	ClassDB::register_class<JNISingleton>();
+	GDREGISTER_CLASS(JNISingleton);
 #endif
 #endif
 
 
-	ClassDB::register_class<JavaClass>();
-	ClassDB::register_class<JavaClassWrapper>();
+	GDREGISTER_CLASS(JavaClass);
+	GDREGISTER_CLASS(JavaClassWrapper);
 	Engine::get_singleton()->add_singleton(Engine::Singleton("JavaClassWrapper", JavaClassWrapper::get_singleton()));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("JavaClassWrapper", JavaClassWrapper::get_singleton()));
 }
 }
 
 

+ 1 - 1
platform/android/java_godot_lib_jni.cpp

@@ -157,7 +157,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setup(JNIEnv *env, jc
 	}
 	}
 
 
 	java_class_wrapper = memnew(JavaClassWrapper(godot_java->get_activity()));
 	java_class_wrapper = memnew(JavaClassWrapper(godot_java->get_activity()));
-	ClassDB::register_class<JNISingleton>();
+	GDREGISTER_CLASS(JNISingleton);
 }
 }
 
 
 JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jclass clazz, jobject p_surface, jint p_width, jint p_height) {
 JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_resize(JNIEnv *env, jclass clazz, jobject p_surface, jint p_width, jint p_height) {

+ 2 - 2
platform/javascript/api/api.cpp

@@ -37,8 +37,8 @@ static JavaScript *javascript_eval;
 
 
 void register_javascript_api() {
 void register_javascript_api() {
 	JavaScriptToolsEditorPlugin::initialize();
 	JavaScriptToolsEditorPlugin::initialize();
-	ClassDB::register_virtual_class<JavaScriptObject>();
-	ClassDB::register_virtual_class<JavaScript>();
+	GDREGISTER_VIRTUAL_CLASS(JavaScriptObject);
+	GDREGISTER_VIRTUAL_CLASS(JavaScript);
 	javascript_eval = memnew(JavaScript);
 	javascript_eval = memnew(JavaScript);
 	Engine::get_singleton()->add_singleton(Engine::Singleton("JavaScript", javascript_eval));
 	Engine::get_singleton()->add_singleton(Engine::Singleton("JavaScript", javascript_eval));
 }
 }

+ 472 - 472
scene/register_scene_types.cpp

@@ -292,108 +292,108 @@ void register_scene_types() {
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<Object>();
+	GDREGISTER_CLASS(Object);
 
 
-	ClassDB::register_class<Node>();
-	ClassDB::register_virtual_class<InstancePlaceholder>();
+	GDREGISTER_CLASS(Node);
+	GDREGISTER_VIRTUAL_CLASS(InstancePlaceholder);
 
 
-	ClassDB::register_virtual_class<Viewport>();
-	ClassDB::register_class<SubViewport>();
-	ClassDB::register_class<ViewportTexture>();
-	ClassDB::register_class<HTTPRequest>();
-	ClassDB::register_class<Timer>();
-	ClassDB::register_class<CanvasLayer>();
-	ClassDB::register_class<CanvasModulate>();
-	ClassDB::register_class<ResourcePreloader>();
-	ClassDB::register_class<Window>();
+	GDREGISTER_VIRTUAL_CLASS(Viewport);
+	GDREGISTER_CLASS(SubViewport);
+	GDREGISTER_CLASS(ViewportTexture);
+	GDREGISTER_CLASS(HTTPRequest);
+	GDREGISTER_CLASS(Timer);
+	GDREGISTER_CLASS(CanvasLayer);
+	GDREGISTER_CLASS(CanvasModulate);
+	GDREGISTER_CLASS(ResourcePreloader);
+	GDREGISTER_CLASS(Window);
 
 
 	/* REGISTER GUI */
 	/* REGISTER GUI */
 
 
-	ClassDB::register_class<ButtonGroup>();
-	ClassDB::register_virtual_class<BaseButton>();
+	GDREGISTER_CLASS(ButtonGroup);
+	GDREGISTER_VIRTUAL_CLASS(BaseButton);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<Shortcut>();
-	ClassDB::register_class<Control>();
-	ClassDB::register_class<Button>();
-	ClassDB::register_class<Label>();
-	ClassDB::register_virtual_class<ScrollBar>();
-	ClassDB::register_class<HScrollBar>();
-	ClassDB::register_class<VScrollBar>();
-	ClassDB::register_class<ProgressBar>();
-	ClassDB::register_virtual_class<Slider>();
-	ClassDB::register_class<HSlider>();
-	ClassDB::register_class<VSlider>();
-	ClassDB::register_class<Popup>();
-	ClassDB::register_class<PopupPanel>();
-	ClassDB::register_class<MenuButton>();
-	ClassDB::register_class<CheckBox>();
-	ClassDB::register_class<CheckButton>();
-	ClassDB::register_class<LinkButton>();
-	ClassDB::register_class<Panel>();
-	ClassDB::register_virtual_class<Range>();
+	GDREGISTER_CLASS(Shortcut);
+	GDREGISTER_CLASS(Control);
+	GDREGISTER_CLASS(Button);
+	GDREGISTER_CLASS(Label);
+	GDREGISTER_VIRTUAL_CLASS(ScrollBar);
+	GDREGISTER_CLASS(HScrollBar);
+	GDREGISTER_CLASS(VScrollBar);
+	GDREGISTER_CLASS(ProgressBar);
+	GDREGISTER_VIRTUAL_CLASS(Slider);
+	GDREGISTER_CLASS(HSlider);
+	GDREGISTER_CLASS(VSlider);
+	GDREGISTER_CLASS(Popup);
+	GDREGISTER_CLASS(PopupPanel);
+	GDREGISTER_CLASS(MenuButton);
+	GDREGISTER_CLASS(CheckBox);
+	GDREGISTER_CLASS(CheckButton);
+	GDREGISTER_CLASS(LinkButton);
+	GDREGISTER_CLASS(Panel);
+	GDREGISTER_VIRTUAL_CLASS(Range);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<TextureRect>();
-	ClassDB::register_class<ColorRect>();
-	ClassDB::register_class<NinePatchRect>();
-	ClassDB::register_class<ReferenceRect>();
-	ClassDB::register_class<AspectRatioContainer>();
-	ClassDB::register_class<TabContainer>();
-	ClassDB::register_class<Tabs>();
-	ClassDB::register_virtual_class<Separator>();
-	ClassDB::register_class<HSeparator>();
-	ClassDB::register_class<VSeparator>();
-	ClassDB::register_class<TextureButton>();
-	ClassDB::register_class<Container>();
-	ClassDB::register_virtual_class<BoxContainer>();
-	ClassDB::register_class<HBoxContainer>();
-	ClassDB::register_class<VBoxContainer>();
-	ClassDB::register_class<GridContainer>();
-	ClassDB::register_class<CenterContainer>();
-	ClassDB::register_class<ScrollContainer>();
-	ClassDB::register_class<PanelContainer>();
+	GDREGISTER_CLASS(TextureRect);
+	GDREGISTER_CLASS(ColorRect);
+	GDREGISTER_CLASS(NinePatchRect);
+	GDREGISTER_CLASS(ReferenceRect);
+	GDREGISTER_CLASS(AspectRatioContainer);
+	GDREGISTER_CLASS(TabContainer);
+	GDREGISTER_CLASS(Tabs);
+	GDREGISTER_VIRTUAL_CLASS(Separator);
+	GDREGISTER_CLASS(HSeparator);
+	GDREGISTER_CLASS(VSeparator);
+	GDREGISTER_CLASS(TextureButton);
+	GDREGISTER_CLASS(Container);
+	GDREGISTER_VIRTUAL_CLASS(BoxContainer);
+	GDREGISTER_CLASS(HBoxContainer);
+	GDREGISTER_CLASS(VBoxContainer);
+	GDREGISTER_CLASS(GridContainer);
+	GDREGISTER_CLASS(CenterContainer);
+	GDREGISTER_CLASS(ScrollContainer);
+	GDREGISTER_CLASS(PanelContainer);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<TextureProgressBar>();
-	ClassDB::register_class<ItemList>();
+	GDREGISTER_CLASS(TextureProgressBar);
+	GDREGISTER_CLASS(ItemList);
 
 
-	ClassDB::register_class<LineEdit>();
-	ClassDB::register_class<VideoPlayer>();
+	GDREGISTER_CLASS(LineEdit);
+	GDREGISTER_CLASS(VideoPlayer);
 
 
 #ifndef ADVANCED_GUI_DISABLED
 #ifndef ADVANCED_GUI_DISABLED
-	ClassDB::register_class<FileDialog>();
-
-	ClassDB::register_class<PopupMenu>();
-	ClassDB::register_class<Tree>();
-
-	ClassDB::register_class<TextEdit>();
-	ClassDB::register_class<CodeEdit>();
-	ClassDB::register_class<SyntaxHighlighter>();
-	ClassDB::register_class<CodeHighlighter>();
-
-	ClassDB::register_virtual_class<TreeItem>();
-	ClassDB::register_class<OptionButton>();
-	ClassDB::register_class<SpinBox>();
-	ClassDB::register_class<ColorPicker>();
-	ClassDB::register_class<ColorPickerButton>();
-	ClassDB::register_class<RichTextLabel>();
-	ClassDB::register_class<RichTextEffect>();
-	ClassDB::register_class<CharFXTransform>();
-
-	ClassDB::register_class<AcceptDialog>();
-	ClassDB::register_class<ConfirmationDialog>();
-
-	ClassDB::register_class<MarginContainer>();
-	ClassDB::register_class<SubViewportContainer>();
-	ClassDB::register_virtual_class<SplitContainer>();
-	ClassDB::register_class<HSplitContainer>();
-	ClassDB::register_class<VSplitContainer>();
-	ClassDB::register_class<GraphNode>();
-	ClassDB::register_class<GraphEdit>();
+	GDREGISTER_CLASS(FileDialog);
+
+	GDREGISTER_CLASS(PopupMenu);
+	GDREGISTER_CLASS(Tree);
+
+	GDREGISTER_CLASS(TextEdit);
+	GDREGISTER_CLASS(CodeEdit);
+	GDREGISTER_CLASS(SyntaxHighlighter);
+	GDREGISTER_CLASS(CodeHighlighter);
+
+	GDREGISTER_VIRTUAL_CLASS(TreeItem);
+	GDREGISTER_CLASS(OptionButton);
+	GDREGISTER_CLASS(SpinBox);
+	GDREGISTER_CLASS(ColorPicker);
+	GDREGISTER_CLASS(ColorPickerButton);
+	GDREGISTER_CLASS(RichTextLabel);
+	GDREGISTER_CLASS(RichTextEffect);
+	GDREGISTER_CLASS(CharFXTransform);
+
+	GDREGISTER_CLASS(AcceptDialog);
+	GDREGISTER_CLASS(ConfirmationDialog);
+
+	GDREGISTER_CLASS(MarginContainer);
+	GDREGISTER_CLASS(SubViewportContainer);
+	GDREGISTER_VIRTUAL_CLASS(SplitContainer);
+	GDREGISTER_CLASS(HSplitContainer);
+	GDREGISTER_CLASS(VSplitContainer);
+	GDREGISTER_CLASS(GraphNode);
+	GDREGISTER_CLASS(GraphEdit);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
@@ -406,451 +406,451 @@ void register_scene_types() {
 
 
 	/* REGISTER ANIMATION */
 	/* REGISTER ANIMATION */
 
 
-	ClassDB::register_class<AnimationPlayer>();
-	ClassDB::register_class<Tween>();
-	ClassDB::register_virtual_class<Tweener>();
-	ClassDB::register_class<PropertyTweener>();
-	ClassDB::register_class<IntervalTweener>();
-	ClassDB::register_class<CallbackTweener>();
-	ClassDB::register_class<MethodTweener>();
-
-	ClassDB::register_class<AnimationTree>();
-	ClassDB::register_class<AnimationNode>();
-	ClassDB::register_class<AnimationRootNode>();
-	ClassDB::register_class<AnimationNodeBlendTree>();
-	ClassDB::register_class<AnimationNodeBlendSpace1D>();
-	ClassDB::register_class<AnimationNodeBlendSpace2D>();
-	ClassDB::register_class<AnimationNodeStateMachine>();
-	ClassDB::register_class<AnimationNodeStateMachinePlayback>();
-
-	ClassDB::register_class<AnimationNodeStateMachineTransition>();
-	ClassDB::register_class<AnimationNodeOutput>();
-	ClassDB::register_class<AnimationNodeOneShot>();
-	ClassDB::register_class<AnimationNodeAnimation>();
-	ClassDB::register_class<AnimationNodeAdd2>();
-	ClassDB::register_class<AnimationNodeAdd3>();
-	ClassDB::register_class<AnimationNodeBlend2>();
-	ClassDB::register_class<AnimationNodeBlend3>();
-	ClassDB::register_class<AnimationNodeTimeScale>();
-	ClassDB::register_class<AnimationNodeTimeSeek>();
-	ClassDB::register_class<AnimationNodeTransition>();
-
-	ClassDB::register_class<ShaderGlobalsOverride>(); //can be used in any shader
+	GDREGISTER_CLASS(AnimationPlayer);
+	GDREGISTER_CLASS(Tween);
+	GDREGISTER_VIRTUAL_CLASS(Tweener);
+	GDREGISTER_CLASS(PropertyTweener);
+	GDREGISTER_CLASS(IntervalTweener);
+	GDREGISTER_CLASS(CallbackTweener);
+	GDREGISTER_CLASS(MethodTweener);
+
+	GDREGISTER_CLASS(AnimationTree);
+	GDREGISTER_CLASS(AnimationNode);
+	GDREGISTER_CLASS(AnimationRootNode);
+	GDREGISTER_CLASS(AnimationNodeBlendTree);
+	GDREGISTER_CLASS(AnimationNodeBlendSpace1D);
+	GDREGISTER_CLASS(AnimationNodeBlendSpace2D);
+	GDREGISTER_CLASS(AnimationNodeStateMachine);
+	GDREGISTER_CLASS(AnimationNodeStateMachinePlayback);
+
+	GDREGISTER_CLASS(AnimationNodeStateMachineTransition);
+	GDREGISTER_CLASS(AnimationNodeOutput);
+	GDREGISTER_CLASS(AnimationNodeOneShot);
+	GDREGISTER_CLASS(AnimationNodeAnimation);
+	GDREGISTER_CLASS(AnimationNodeAdd2);
+	GDREGISTER_CLASS(AnimationNodeAdd3);
+	GDREGISTER_CLASS(AnimationNodeBlend2);
+	GDREGISTER_CLASS(AnimationNodeBlend3);
+	GDREGISTER_CLASS(AnimationNodeTimeScale);
+	GDREGISTER_CLASS(AnimationNodeTimeSeek);
+	GDREGISTER_CLASS(AnimationNodeTransition);
+
+	GDREGISTER_CLASS(ShaderGlobalsOverride); //can be used in any shader
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
 	/* REGISTER 3D */
 	/* REGISTER 3D */
 
 
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
-	ClassDB::register_class<Node3D>();
-	ClassDB::register_virtual_class<Node3DGizmo>();
-	ClassDB::register_class<Skin>();
-	ClassDB::register_virtual_class<SkinReference>();
-	ClassDB::register_class<Skeleton3D>();
-	ClassDB::register_virtual_class<VisualInstance3D>();
-	ClassDB::register_virtual_class<GeometryInstance3D>();
-	ClassDB::register_class<Camera3D>();
-	ClassDB::register_class<ClippedCamera3D>();
-	ClassDB::register_class<Listener3D>();
-	ClassDB::register_class<XRCamera3D>();
-	ClassDB::register_class<XRController3D>();
-	ClassDB::register_class<XRAnchor3D>();
-	ClassDB::register_class<XROrigin3D>();
-	ClassDB::register_class<MeshInstance3D>();
-	ClassDB::register_class<OccluderInstance3D>();
-	ClassDB::register_class<Occluder3D>();
-	ClassDB::register_virtual_class<SpriteBase3D>();
-	ClassDB::register_class<Sprite3D>();
-	ClassDB::register_class<AnimatedSprite3D>();
-	ClassDB::register_virtual_class<Light3D>();
-	ClassDB::register_class<DirectionalLight3D>();
-	ClassDB::register_class<OmniLight3D>();
-	ClassDB::register_class<SpotLight3D>();
-	ClassDB::register_class<ReflectionProbe>();
-	ClassDB::register_class<Decal>();
-	ClassDB::register_class<VoxelGI>();
-	ClassDB::register_class<VoxelGIData>();
-	ClassDB::register_class<LightmapGI>();
-	ClassDB::register_class<LightmapGIData>();
-	ClassDB::register_class<LightmapProbe>();
-	ClassDB::register_virtual_class<Lightmapper>();
-	ClassDB::register_class<GPUParticles3D>();
-	ClassDB::register_virtual_class<GPUParticlesCollision3D>();
-	ClassDB::register_class<GPUParticlesCollisionBox>();
-	ClassDB::register_class<GPUParticlesCollisionSphere>();
-	ClassDB::register_class<GPUParticlesCollisionSDF>();
-	ClassDB::register_class<GPUParticlesCollisionHeightField>();
-	ClassDB::register_virtual_class<GPUParticlesAttractor3D>();
-	ClassDB::register_class<GPUParticlesAttractorBox>();
-	ClassDB::register_class<GPUParticlesAttractorSphere>();
-	ClassDB::register_class<GPUParticlesAttractorVectorField>();
-	ClassDB::register_class<CPUParticles3D>();
-	ClassDB::register_class<Position3D>();
-
-	ClassDB::register_class<RootMotionView>();
+	GDREGISTER_CLASS(Node3D);
+	GDREGISTER_VIRTUAL_CLASS(Node3DGizmo);
+	GDREGISTER_CLASS(Skin);
+	GDREGISTER_VIRTUAL_CLASS(SkinReference);
+	GDREGISTER_CLASS(Skeleton3D);
+	GDREGISTER_VIRTUAL_CLASS(VisualInstance3D);
+	GDREGISTER_VIRTUAL_CLASS(GeometryInstance3D);
+	GDREGISTER_CLASS(Camera3D);
+	GDREGISTER_CLASS(ClippedCamera3D);
+	GDREGISTER_CLASS(Listener3D);
+	GDREGISTER_CLASS(XRCamera3D);
+	GDREGISTER_CLASS(XRController3D);
+	GDREGISTER_CLASS(XRAnchor3D);
+	GDREGISTER_CLASS(XROrigin3D);
+	GDREGISTER_CLASS(MeshInstance3D);
+	GDREGISTER_CLASS(OccluderInstance3D);
+	GDREGISTER_CLASS(Occluder3D);
+	GDREGISTER_VIRTUAL_CLASS(SpriteBase3D);
+	GDREGISTER_CLASS(Sprite3D);
+	GDREGISTER_CLASS(AnimatedSprite3D);
+	GDREGISTER_VIRTUAL_CLASS(Light3D);
+	GDREGISTER_CLASS(DirectionalLight3D);
+	GDREGISTER_CLASS(OmniLight3D);
+	GDREGISTER_CLASS(SpotLight3D);
+	GDREGISTER_CLASS(ReflectionProbe);
+	GDREGISTER_CLASS(Decal);
+	GDREGISTER_CLASS(VoxelGI);
+	GDREGISTER_CLASS(VoxelGIData);
+	GDREGISTER_CLASS(LightmapGI);
+	GDREGISTER_CLASS(LightmapGIData);
+	GDREGISTER_CLASS(LightmapProbe);
+	GDREGISTER_VIRTUAL_CLASS(Lightmapper);
+	GDREGISTER_CLASS(GPUParticles3D);
+	GDREGISTER_VIRTUAL_CLASS(GPUParticlesCollision3D);
+	GDREGISTER_CLASS(GPUParticlesCollisionBox);
+	GDREGISTER_CLASS(GPUParticlesCollisionSphere);
+	GDREGISTER_CLASS(GPUParticlesCollisionSDF);
+	GDREGISTER_CLASS(GPUParticlesCollisionHeightField);
+	GDREGISTER_VIRTUAL_CLASS(GPUParticlesAttractor3D);
+	GDREGISTER_CLASS(GPUParticlesAttractorBox);
+	GDREGISTER_CLASS(GPUParticlesAttractorSphere);
+	GDREGISTER_CLASS(GPUParticlesAttractorVectorField);
+	GDREGISTER_CLASS(CPUParticles3D);
+	GDREGISTER_CLASS(Position3D);
+
+	GDREGISTER_CLASS(RootMotionView);
 	ClassDB::set_class_enabled("RootMotionView", false); //disabled by default, enabled by editor
 	ClassDB::set_class_enabled("RootMotionView", false); //disabled by default, enabled by editor
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_virtual_class<CollisionObject3D>();
-	ClassDB::register_virtual_class<PhysicsBody3D>();
-	ClassDB::register_class<StaticBody3D>();
-	ClassDB::register_class<RigidBody3D>();
-	ClassDB::register_class<KinematicCollision3D>();
-	ClassDB::register_class<CharacterBody3D>();
-	ClassDB::register_class<SpringArm3D>();
-
-	ClassDB::register_class<PhysicalBone3D>();
-	ClassDB::register_class<SoftBody3D>();
-
-	ClassDB::register_class<SkeletonIK3D>();
-	ClassDB::register_class<BoneAttachment3D>();
-
-	ClassDB::register_class<VehicleBody3D>();
-	ClassDB::register_class<VehicleWheel3D>();
-	ClassDB::register_class<Area3D>();
-	ClassDB::register_class<ProximityGroup3D>();
-	ClassDB::register_class<CollisionShape3D>();
-	ClassDB::register_class<CollisionPolygon3D>();
-	ClassDB::register_class<RayCast3D>();
-	ClassDB::register_class<MultiMeshInstance3D>();
-
-	ClassDB::register_class<Curve3D>();
-	ClassDB::register_class<Path3D>();
-	ClassDB::register_class<PathFollow3D>();
-	ClassDB::register_class<VisibleOnScreenNotifier3D>();
-	ClassDB::register_class<VisibleOnScreenEnabler3D>();
-	ClassDB::register_class<WorldEnvironment>();
-	ClassDB::register_class<RemoteTransform3D>();
-
-	ClassDB::register_virtual_class<Joint3D>();
-	ClassDB::register_class<PinJoint3D>();
-	ClassDB::register_class<HingeJoint3D>();
-	ClassDB::register_class<SliderJoint3D>();
-	ClassDB::register_class<ConeTwistJoint3D>();
-	ClassDB::register_class<Generic6DOFJoint3D>();
-
-	ClassDB::register_class<NavigationRegion3D>();
-	ClassDB::register_class<NavigationAgent3D>();
-	ClassDB::register_class<NavigationObstacle3D>();
+	GDREGISTER_VIRTUAL_CLASS(CollisionObject3D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsBody3D);
+	GDREGISTER_CLASS(StaticBody3D);
+	GDREGISTER_CLASS(RigidBody3D);
+	GDREGISTER_CLASS(KinematicCollision3D);
+	GDREGISTER_CLASS(CharacterBody3D);
+	GDREGISTER_CLASS(SpringArm3D);
+
+	GDREGISTER_CLASS(PhysicalBone3D);
+	GDREGISTER_CLASS(SoftBody3D);
+
+	GDREGISTER_CLASS(SkeletonIK3D);
+	GDREGISTER_CLASS(BoneAttachment3D);
+
+	GDREGISTER_CLASS(VehicleBody3D);
+	GDREGISTER_CLASS(VehicleWheel3D);
+	GDREGISTER_CLASS(Area3D);
+	GDREGISTER_CLASS(ProximityGroup3D);
+	GDREGISTER_CLASS(CollisionShape3D);
+	GDREGISTER_CLASS(CollisionPolygon3D);
+	GDREGISTER_CLASS(RayCast3D);
+	GDREGISTER_CLASS(MultiMeshInstance3D);
+
+	GDREGISTER_CLASS(Curve3D);
+	GDREGISTER_CLASS(Path3D);
+	GDREGISTER_CLASS(PathFollow3D);
+	GDREGISTER_CLASS(VisibleOnScreenNotifier3D);
+	GDREGISTER_CLASS(VisibleOnScreenEnabler3D);
+	GDREGISTER_CLASS(WorldEnvironment);
+	GDREGISTER_CLASS(RemoteTransform3D);
+
+	GDREGISTER_VIRTUAL_CLASS(Joint3D);
+	GDREGISTER_CLASS(PinJoint3D);
+	GDREGISTER_CLASS(HingeJoint3D);
+	GDREGISTER_CLASS(SliderJoint3D);
+	GDREGISTER_CLASS(ConeTwistJoint3D);
+	GDREGISTER_CLASS(Generic6DOFJoint3D);
+
+	GDREGISTER_CLASS(NavigationRegion3D);
+	GDREGISTER_CLASS(NavigationAgent3D);
+	GDREGISTER_CLASS(NavigationObstacle3D);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 #endif
 #endif
 
 
 	/* REGISTER SHADER */
 	/* REGISTER SHADER */
 
 
-	ClassDB::register_class<Shader>();
-	ClassDB::register_class<VisualShader>();
-	ClassDB::register_virtual_class<VisualShaderNode>();
-	ClassDB::register_class<VisualShaderNodeCustom>();
-	ClassDB::register_class<VisualShaderNodeInput>();
-	ClassDB::register_virtual_class<VisualShaderNodeOutput>();
-	ClassDB::register_virtual_class<VisualShaderNodeResizableBase>();
-	ClassDB::register_virtual_class<VisualShaderNodeGroupBase>();
-	ClassDB::register_virtual_class<VisualShaderNodeConstant>();
-	ClassDB::register_class<VisualShaderNodeComment>();
-	ClassDB::register_class<VisualShaderNodeFloatConstant>();
-	ClassDB::register_class<VisualShaderNodeIntConstant>();
-	ClassDB::register_class<VisualShaderNodeBooleanConstant>();
-	ClassDB::register_class<VisualShaderNodeColorConstant>();
-	ClassDB::register_class<VisualShaderNodeVec3Constant>();
-	ClassDB::register_class<VisualShaderNodeTransformConstant>();
-	ClassDB::register_class<VisualShaderNodeFloatOp>();
-	ClassDB::register_class<VisualShaderNodeIntOp>();
-	ClassDB::register_class<VisualShaderNodeVectorOp>();
-	ClassDB::register_class<VisualShaderNodeColorOp>();
-	ClassDB::register_class<VisualShaderNodeTransformMult>();
-	ClassDB::register_class<VisualShaderNodeTransformVecMult>();
-	ClassDB::register_class<VisualShaderNodeFloatFunc>();
-	ClassDB::register_class<VisualShaderNodeIntFunc>();
-	ClassDB::register_class<VisualShaderNodeVectorFunc>();
-	ClassDB::register_class<VisualShaderNodeColorFunc>();
-	ClassDB::register_class<VisualShaderNodeTransformFunc>();
-	ClassDB::register_class<VisualShaderNodeUVFunc>();
-	ClassDB::register_class<VisualShaderNodeDotProduct>();
-	ClassDB::register_class<VisualShaderNodeVectorLen>();
-	ClassDB::register_class<VisualShaderNodeDeterminant>();
-	ClassDB::register_class<VisualShaderNodeScalarDerivativeFunc>();
-	ClassDB::register_class<VisualShaderNodeVectorDerivativeFunc>();
-	ClassDB::register_class<VisualShaderNodeClamp>();
-	ClassDB::register_class<VisualShaderNodeFaceForward>();
-	ClassDB::register_class<VisualShaderNodeOuterProduct>();
-	ClassDB::register_class<VisualShaderNodeSmoothStep>();
-	ClassDB::register_class<VisualShaderNodeStep>();
-	ClassDB::register_class<VisualShaderNodeVectorDistance>();
-	ClassDB::register_class<VisualShaderNodeVectorRefract>();
-	ClassDB::register_class<VisualShaderNodeMix>();
-	ClassDB::register_class<VisualShaderNodeVectorCompose>();
-	ClassDB::register_class<VisualShaderNodeTransformCompose>();
-	ClassDB::register_class<VisualShaderNodeVectorDecompose>();
-	ClassDB::register_class<VisualShaderNodeTransformDecompose>();
-	ClassDB::register_class<VisualShaderNodeTexture>();
-	ClassDB::register_class<VisualShaderNodeCurveTexture>();
-	ClassDB::register_class<VisualShaderNodeCurve3Texture>();
-	ClassDB::register_virtual_class<VisualShaderNodeSample3D>();
-	ClassDB::register_class<VisualShaderNodeTexture2DArray>();
-	ClassDB::register_class<VisualShaderNodeTexture3D>();
-	ClassDB::register_class<VisualShaderNodeCubemap>();
-	ClassDB::register_virtual_class<VisualShaderNodeUniform>();
-	ClassDB::register_class<VisualShaderNodeUniformRef>();
-	ClassDB::register_class<VisualShaderNodeFloatUniform>();
-	ClassDB::register_class<VisualShaderNodeIntUniform>();
-	ClassDB::register_class<VisualShaderNodeBooleanUniform>();
-	ClassDB::register_class<VisualShaderNodeColorUniform>();
-	ClassDB::register_class<VisualShaderNodeVec3Uniform>();
-	ClassDB::register_class<VisualShaderNodeTransformUniform>();
-	ClassDB::register_class<VisualShaderNodeTextureUniform>();
-	ClassDB::register_class<VisualShaderNodeTextureUniformTriplanar>();
-	ClassDB::register_class<VisualShaderNodeTexture2DArrayUniform>();
-	ClassDB::register_class<VisualShaderNodeTexture3DUniform>();
-	ClassDB::register_class<VisualShaderNodeCubemapUniform>();
-	ClassDB::register_class<VisualShaderNodeIf>();
-	ClassDB::register_class<VisualShaderNodeSwitch>();
-	ClassDB::register_class<VisualShaderNodeFresnel>();
-	ClassDB::register_class<VisualShaderNodeExpression>();
-	ClassDB::register_class<VisualShaderNodeGlobalExpression>();
-	ClassDB::register_class<VisualShaderNodeIs>();
-	ClassDB::register_class<VisualShaderNodeCompare>();
-	ClassDB::register_class<VisualShaderNodeMultiplyAdd>();
-	ClassDB::register_class<VisualShaderNodeBillboard>();
-
-	ClassDB::register_class<VisualShaderNodeSDFToScreenUV>();
-	ClassDB::register_class<VisualShaderNodeScreenUVToSDF>();
-	ClassDB::register_class<VisualShaderNodeTextureSDF>();
-	ClassDB::register_class<VisualShaderNodeTextureSDFNormal>();
-	ClassDB::register_class<VisualShaderNodeSDFRaymarch>();
-
-	ClassDB::register_class<VisualShaderNodeParticleOutput>();
-	ClassDB::register_virtual_class<VisualShaderNodeParticleEmitter>();
-	ClassDB::register_class<VisualShaderNodeParticleSphereEmitter>();
-	ClassDB::register_class<VisualShaderNodeParticleBoxEmitter>();
-	ClassDB::register_class<VisualShaderNodeParticleRingEmitter>();
-	ClassDB::register_class<VisualShaderNodeParticleMultiplyByAxisAngle>();
-	ClassDB::register_class<VisualShaderNodeParticleConeVelocity>();
-	ClassDB::register_class<VisualShaderNodeParticleRandomness>();
-	ClassDB::register_class<VisualShaderNodeParticleAccelerator>();
-	ClassDB::register_class<VisualShaderNodeParticleEmit>();
-
-	ClassDB::register_class<ShaderMaterial>();
-	ClassDB::register_virtual_class<CanvasItem>();
-	ClassDB::register_class<CanvasTexture>();
-	ClassDB::register_class<CanvasItemMaterial>();
+	GDREGISTER_CLASS(Shader);
+	GDREGISTER_CLASS(VisualShader);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNode);
+	GDREGISTER_CLASS(VisualShaderNodeCustom);
+	GDREGISTER_CLASS(VisualShaderNodeInput);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeOutput);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeResizableBase);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeGroupBase);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeConstant);
+	GDREGISTER_CLASS(VisualShaderNodeComment);
+	GDREGISTER_CLASS(VisualShaderNodeFloatConstant);
+	GDREGISTER_CLASS(VisualShaderNodeIntConstant);
+	GDREGISTER_CLASS(VisualShaderNodeBooleanConstant);
+	GDREGISTER_CLASS(VisualShaderNodeColorConstant);
+	GDREGISTER_CLASS(VisualShaderNodeVec3Constant);
+	GDREGISTER_CLASS(VisualShaderNodeTransformConstant);
+	GDREGISTER_CLASS(VisualShaderNodeFloatOp);
+	GDREGISTER_CLASS(VisualShaderNodeIntOp);
+	GDREGISTER_CLASS(VisualShaderNodeVectorOp);
+	GDREGISTER_CLASS(VisualShaderNodeColorOp);
+	GDREGISTER_CLASS(VisualShaderNodeTransformMult);
+	GDREGISTER_CLASS(VisualShaderNodeTransformVecMult);
+	GDREGISTER_CLASS(VisualShaderNodeFloatFunc);
+	GDREGISTER_CLASS(VisualShaderNodeIntFunc);
+	GDREGISTER_CLASS(VisualShaderNodeVectorFunc);
+	GDREGISTER_CLASS(VisualShaderNodeColorFunc);
+	GDREGISTER_CLASS(VisualShaderNodeTransformFunc);
+	GDREGISTER_CLASS(VisualShaderNodeUVFunc);
+	GDREGISTER_CLASS(VisualShaderNodeDotProduct);
+	GDREGISTER_CLASS(VisualShaderNodeVectorLen);
+	GDREGISTER_CLASS(VisualShaderNodeDeterminant);
+	GDREGISTER_CLASS(VisualShaderNodeScalarDerivativeFunc);
+	GDREGISTER_CLASS(VisualShaderNodeVectorDerivativeFunc);
+	GDREGISTER_CLASS(VisualShaderNodeClamp);
+	GDREGISTER_CLASS(VisualShaderNodeFaceForward);
+	GDREGISTER_CLASS(VisualShaderNodeOuterProduct);
+	GDREGISTER_CLASS(VisualShaderNodeSmoothStep);
+	GDREGISTER_CLASS(VisualShaderNodeStep);
+	GDREGISTER_CLASS(VisualShaderNodeVectorDistance);
+	GDREGISTER_CLASS(VisualShaderNodeVectorRefract);
+	GDREGISTER_CLASS(VisualShaderNodeMix);
+	GDREGISTER_CLASS(VisualShaderNodeVectorCompose);
+	GDREGISTER_CLASS(VisualShaderNodeTransformCompose);
+	GDREGISTER_CLASS(VisualShaderNodeVectorDecompose);
+	GDREGISTER_CLASS(VisualShaderNodeTransformDecompose);
+	GDREGISTER_CLASS(VisualShaderNodeTexture);
+	GDREGISTER_CLASS(VisualShaderNodeCurveTexture);
+	GDREGISTER_CLASS(VisualShaderNodeCurve3Texture);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeSample3D);
+	GDREGISTER_CLASS(VisualShaderNodeTexture2DArray);
+	GDREGISTER_CLASS(VisualShaderNodeTexture3D);
+	GDREGISTER_CLASS(VisualShaderNodeCubemap);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeUniform);
+	GDREGISTER_CLASS(VisualShaderNodeUniformRef);
+	GDREGISTER_CLASS(VisualShaderNodeFloatUniform);
+	GDREGISTER_CLASS(VisualShaderNodeIntUniform);
+	GDREGISTER_CLASS(VisualShaderNodeBooleanUniform);
+	GDREGISTER_CLASS(VisualShaderNodeColorUniform);
+	GDREGISTER_CLASS(VisualShaderNodeVec3Uniform);
+	GDREGISTER_CLASS(VisualShaderNodeTransformUniform);
+	GDREGISTER_CLASS(VisualShaderNodeTextureUniform);
+	GDREGISTER_CLASS(VisualShaderNodeTextureUniformTriplanar);
+	GDREGISTER_CLASS(VisualShaderNodeTexture2DArrayUniform);
+	GDREGISTER_CLASS(VisualShaderNodeTexture3DUniform);
+	GDREGISTER_CLASS(VisualShaderNodeCubemapUniform);
+	GDREGISTER_CLASS(VisualShaderNodeIf);
+	GDREGISTER_CLASS(VisualShaderNodeSwitch);
+	GDREGISTER_CLASS(VisualShaderNodeFresnel);
+	GDREGISTER_CLASS(VisualShaderNodeExpression);
+	GDREGISTER_CLASS(VisualShaderNodeGlobalExpression);
+	GDREGISTER_CLASS(VisualShaderNodeIs);
+	GDREGISTER_CLASS(VisualShaderNodeCompare);
+	GDREGISTER_CLASS(VisualShaderNodeMultiplyAdd);
+	GDREGISTER_CLASS(VisualShaderNodeBillboard);
+
+	GDREGISTER_CLASS(VisualShaderNodeSDFToScreenUV);
+	GDREGISTER_CLASS(VisualShaderNodeScreenUVToSDF);
+	GDREGISTER_CLASS(VisualShaderNodeTextureSDF);
+	GDREGISTER_CLASS(VisualShaderNodeTextureSDFNormal);
+	GDREGISTER_CLASS(VisualShaderNodeSDFRaymarch);
+
+	GDREGISTER_CLASS(VisualShaderNodeParticleOutput);
+	GDREGISTER_VIRTUAL_CLASS(VisualShaderNodeParticleEmitter);
+	GDREGISTER_CLASS(VisualShaderNodeParticleSphereEmitter);
+	GDREGISTER_CLASS(VisualShaderNodeParticleBoxEmitter);
+	GDREGISTER_CLASS(VisualShaderNodeParticleRingEmitter);
+	GDREGISTER_CLASS(VisualShaderNodeParticleMultiplyByAxisAngle);
+	GDREGISTER_CLASS(VisualShaderNodeParticleConeVelocity);
+	GDREGISTER_CLASS(VisualShaderNodeParticleRandomness);
+	GDREGISTER_CLASS(VisualShaderNodeParticleAccelerator);
+	GDREGISTER_CLASS(VisualShaderNodeParticleEmit);
+
+	GDREGISTER_CLASS(ShaderMaterial);
+	GDREGISTER_VIRTUAL_CLASS(CanvasItem);
+	GDREGISTER_CLASS(CanvasTexture);
+	GDREGISTER_CLASS(CanvasItemMaterial);
 	SceneTree::add_idle_callback(CanvasItemMaterial::flush_changes);
 	SceneTree::add_idle_callback(CanvasItemMaterial::flush_changes);
 	CanvasItemMaterial::init_shaders();
 	CanvasItemMaterial::init_shaders();
 
 
 	/* REGISTER 2D */
 	/* REGISTER 2D */
 
 
-	ClassDB::register_class<Node2D>();
-	ClassDB::register_class<CanvasGroup>();
-	ClassDB::register_class<CPUParticles2D>();
-	ClassDB::register_class<GPUParticles2D>();
-	ClassDB::register_class<Sprite2D>();
-	ClassDB::register_class<SpriteFrames>();
-	ClassDB::register_class<AnimatedSprite2D>();
-	ClassDB::register_class<Position2D>();
-	ClassDB::register_class<Line2D>();
-	ClassDB::register_class<MeshInstance2D>();
-	ClassDB::register_class<MultiMeshInstance2D>();
-	ClassDB::register_virtual_class<CollisionObject2D>();
-	ClassDB::register_virtual_class<PhysicsBody2D>();
-	ClassDB::register_class<StaticBody2D>();
-	ClassDB::register_class<RigidBody2D>();
-	ClassDB::register_class<CharacterBody2D>();
-	ClassDB::register_class<KinematicCollision2D>();
-	ClassDB::register_class<Area2D>();
-	ClassDB::register_class<CollisionShape2D>();
-	ClassDB::register_class<CollisionPolygon2D>();
-	ClassDB::register_class<RayCast2D>();
-	ClassDB::register_class<VisibleOnScreenNotifier2D>();
-	ClassDB::register_class<VisibleOnScreenEnabler2D>();
-	ClassDB::register_class<Polygon2D>();
-	ClassDB::register_class<Skeleton2D>();
-	ClassDB::register_class<Bone2D>();
-	ClassDB::register_virtual_class<Light2D>();
-	ClassDB::register_class<PointLight2D>();
-	ClassDB::register_class<DirectionalLight2D>();
-	ClassDB::register_class<LightOccluder2D>();
-	ClassDB::register_class<OccluderPolygon2D>();
-	ClassDB::register_class<BackBufferCopy>();
+	GDREGISTER_CLASS(Node2D);
+	GDREGISTER_CLASS(CanvasGroup);
+	GDREGISTER_CLASS(CPUParticles2D);
+	GDREGISTER_CLASS(GPUParticles2D);
+	GDREGISTER_CLASS(Sprite2D);
+	GDREGISTER_CLASS(SpriteFrames);
+	GDREGISTER_CLASS(AnimatedSprite2D);
+	GDREGISTER_CLASS(Position2D);
+	GDREGISTER_CLASS(Line2D);
+	GDREGISTER_CLASS(MeshInstance2D);
+	GDREGISTER_CLASS(MultiMeshInstance2D);
+	GDREGISTER_VIRTUAL_CLASS(CollisionObject2D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsBody2D);
+	GDREGISTER_CLASS(StaticBody2D);
+	GDREGISTER_CLASS(RigidBody2D);
+	GDREGISTER_CLASS(CharacterBody2D);
+	GDREGISTER_CLASS(KinematicCollision2D);
+	GDREGISTER_CLASS(Area2D);
+	GDREGISTER_CLASS(CollisionShape2D);
+	GDREGISTER_CLASS(CollisionPolygon2D);
+	GDREGISTER_CLASS(RayCast2D);
+	GDREGISTER_CLASS(VisibleOnScreenNotifier2D);
+	GDREGISTER_CLASS(VisibleOnScreenEnabler2D);
+	GDREGISTER_CLASS(Polygon2D);
+	GDREGISTER_CLASS(Skeleton2D);
+	GDREGISTER_CLASS(Bone2D);
+	GDREGISTER_VIRTUAL_CLASS(Light2D);
+	GDREGISTER_CLASS(PointLight2D);
+	GDREGISTER_CLASS(DirectionalLight2D);
+	GDREGISTER_CLASS(LightOccluder2D);
+	GDREGISTER_CLASS(OccluderPolygon2D);
+	GDREGISTER_CLASS(BackBufferCopy);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<Camera2D>();
-	ClassDB::register_virtual_class<Joint2D>();
-	ClassDB::register_class<PinJoint2D>();
-	ClassDB::register_class<GrooveJoint2D>();
-	ClassDB::register_class<DampedSpringJoint2D>();
-	ClassDB::register_class<TileSet>();
-	ClassDB::register_virtual_class<TileSetSource>();
-	ClassDB::register_class<TileSetAtlasSource>();
-	ClassDB::register_class<TileSetScenesCollectionSource>();
-	ClassDB::register_class<TileData>();
-	ClassDB::register_class<TileMap>();
-	ClassDB::register_class<ParallaxBackground>();
-	ClassDB::register_class<ParallaxLayer>();
-	ClassDB::register_class<TouchScreenButton>();
-	ClassDB::register_class<RemoteTransform2D>();
-
-	ClassDB::register_class<SkeletonModificationStack2D>();
-	ClassDB::register_class<SkeletonModification2D>();
-	ClassDB::register_class<SkeletonModification2DLookAt>();
-	ClassDB::register_class<SkeletonModification2DCCDIK>();
-	ClassDB::register_class<SkeletonModification2DFABRIK>();
-	ClassDB::register_class<SkeletonModification2DJiggle>();
-	ClassDB::register_class<SkeletonModification2DTwoBoneIK>();
-	ClassDB::register_class<SkeletonModification2DStackHolder>();
-
-	ClassDB::register_class<PhysicalBone2D>();
-	ClassDB::register_class<SkeletonModification2DPhysicalBones>();
+	GDREGISTER_CLASS(Camera2D);
+	GDREGISTER_VIRTUAL_CLASS(Joint2D);
+	GDREGISTER_CLASS(PinJoint2D);
+	GDREGISTER_CLASS(GrooveJoint2D);
+	GDREGISTER_CLASS(DampedSpringJoint2D);
+	GDREGISTER_CLASS(TileSet);
+	GDREGISTER_VIRTUAL_CLASS(TileSetSource);
+	GDREGISTER_CLASS(TileSetAtlasSource);
+	GDREGISTER_CLASS(TileSetScenesCollectionSource);
+	GDREGISTER_CLASS(TileData);
+	GDREGISTER_CLASS(TileMap);
+	GDREGISTER_CLASS(ParallaxBackground);
+	GDREGISTER_CLASS(ParallaxLayer);
+	GDREGISTER_CLASS(TouchScreenButton);
+	GDREGISTER_CLASS(RemoteTransform2D);
+
+	GDREGISTER_CLASS(SkeletonModificationStack2D);
+	GDREGISTER_CLASS(SkeletonModification2D);
+	GDREGISTER_CLASS(SkeletonModification2DLookAt);
+	GDREGISTER_CLASS(SkeletonModification2DCCDIK);
+	GDREGISTER_CLASS(SkeletonModification2DFABRIK);
+	GDREGISTER_CLASS(SkeletonModification2DJiggle);
+	GDREGISTER_CLASS(SkeletonModification2DTwoBoneIK);
+	GDREGISTER_CLASS(SkeletonModification2DStackHolder);
+
+	GDREGISTER_CLASS(PhysicalBone2D);
+	GDREGISTER_CLASS(SkeletonModification2DPhysicalBones);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
 	/* REGISTER RESOURCES */
 	/* REGISTER RESOURCES */
 
 
-	ClassDB::register_virtual_class<Shader>();
-	ClassDB::register_class<ParticlesMaterial>();
+	GDREGISTER_VIRTUAL_CLASS(Shader);
+	GDREGISTER_CLASS(ParticlesMaterial);
 	SceneTree::add_idle_callback(ParticlesMaterial::flush_changes);
 	SceneTree::add_idle_callback(ParticlesMaterial::flush_changes);
 	ParticlesMaterial::init_shaders();
 	ParticlesMaterial::init_shaders();
 
 
-	ClassDB::register_class<ProceduralSkyMaterial>();
-	ClassDB::register_class<PanoramaSkyMaterial>();
-	ClassDB::register_class<PhysicalSkyMaterial>();
+	GDREGISTER_CLASS(ProceduralSkyMaterial);
+	GDREGISTER_CLASS(PanoramaSkyMaterial);
+	GDREGISTER_CLASS(PhysicalSkyMaterial);
 
 
-	ClassDB::register_virtual_class<Mesh>();
-	ClassDB::register_class<ArrayMesh>();
-	ClassDB::register_class<ImmediateMesh>();
-	ClassDB::register_class<MultiMesh>();
-	ClassDB::register_class<SurfaceTool>();
-	ClassDB::register_class<MeshDataTool>();
+	GDREGISTER_VIRTUAL_CLASS(Mesh);
+	GDREGISTER_CLASS(ArrayMesh);
+	GDREGISTER_CLASS(ImmediateMesh);
+	GDREGISTER_CLASS(MultiMesh);
+	GDREGISTER_CLASS(SurfaceTool);
+	GDREGISTER_CLASS(MeshDataTool);
 
 
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
-	ClassDB::register_virtual_class<PrimitiveMesh>();
-	ClassDB::register_class<BoxMesh>();
-	ClassDB::register_class<CapsuleMesh>();
-	ClassDB::register_class<CylinderMesh>();
-	ClassDB::register_class<PlaneMesh>();
-	ClassDB::register_class<PrismMesh>();
-	ClassDB::register_class<QuadMesh>();
-	ClassDB::register_class<SphereMesh>();
-	ClassDB::register_class<TubeTrailMesh>();
-	ClassDB::register_class<RibbonTrailMesh>();
-	ClassDB::register_class<PointMesh>();
-	ClassDB::register_virtual_class<Material>();
-	ClassDB::register_virtual_class<BaseMaterial3D>();
-	ClassDB::register_class<StandardMaterial3D>();
-	ClassDB::register_class<ORMMaterial3D>();
+	GDREGISTER_VIRTUAL_CLASS(PrimitiveMesh);
+	GDREGISTER_CLASS(BoxMesh);
+	GDREGISTER_CLASS(CapsuleMesh);
+	GDREGISTER_CLASS(CylinderMesh);
+	GDREGISTER_CLASS(PlaneMesh);
+	GDREGISTER_CLASS(PrismMesh);
+	GDREGISTER_CLASS(QuadMesh);
+	GDREGISTER_CLASS(SphereMesh);
+	GDREGISTER_CLASS(TubeTrailMesh);
+	GDREGISTER_CLASS(RibbonTrailMesh);
+	GDREGISTER_CLASS(PointMesh);
+	GDREGISTER_VIRTUAL_CLASS(Material);
+	GDREGISTER_VIRTUAL_CLASS(BaseMaterial3D);
+	GDREGISTER_CLASS(StandardMaterial3D);
+	GDREGISTER_CLASS(ORMMaterial3D);
 	SceneTree::add_idle_callback(BaseMaterial3D::flush_changes);
 	SceneTree::add_idle_callback(BaseMaterial3D::flush_changes);
 	BaseMaterial3D::init_shaders();
 	BaseMaterial3D::init_shaders();
 
 
-	ClassDB::register_class<MeshLibrary>();
+	GDREGISTER_CLASS(MeshLibrary);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_virtual_class<Shape3D>();
-	ClassDB::register_class<RayShape3D>();
-	ClassDB::register_class<SphereShape3D>();
-	ClassDB::register_class<BoxShape3D>();
-	ClassDB::register_class<CapsuleShape3D>();
-	ClassDB::register_class<CylinderShape3D>();
-	ClassDB::register_class<HeightMapShape3D>();
-	ClassDB::register_class<WorldMarginShape3D>();
-	ClassDB::register_class<ConvexPolygonShape3D>();
-	ClassDB::register_class<ConcavePolygonShape3D>();
+	GDREGISTER_VIRTUAL_CLASS(Shape3D);
+	GDREGISTER_CLASS(RayShape3D);
+	GDREGISTER_CLASS(SphereShape3D);
+	GDREGISTER_CLASS(BoxShape3D);
+	GDREGISTER_CLASS(CapsuleShape3D);
+	GDREGISTER_CLASS(CylinderShape3D);
+	GDREGISTER_CLASS(HeightMapShape3D);
+	GDREGISTER_CLASS(WorldMarginShape3D);
+	GDREGISTER_CLASS(ConvexPolygonShape3D);
+	GDREGISTER_CLASS(ConcavePolygonShape3D);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<VelocityTracker3D>();
+	GDREGISTER_CLASS(VelocityTracker3D);
 #endif
 #endif
 
 
-	ClassDB::register_class<PhysicsMaterial>();
-	ClassDB::register_class<World3D>();
-	ClassDB::register_class<Environment>();
-	ClassDB::register_class<CameraEffects>();
-	ClassDB::register_class<World2D>();
-	ClassDB::register_virtual_class<Texture>();
-	ClassDB::register_virtual_class<Texture2D>();
-	ClassDB::register_class<Sky>();
-	ClassDB::register_class<StreamTexture2D>();
-	ClassDB::register_class<ImageTexture>();
-	ClassDB::register_class<AtlasTexture>();
-	ClassDB::register_class<MeshTexture>();
-	ClassDB::register_class<CurveTexture>();
-	ClassDB::register_class<Curve3Texture>();
-	ClassDB::register_class<GradientTexture>();
-	ClassDB::register_class<ProxyTexture>();
-	ClassDB::register_class<AnimatedTexture>();
-	ClassDB::register_class<CameraTexture>();
-	ClassDB::register_virtual_class<TextureLayered>();
-	ClassDB::register_virtual_class<ImageTextureLayered>();
-	ClassDB::register_virtual_class<Texture3D>();
-	ClassDB::register_class<ImageTexture3D>();
-	ClassDB::register_class<StreamTexture3D>();
-	ClassDB::register_class<Cubemap>();
-	ClassDB::register_class<CubemapArray>();
-	ClassDB::register_class<Texture2DArray>();
-	ClassDB::register_virtual_class<StreamTextureLayered>();
-	ClassDB::register_class<StreamCubemap>();
-	ClassDB::register_class<StreamCubemapArray>();
-	ClassDB::register_class<StreamTexture2DArray>();
-
-	ClassDB::register_class<Animation>();
-	ClassDB::register_class<FontData>();
-	ClassDB::register_class<Font>();
-	ClassDB::register_class<Curve>();
-
-	ClassDB::register_class<TextFile>();
-	ClassDB::register_class<TextLine>();
-	ClassDB::register_class<TextParagraph>();
-
-	ClassDB::register_virtual_class<StyleBox>();
-	ClassDB::register_class<StyleBoxEmpty>();
-	ClassDB::register_class<StyleBoxTexture>();
-	ClassDB::register_class<StyleBoxFlat>();
-	ClassDB::register_class<StyleBoxLine>();
-	ClassDB::register_class<Theme>();
-
-	ClassDB::register_class<PolygonPathFinder>();
-	ClassDB::register_class<BitMap>();
-	ClassDB::register_class<Gradient>();
+	GDREGISTER_CLASS(PhysicsMaterial);
+	GDREGISTER_CLASS(World3D);
+	GDREGISTER_CLASS(Environment);
+	GDREGISTER_CLASS(CameraEffects);
+	GDREGISTER_CLASS(World2D);
+	GDREGISTER_VIRTUAL_CLASS(Texture);
+	GDREGISTER_VIRTUAL_CLASS(Texture2D);
+	GDREGISTER_CLASS(Sky);
+	GDREGISTER_CLASS(StreamTexture2D);
+	GDREGISTER_CLASS(ImageTexture);
+	GDREGISTER_CLASS(AtlasTexture);
+	GDREGISTER_CLASS(MeshTexture);
+	GDREGISTER_CLASS(CurveTexture);
+	GDREGISTER_CLASS(Curve3Texture);
+	GDREGISTER_CLASS(GradientTexture);
+	GDREGISTER_CLASS(ProxyTexture);
+	GDREGISTER_CLASS(AnimatedTexture);
+	GDREGISTER_CLASS(CameraTexture);
+	GDREGISTER_VIRTUAL_CLASS(TextureLayered);
+	GDREGISTER_VIRTUAL_CLASS(ImageTextureLayered);
+	GDREGISTER_VIRTUAL_CLASS(Texture3D);
+	GDREGISTER_CLASS(ImageTexture3D);
+	GDREGISTER_CLASS(StreamTexture3D);
+	GDREGISTER_CLASS(Cubemap);
+	GDREGISTER_CLASS(CubemapArray);
+	GDREGISTER_CLASS(Texture2DArray);
+	GDREGISTER_VIRTUAL_CLASS(StreamTextureLayered);
+	GDREGISTER_CLASS(StreamCubemap);
+	GDREGISTER_CLASS(StreamCubemapArray);
+	GDREGISTER_CLASS(StreamTexture2DArray);
+
+	GDREGISTER_CLASS(Animation);
+	GDREGISTER_CLASS(FontData);
+	GDREGISTER_CLASS(Font);
+	GDREGISTER_CLASS(Curve);
+
+	GDREGISTER_CLASS(TextFile);
+	GDREGISTER_CLASS(TextLine);
+	GDREGISTER_CLASS(TextParagraph);
+
+	GDREGISTER_VIRTUAL_CLASS(StyleBox);
+	GDREGISTER_CLASS(StyleBoxEmpty);
+	GDREGISTER_CLASS(StyleBoxTexture);
+	GDREGISTER_CLASS(StyleBoxFlat);
+	GDREGISTER_CLASS(StyleBoxLine);
+	GDREGISTER_CLASS(Theme);
+
+	GDREGISTER_CLASS(PolygonPathFinder);
+	GDREGISTER_CLASS(BitMap);
+	GDREGISTER_CLASS(Gradient);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_class<AudioStreamPlayer>();
-	ClassDB::register_class<AudioStreamPlayer2D>();
+	GDREGISTER_CLASS(AudioStreamPlayer);
+	GDREGISTER_CLASS(AudioStreamPlayer2D);
 #ifndef _3D_DISABLED
 #ifndef _3D_DISABLED
-	ClassDB::register_class<AudioStreamPlayer3D>();
+	GDREGISTER_CLASS(AudioStreamPlayer3D);
 #endif
 #endif
-	ClassDB::register_virtual_class<VideoStream>();
-	ClassDB::register_class<AudioStreamSample>();
+	GDREGISTER_VIRTUAL_CLASS(VideoStream);
+	GDREGISTER_CLASS(AudioStreamSample);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_virtual_class<Shape2D>();
-	ClassDB::register_class<LineShape2D>();
-	ClassDB::register_class<SegmentShape2D>();
-	ClassDB::register_class<RayShape2D>();
-	ClassDB::register_class<CircleShape2D>();
-	ClassDB::register_class<RectangleShape2D>();
-	ClassDB::register_class<CapsuleShape2D>();
-	ClassDB::register_class<ConvexPolygonShape2D>();
-	ClassDB::register_class<ConcavePolygonShape2D>();
-	ClassDB::register_class<Curve2D>();
-	ClassDB::register_class<Path2D>();
-	ClassDB::register_class<PathFollow2D>();
-
-	ClassDB::register_class<NavigationMesh>();
-	ClassDB::register_class<NavigationPolygon>();
-	ClassDB::register_class<NavigationRegion2D>();
-	ClassDB::register_class<NavigationAgent2D>();
-	ClassDB::register_class<NavigationObstacle2D>();
+	GDREGISTER_VIRTUAL_CLASS(Shape2D);
+	GDREGISTER_CLASS(LineShape2D);
+	GDREGISTER_CLASS(SegmentShape2D);
+	GDREGISTER_CLASS(RayShape2D);
+	GDREGISTER_CLASS(CircleShape2D);
+	GDREGISTER_CLASS(RectangleShape2D);
+	GDREGISTER_CLASS(CapsuleShape2D);
+	GDREGISTER_CLASS(ConvexPolygonShape2D);
+	GDREGISTER_CLASS(ConcavePolygonShape2D);
+	GDREGISTER_CLASS(Curve2D);
+	GDREGISTER_CLASS(Path2D);
+	GDREGISTER_CLASS(PathFollow2D);
+
+	GDREGISTER_CLASS(NavigationMesh);
+	GDREGISTER_CLASS(NavigationPolygon);
+	GDREGISTER_CLASS(NavigationRegion2D);
+	GDREGISTER_CLASS(NavigationAgent2D);
+	GDREGISTER_CLASS(NavigationObstacle2D);
 
 
 	OS::get_singleton()->yield(); //may take time to init
 	OS::get_singleton()->yield(); //may take time to init
 
 
-	ClassDB::register_virtual_class<SceneState>();
-	ClassDB::register_class<PackedScene>();
+	GDREGISTER_VIRTUAL_CLASS(SceneState);
+	GDREGISTER_CLASS(PackedScene);
 
 
-	ClassDB::register_class<SceneTree>();
-	ClassDB::register_virtual_class<SceneTreeTimer>(); //sorry, you can't create it
+	GDREGISTER_CLASS(SceneTree);
+	GDREGISTER_VIRTUAL_CLASS(SceneTreeTimer); //sorry, you can't create it
 
 
 #ifndef DISABLE_DEPRECATED
 #ifndef DISABLE_DEPRECATED
 	// Dropped in 4.0, near approximation.
 	// Dropped in 4.0, near approximation.

+ 80 - 80
servers/register_server_types.cpp

@@ -120,106 +120,106 @@ void preregister_server_types() {
 void register_server_types() {
 void register_server_types() {
 	OS::get_singleton()->set_has_server_feature_callback(has_server_feature_callback);
 	OS::get_singleton()->set_has_server_feature_callback(has_server_feature_callback);
 
 
-	ClassDB::register_virtual_class<DisplayServer>();
-	ClassDB::register_virtual_class<RenderingServer>();
-	ClassDB::register_class<AudioServer>();
+	GDREGISTER_VIRTUAL_CLASS(DisplayServer);
+	GDREGISTER_VIRTUAL_CLASS(RenderingServer);
+	GDREGISTER_CLASS(AudioServer);
 
 
-	ClassDB::register_class<TextServerManager>();
-	ClassDB::register_virtual_class<TextServer>();
+	GDREGISTER_CLASS(TextServerManager);
+	GDREGISTER_VIRTUAL_CLASS(TextServer);
 	TextServer::initialize_hex_code_box_fonts();
 	TextServer::initialize_hex_code_box_fonts();
 
 
-	ClassDB::register_virtual_class<PhysicsServer2D>();
-	ClassDB::register_virtual_class<PhysicsServer3D>();
-	ClassDB::register_virtual_class<NavigationServer2D>();
-	ClassDB::register_virtual_class<NavigationServer3D>();
-	ClassDB::register_class<XRServer>();
-	ClassDB::register_class<CameraServer>();
+	GDREGISTER_VIRTUAL_CLASS(PhysicsServer2D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsServer3D);
+	GDREGISTER_VIRTUAL_CLASS(NavigationServer2D);
+	GDREGISTER_VIRTUAL_CLASS(NavigationServer3D);
+	GDREGISTER_CLASS(XRServer);
+	GDREGISTER_CLASS(CameraServer);
 
 
-	ClassDB::register_virtual_class<RenderingDevice>();
+	GDREGISTER_VIRTUAL_CLASS(RenderingDevice);
 
 
-	ClassDB::register_virtual_class<XRInterface>();
-	ClassDB::register_class<XRPositionalTracker>();
+	GDREGISTER_VIRTUAL_CLASS(XRInterface);
+	GDREGISTER_CLASS(XRPositionalTracker);
 
 
-	ClassDB::register_virtual_class<AudioStream>();
-	ClassDB::register_virtual_class<AudioStreamPlayback>();
-	ClassDB::register_virtual_class<AudioStreamPlaybackResampled>();
-	ClassDB::register_class<AudioStreamMicrophone>();
-	ClassDB::register_class<AudioStreamRandomPitch>();
-	ClassDB::register_virtual_class<AudioEffect>();
-	ClassDB::register_virtual_class<AudioEffectInstance>();
-	ClassDB::register_class<AudioEffectEQ>();
-	ClassDB::register_class<AudioEffectFilter>();
-	ClassDB::register_class<AudioBusLayout>();
+	GDREGISTER_VIRTUAL_CLASS(AudioStream);
+	GDREGISTER_VIRTUAL_CLASS(AudioStreamPlayback);
+	GDREGISTER_VIRTUAL_CLASS(AudioStreamPlaybackResampled);
+	GDREGISTER_CLASS(AudioStreamMicrophone);
+	GDREGISTER_CLASS(AudioStreamRandomPitch);
+	GDREGISTER_VIRTUAL_CLASS(AudioEffect);
+	GDREGISTER_VIRTUAL_CLASS(AudioEffectInstance);
+	GDREGISTER_CLASS(AudioEffectEQ);
+	GDREGISTER_CLASS(AudioEffectFilter);
+	GDREGISTER_CLASS(AudioBusLayout);
 
 
-	ClassDB::register_class<AudioStreamGenerator>();
-	ClassDB::register_virtual_class<AudioStreamGeneratorPlayback>();
+	GDREGISTER_CLASS(AudioStreamGenerator);
+	GDREGISTER_VIRTUAL_CLASS(AudioStreamGeneratorPlayback);
 
 
 	{
 	{
 		//audio effects
 		//audio effects
-		ClassDB::register_class<AudioEffectAmplify>();
+		GDREGISTER_CLASS(AudioEffectAmplify);
 
 
-		ClassDB::register_class<AudioEffectReverb>();
+		GDREGISTER_CLASS(AudioEffectReverb);
 
 
-		ClassDB::register_class<AudioEffectLowPassFilter>();
-		ClassDB::register_class<AudioEffectHighPassFilter>();
-		ClassDB::register_class<AudioEffectBandPassFilter>();
-		ClassDB::register_class<AudioEffectNotchFilter>();
-		ClassDB::register_class<AudioEffectBandLimitFilter>();
-		ClassDB::register_class<AudioEffectLowShelfFilter>();
-		ClassDB::register_class<AudioEffectHighShelfFilter>();
+		GDREGISTER_CLASS(AudioEffectLowPassFilter);
+		GDREGISTER_CLASS(AudioEffectHighPassFilter);
+		GDREGISTER_CLASS(AudioEffectBandPassFilter);
+		GDREGISTER_CLASS(AudioEffectNotchFilter);
+		GDREGISTER_CLASS(AudioEffectBandLimitFilter);
+		GDREGISTER_CLASS(AudioEffectLowShelfFilter);
+		GDREGISTER_CLASS(AudioEffectHighShelfFilter);
 
 
-		ClassDB::register_class<AudioEffectEQ6>();
-		ClassDB::register_class<AudioEffectEQ10>();
-		ClassDB::register_class<AudioEffectEQ21>();
+		GDREGISTER_CLASS(AudioEffectEQ6);
+		GDREGISTER_CLASS(AudioEffectEQ10);
+		GDREGISTER_CLASS(AudioEffectEQ21);
 
 
-		ClassDB::register_class<AudioEffectDistortion>();
+		GDREGISTER_CLASS(AudioEffectDistortion);
 
 
-		ClassDB::register_class<AudioEffectStereoEnhance>();
+		GDREGISTER_CLASS(AudioEffectStereoEnhance);
 
 
-		ClassDB::register_class<AudioEffectPanner>();
-		ClassDB::register_class<AudioEffectChorus>();
-		ClassDB::register_class<AudioEffectDelay>();
-		ClassDB::register_class<AudioEffectCompressor>();
-		ClassDB::register_class<AudioEffectLimiter>();
-		ClassDB::register_class<AudioEffectPitchShift>();
-		ClassDB::register_class<AudioEffectPhaser>();
+		GDREGISTER_CLASS(AudioEffectPanner);
+		GDREGISTER_CLASS(AudioEffectChorus);
+		GDREGISTER_CLASS(AudioEffectDelay);
+		GDREGISTER_CLASS(AudioEffectCompressor);
+		GDREGISTER_CLASS(AudioEffectLimiter);
+		GDREGISTER_CLASS(AudioEffectPitchShift);
+		GDREGISTER_CLASS(AudioEffectPhaser);
 
 
-		ClassDB::register_class<AudioEffectRecord>();
-		ClassDB::register_class<AudioEffectSpectrumAnalyzer>();
-		ClassDB::register_virtual_class<AudioEffectSpectrumAnalyzerInstance>();
+		GDREGISTER_CLASS(AudioEffectRecord);
+		GDREGISTER_CLASS(AudioEffectSpectrumAnalyzer);
+		GDREGISTER_VIRTUAL_CLASS(AudioEffectSpectrumAnalyzerInstance);
 
 
-		ClassDB::register_class<AudioEffectCapture>();
+		GDREGISTER_CLASS(AudioEffectCapture);
 	}
 	}
 
 
-	ClassDB::register_virtual_class<RenderingDevice>();
-	ClassDB::register_class<RDTextureFormat>();
-	ClassDB::register_class<RDTextureView>();
-	ClassDB::register_class<RDAttachmentFormat>();
-	ClassDB::register_class<RDFramebufferPass>();
-	ClassDB::register_class<RDSamplerState>();
-	ClassDB::register_class<RDVertexAttribute>();
-	ClassDB::register_class<RDUniform>();
-	ClassDB::register_class<RDPipelineRasterizationState>();
-	ClassDB::register_class<RDPipelineMultisampleState>();
-	ClassDB::register_class<RDPipelineDepthStencilState>();
-	ClassDB::register_class<RDPipelineColorBlendStateAttachment>();
-	ClassDB::register_class<RDPipelineColorBlendState>();
-	ClassDB::register_class<RDShaderSource>();
-	ClassDB::register_class<RDShaderBytecode>();
-	ClassDB::register_class<RDShaderFile>();
-	ClassDB::register_class<RDPipelineSpecializationConstant>();
-
-	ClassDB::register_class<CameraFeed>();
-
-	ClassDB::register_virtual_class<PhysicsDirectBodyState2D>();
-	ClassDB::register_virtual_class<PhysicsDirectSpaceState2D>();
-	ClassDB::register_class<PhysicsTestMotionResult2D>();
-	ClassDB::register_class<PhysicsShapeQueryParameters2D>();
-
-	ClassDB::register_class<PhysicsShapeQueryParameters3D>();
-	ClassDB::register_virtual_class<PhysicsDirectBodyState3D>();
-	ClassDB::register_virtual_class<PhysicsDirectSpaceState3D>();
-	ClassDB::register_class<PhysicsTestMotionResult3D>();
+	GDREGISTER_VIRTUAL_CLASS(RenderingDevice);
+	GDREGISTER_CLASS(RDTextureFormat);
+	GDREGISTER_CLASS(RDTextureView);
+	GDREGISTER_CLASS(RDAttachmentFormat);
+	GDREGISTER_CLASS(RDFramebufferPass);
+	GDREGISTER_CLASS(RDSamplerState);
+	GDREGISTER_CLASS(RDVertexAttribute);
+	GDREGISTER_CLASS(RDUniform);
+	GDREGISTER_CLASS(RDPipelineRasterizationState);
+	GDREGISTER_CLASS(RDPipelineMultisampleState);
+	GDREGISTER_CLASS(RDPipelineDepthStencilState);
+	GDREGISTER_CLASS(RDPipelineColorBlendStateAttachment);
+	GDREGISTER_CLASS(RDPipelineColorBlendState);
+	GDREGISTER_CLASS(RDShaderSource);
+	GDREGISTER_CLASS(RDShaderBytecode);
+	GDREGISTER_CLASS(RDShaderFile);
+	GDREGISTER_CLASS(RDPipelineSpecializationConstant);
+
+	GDREGISTER_CLASS(CameraFeed);
+
+	GDREGISTER_VIRTUAL_CLASS(PhysicsDirectBodyState2D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsDirectSpaceState2D);
+	GDREGISTER_CLASS(PhysicsTestMotionResult2D);
+	GDREGISTER_CLASS(PhysicsShapeQueryParameters2D);
+
+	GDREGISTER_CLASS(PhysicsShapeQueryParameters3D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsDirectBodyState3D);
+	GDREGISTER_VIRTUAL_CLASS(PhysicsDirectSpaceState3D);
+	GDREGISTER_CLASS(PhysicsTestMotionResult3D);
 
 
 	// Physics 2D
 	// Physics 2D
 	GLOBAL_DEF(PhysicsServer2DManager::setting_property_name, "DEFAULT");
 	GLOBAL_DEF(PhysicsServer2DManager::setting_property_name, "DEFAULT");

+ 2 - 2
tests/test_object.h

@@ -206,7 +206,7 @@ TEST_CASE("[Object] Script instance property getter") {
 }
 }
 
 
 TEST_CASE("[Object] Built-in property setter") {
 TEST_CASE("[Object] Built-in property setter") {
-	ClassDB::register_class<_TestDerivedObject>();
+	GDREGISTER_CLASS(_TestDerivedObject);
 	_TestDerivedObject derived_object;
 	_TestDerivedObject derived_object;
 
 
 	bool valid = false;
 	bool valid = false;
@@ -218,7 +218,7 @@ TEST_CASE("[Object] Built-in property setter") {
 }
 }
 
 
 TEST_CASE("[Object] Built-in property getter") {
 TEST_CASE("[Object] Built-in property getter") {
-	ClassDB::register_class<_TestDerivedObject>();
+	GDREGISTER_CLASS(_TestDerivedObject);
 	_TestDerivedObject derived_object;
 	_TestDerivedObject derived_object;
 	derived_object.set_property(100);
 	derived_object.set_property(100);