Merge pull request #11954 from neikeq/d
Added 'exposed' field to ClassInfo for registered classes
This commit is contained in:
commit
740ef3dc97
9 changed files with 66 additions and 15 deletions
|
@ -205,6 +205,7 @@ ClassDB::ClassInfo::ClassInfo() {
|
||||||
creation_func = NULL;
|
creation_func = NULL;
|
||||||
inherits_ptr = NULL;
|
inherits_ptr = NULL;
|
||||||
disabled = false;
|
disabled = false;
|
||||||
|
exposed = false;
|
||||||
}
|
}
|
||||||
ClassDB::ClassInfo::~ClassInfo() {
|
ClassDB::ClassInfo::~ClassInfo() {
|
||||||
}
|
}
|
||||||
|
@ -1284,6 +1285,15 @@ bool ClassDB::is_class_enabled(StringName p_class) {
|
||||||
return !ti->disabled;
|
return !ti->disabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ClassDB::is_class_exposed(StringName p_class) {
|
||||||
|
|
||||||
|
OBJTYPE_RLOCK;
|
||||||
|
|
||||||
|
ClassInfo *ti = classes.getptr(p_class);
|
||||||
|
ERR_FAIL_COND_V(!ti, false);
|
||||||
|
return ti->exposed;
|
||||||
|
}
|
||||||
|
|
||||||
StringName ClassDB::get_category(const StringName &p_node) {
|
StringName ClassDB::get_category(const StringName &p_node) {
|
||||||
|
|
||||||
ERR_FAIL_COND_V(!classes.has(p_node), StringName());
|
ERR_FAIL_COND_V(!classes.has(p_node), StringName());
|
||||||
|
|
|
@ -127,6 +127,7 @@ public:
|
||||||
StringName inherits;
|
StringName inherits;
|
||||||
StringName name;
|
StringName name;
|
||||||
bool disabled;
|
bool disabled;
|
||||||
|
bool exposed;
|
||||||
Object *(*creation_func)();
|
Object *(*creation_func)();
|
||||||
ClassInfo();
|
ClassInfo();
|
||||||
~ClassInfo();
|
~ClassInfo();
|
||||||
|
@ -168,6 +169,7 @@ public:
|
||||||
ClassInfo *t = classes.getptr(T::get_class_static());
|
ClassInfo *t = classes.getptr(T::get_class_static());
|
||||||
ERR_FAIL_COND(!t);
|
ERR_FAIL_COND(!t);
|
||||||
t->creation_func = &creator<T>;
|
t->creation_func = &creator<T>;
|
||||||
|
t->exposed = true;
|
||||||
T::register_custom_data_to_otdb();
|
T::register_custom_data_to_otdb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,6 +178,9 @@ public:
|
||||||
|
|
||||||
GLOBAL_LOCK_FUNCTION;
|
GLOBAL_LOCK_FUNCTION;
|
||||||
T::initialize_class();
|
T::initialize_class();
|
||||||
|
ClassInfo *t = classes.getptr(T::get_class_static());
|
||||||
|
ERR_FAIL_COND(!t);
|
||||||
|
t->exposed = true;
|
||||||
//nothing
|
//nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,6 +198,7 @@ public:
|
||||||
ClassInfo *t = classes.getptr(T::get_class_static());
|
ClassInfo *t = classes.getptr(T::get_class_static());
|
||||||
ERR_FAIL_COND(!t);
|
ERR_FAIL_COND(!t);
|
||||||
t->creation_func = &_create_ptr_func<T>;
|
t->creation_func = &_create_ptr_func<T>;
|
||||||
|
t->exposed = true;
|
||||||
T::register_custom_data_to_otdb();
|
T::register_custom_data_to_otdb();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,6 +353,8 @@ public:
|
||||||
static void set_class_enabled(StringName p_class, bool p_enable);
|
static void set_class_enabled(StringName p_class, bool p_enable);
|
||||||
static bool is_class_enabled(StringName p_class);
|
static bool is_class_enabled(StringName p_class);
|
||||||
|
|
||||||
|
static bool is_class_exposed(StringName p_class);
|
||||||
|
|
||||||
static void add_resource_base_extension(const StringName &p_extension, const StringName &p_class);
|
static void add_resource_base_extension(const StringName &p_extension, const StringName &p_class);
|
||||||
static void get_resource_base_extensions(List<String> *p_extensions);
|
static void get_resource_base_extensions(List<String> *p_extensions);
|
||||||
static void get_extensions_for_type(const StringName &p_class, List<String> *p_extensions);
|
static void get_extensions_for_type(const StringName &p_class, List<String> *p_extensions);
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "io/config_file.h"
|
#include "io/config_file.h"
|
||||||
#include "io/http_client.h"
|
#include "io/http_client.h"
|
||||||
#include "io/marshalls.h"
|
#include "io/marshalls.h"
|
||||||
|
#include "io/networked_multiplayer_peer.h"
|
||||||
#include "io/packet_peer.h"
|
#include "io/packet_peer.h"
|
||||||
#include "io/packet_peer_udp.h"
|
#include "io/packet_peer_udp.h"
|
||||||
#include "io/pck_packer.h"
|
#include "io/pck_packer.h"
|
||||||
|
@ -109,6 +110,8 @@ void register_core_types() {
|
||||||
|
|
||||||
ClassDB::register_class<Object>();
|
ClassDB::register_class<Object>();
|
||||||
|
|
||||||
|
ClassDB::register_virtual_class<Script>();
|
||||||
|
|
||||||
ClassDB::register_class<Reference>();
|
ClassDB::register_class<Reference>();
|
||||||
ClassDB::register_class<WeakRef>();
|
ClassDB::register_class<WeakRef>();
|
||||||
ClassDB::register_class<Resource>();
|
ClassDB::register_class<Resource>();
|
||||||
|
@ -136,6 +139,7 @@ void register_core_types() {
|
||||||
ClassDB::register_virtual_class<IP>();
|
ClassDB::register_virtual_class<IP>();
|
||||||
ClassDB::register_virtual_class<PacketPeer>();
|
ClassDB::register_virtual_class<PacketPeer>();
|
||||||
ClassDB::register_class<PacketPeerStream>();
|
ClassDB::register_class<PacketPeerStream>();
|
||||||
|
ClassDB::register_virtual_class<NetworkedMultiplayerPeer>();
|
||||||
ClassDB::register_class<MainLoop>();
|
ClassDB::register_class<MainLoop>();
|
||||||
//ClassDB::register_type<OptimizedSaver>();
|
//ClassDB::register_type<OptimizedSaver>();
|
||||||
ClassDB::register_class<Translation>();
|
ClassDB::register_class<Translation>();
|
||||||
|
@ -185,6 +189,20 @@ void register_core_settings() {
|
||||||
|
|
||||||
void register_core_singletons() {
|
void register_core_singletons() {
|
||||||
|
|
||||||
|
ClassDB::register_class<ProjectSettings>();
|
||||||
|
ClassDB::register_virtual_class<IP>();
|
||||||
|
ClassDB::register_class<_Geometry>();
|
||||||
|
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<_JSON>();
|
||||||
|
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("ProjectSettings", ProjectSettings::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("ProjectSettings", ProjectSettings::get_singleton()));
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("IP", IP::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("IP", IP::get_singleton()));
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("Geometry", _Geometry::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("Geometry", _Geometry::get_singleton()));
|
||||||
|
|
|
@ -257,6 +257,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>();
|
||||||
globals->add_singleton(ProjectSettings::Singleton("Performance", performance));
|
globals->add_singleton(ProjectSettings::Singleton("Performance", performance));
|
||||||
|
|
||||||
GLOBAL_DEF("debug/settings/crash_handler/message", String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues"));
|
GLOBAL_DEF("debug/settings/crash_handler/message", String("Please include this when reporting the bug on https://github.com/godotengine/godot/issues"));
|
||||||
|
|
|
@ -654,6 +654,13 @@ void *CSharpLanguage::alloc_instance_binding_data(Object *p_object) {
|
||||||
|
|
||||||
StringName type_name = p_object->get_class_name();
|
StringName type_name = p_object->get_class_name();
|
||||||
|
|
||||||
|
// ¯\_(ツ)_/¯
|
||||||
|
const ClassDB::ClassInfo *classinfo = ClassDB::classes.getptr(type_name);
|
||||||
|
while (classinfo && !classinfo->exposed)
|
||||||
|
classinfo = classinfo->inherits_ptr;
|
||||||
|
ERR_FAIL_NULL_V(classinfo, NULL);
|
||||||
|
type_name = classinfo->name;
|
||||||
|
|
||||||
GDMonoClass *type_class = GDMonoUtils::type_get_proxy_class(type_name);
|
GDMonoClass *type_class = GDMonoUtils::type_get_proxy_class(type_name);
|
||||||
|
|
||||||
ERR_FAIL_NULL_V(type_class, NULL);
|
ERR_FAIL_NULL_V(type_class, NULL);
|
||||||
|
|
|
@ -133,12 +133,6 @@ static bool is_csharp_keyword(const String &p_name) {
|
||||||
p_name == "virtual" || p_name == "volatile" || p_name == "void" || p_name == "while";
|
p_name == "virtual" || p_name == "volatile" || p_name == "void" || p_name == "while";
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool is_singleton_black_listed(const String &p_type) {
|
|
||||||
|
|
||||||
return p_type == "IP_Unix" || p_type == "InputDefault" || p_type == "AudioServerSW" || p_type == "PhysicsServerSW" ||
|
|
||||||
p_type == "Physics2DServerSW" || p_type == "SpatialSoundServerSW" || p_type == "SpatialSound2DServerSW";
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static String escape_csharp_keyword(const String &p_name) {
|
inline static String escape_csharp_keyword(const String &p_name) {
|
||||||
|
|
||||||
return is_csharp_keyword(p_name) ? "@" + p_name : p_name;
|
return is_csharp_keyword(p_name) ? "@" + p_name : p_name;
|
||||||
|
@ -247,9 +241,6 @@ void BindingsGenerator::_generate_header_icalls() {
|
||||||
|
|
||||||
void BindingsGenerator::_generate_method_icalls(const TypeInterface &p_itype) {
|
void BindingsGenerator::_generate_method_icalls(const TypeInterface &p_itype) {
|
||||||
|
|
||||||
if (p_itype.base_name.length() && obj_types[p_itype.base_name].is_singleton && is_singleton_black_listed(p_itype.name))
|
|
||||||
return;
|
|
||||||
|
|
||||||
for (const List<MethodInterface>::Element *E = p_itype.methods.front(); E; E = E->next()) {
|
for (const List<MethodInterface>::Element *E = p_itype.methods.front(); E; E = E->next()) {
|
||||||
const MethodInterface &imethod = E->get();
|
const MethodInterface &imethod = E->get();
|
||||||
|
|
||||||
|
@ -580,9 +571,6 @@ Error BindingsGenerator::_generate_cs_type(const TypeInterface &itype, const Str
|
||||||
|
|
||||||
bool is_derived_type = itype.base_name.length();
|
bool is_derived_type = itype.base_name.length();
|
||||||
|
|
||||||
if (is_derived_type && obj_types[itype.base_name].is_singleton && is_singleton_black_listed(itype.name))
|
|
||||||
return ERR_SKIP;
|
|
||||||
|
|
||||||
List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls;
|
List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls;
|
||||||
|
|
||||||
if (verbose_output)
|
if (verbose_output)
|
||||||
|
@ -1167,9 +1155,6 @@ Error BindingsGenerator::generate_glue(const String &p_output_dir) {
|
||||||
for (Map<String, TypeInterface>::Element *type_elem = obj_types.front(); type_elem; type_elem = type_elem->next()) {
|
for (Map<String, TypeInterface>::Element *type_elem = obj_types.front(); type_elem; type_elem = type_elem->next()) {
|
||||||
const TypeInterface &itype = type_elem->get();
|
const TypeInterface &itype = type_elem->get();
|
||||||
|
|
||||||
if (itype.base_name.length() && obj_types[itype.base_name].is_singleton && is_singleton_black_listed(itype.name))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls;
|
List<InternalCall> &custom_icalls = itype.api_type == ClassDB::API_EDITOR ? editor_custom_icalls : core_custom_icalls;
|
||||||
|
|
||||||
OS::get_singleton()->print(String("Generating " + itype.name + "...\n").utf8());
|
OS::get_singleton()->print(String("Generating " + itype.name + "...\n").utf8());
|
||||||
|
@ -1519,6 +1504,12 @@ void BindingsGenerator::_populate_object_type_interfaces() {
|
||||||
itype.is_reference = ClassDB::is_parent_class(type_cname, refclass_name);
|
itype.is_reference = ClassDB::is_parent_class(type_cname, refclass_name);
|
||||||
itype.memory_own = itype.is_reference;
|
itype.memory_own = itype.is_reference;
|
||||||
|
|
||||||
|
if (!ClassDB::is_class_exposed(type_cname)) {
|
||||||
|
WARN_PRINTS("Ignoring type " + String(type_cname) + " because it's not exposed");
|
||||||
|
class_list.pop_front();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
itype.c_out = "\treturn ";
|
itype.c_out = "\treturn ";
|
||||||
itype.c_out += C_METHOD_UNMANAGED_GET_MANAGED;
|
itype.c_out += C_METHOD_UNMANAGED_GET_MANAGED;
|
||||||
itype.c_out += itype.is_reference ? "(%1.ptr());\n" : "(%1);\n";
|
itype.c_out += itype.is_reference ? "(%1.ptr());\n" : "(%1);\n";
|
||||||
|
|
|
@ -44,6 +44,7 @@ void register_mono_types() {
|
||||||
|
|
||||||
_godotsharp = memnew(_GodotSharp);
|
_godotsharp = memnew(_GodotSharp);
|
||||||
|
|
||||||
|
ClassDB::register_class<_GodotSharp>();
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("GodotSharp", _GodotSharp::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("GodotSharp", _GodotSharp::get_singleton()));
|
||||||
|
|
||||||
script_language_cs = memnew(CSharpLanguage);
|
script_language_cs = memnew(CSharpLanguage);
|
||||||
|
|
|
@ -266,9 +266,11 @@ void register_scene_types() {
|
||||||
ClassDB::register_class<Control>();
|
ClassDB::register_class<Control>();
|
||||||
ClassDB::register_class<Button>();
|
ClassDB::register_class<Button>();
|
||||||
ClassDB::register_class<Label>();
|
ClassDB::register_class<Label>();
|
||||||
|
ClassDB::register_class<ScrollBar>();
|
||||||
ClassDB::register_class<HScrollBar>();
|
ClassDB::register_class<HScrollBar>();
|
||||||
ClassDB::register_class<VScrollBar>();
|
ClassDB::register_class<VScrollBar>();
|
||||||
ClassDB::register_class<ProgressBar>();
|
ClassDB::register_class<ProgressBar>();
|
||||||
|
ClassDB::register_class<Slider>();
|
||||||
ClassDB::register_class<HSlider>();
|
ClassDB::register_class<HSlider>();
|
||||||
ClassDB::register_class<VSlider>();
|
ClassDB::register_class<VSlider>();
|
||||||
ClassDB::register_class<Popup>();
|
ClassDB::register_class<Popup>();
|
||||||
|
@ -352,6 +354,7 @@ void register_scene_types() {
|
||||||
#ifndef _3D_DISABLED
|
#ifndef _3D_DISABLED
|
||||||
ClassDB::register_class<BoneAttachment>();
|
ClassDB::register_class<BoneAttachment>();
|
||||||
ClassDB::register_virtual_class<VisualInstance>();
|
ClassDB::register_virtual_class<VisualInstance>();
|
||||||
|
ClassDB::register_virtual_class<GeometryInstance>();
|
||||||
ClassDB::register_class<Camera>();
|
ClassDB::register_class<Camera>();
|
||||||
ClassDB::register_class<Listener>();
|
ClassDB::register_class<Listener>();
|
||||||
ClassDB::register_class<ARVRCamera>();
|
ClassDB::register_class<ARVRCamera>();
|
||||||
|
@ -361,6 +364,7 @@ void register_scene_types() {
|
||||||
ClassDB::register_class<InterpolatedCamera>();
|
ClassDB::register_class<InterpolatedCamera>();
|
||||||
ClassDB::register_class<MeshInstance>();
|
ClassDB::register_class<MeshInstance>();
|
||||||
ClassDB::register_class<ImmediateGeometry>();
|
ClassDB::register_class<ImmediateGeometry>();
|
||||||
|
ClassDB::register_virtual_class<SpriteBase3D>();
|
||||||
ClassDB::register_class<Sprite3D>();
|
ClassDB::register_class<Sprite3D>();
|
||||||
ClassDB::register_class<AnimatedSprite3D>();
|
ClassDB::register_class<AnimatedSprite3D>();
|
||||||
ClassDB::register_virtual_class<Light>();
|
ClassDB::register_virtual_class<Light>();
|
||||||
|
@ -380,6 +384,7 @@ void register_scene_types() {
|
||||||
OS::get_singleton()->yield(); //may take time to init
|
OS::get_singleton()->yield(); //may take time to init
|
||||||
|
|
||||||
ClassDB::register_virtual_class<CollisionObject>();
|
ClassDB::register_virtual_class<CollisionObject>();
|
||||||
|
ClassDB::register_virtual_class<PhysicsBody>();
|
||||||
ClassDB::register_class<StaticBody>();
|
ClassDB::register_class<StaticBody>();
|
||||||
ClassDB::register_class<RigidBody>();
|
ClassDB::register_class<RigidBody>();
|
||||||
ClassDB::register_class<KinematicCollision>();
|
ClassDB::register_class<KinematicCollision>();
|
||||||
|
@ -494,6 +499,7 @@ void register_scene_types() {
|
||||||
|
|
||||||
OS::get_singleton()->yield(); //may take time to init
|
OS::get_singleton()->yield(); //may take time to init
|
||||||
|
|
||||||
|
ClassDB::register_virtual_class<Shape>();
|
||||||
ClassDB::register_class<RayShape>();
|
ClassDB::register_class<RayShape>();
|
||||||
ClassDB::register_class<SphereShape>();
|
ClassDB::register_class<SphereShape>();
|
||||||
ClassDB::register_class<BoxShape>();
|
ClassDB::register_class<BoxShape>();
|
||||||
|
@ -531,6 +537,7 @@ void register_scene_types() {
|
||||||
ClassDB::register_class<DynamicFontData>();
|
ClassDB::register_class<DynamicFontData>();
|
||||||
ClassDB::register_class<DynamicFont>();
|
ClassDB::register_class<DynamicFont>();
|
||||||
|
|
||||||
|
ClassDB::register_virtual_class<StyleBox>();
|
||||||
ClassDB::register_class<StyleBoxEmpty>();
|
ClassDB::register_class<StyleBoxEmpty>();
|
||||||
ClassDB::register_class<StyleBoxTexture>();
|
ClassDB::register_class<StyleBoxTexture>();
|
||||||
ClassDB::register_class<StyleBoxFlat>();
|
ClassDB::register_class<StyleBoxFlat>();
|
||||||
|
|
|
@ -79,6 +79,12 @@ ARVRServer *arvr_server = NULL;
|
||||||
void register_server_types() {
|
void register_server_types() {
|
||||||
arvr_server = memnew(ARVRServer);
|
arvr_server = memnew(ARVRServer);
|
||||||
|
|
||||||
|
ClassDB::register_virtual_class<VisualServer>();
|
||||||
|
ClassDB::register_class<AudioServer>();
|
||||||
|
ClassDB::register_virtual_class<PhysicsServer>();
|
||||||
|
ClassDB::register_virtual_class<Physics2DServer>();
|
||||||
|
ClassDB::register_class<ARVRServer>();
|
||||||
|
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("VisualServer", VisualServer::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("VisualServer", VisualServer::get_singleton()));
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("AudioServer", AudioServer::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("AudioServer", AudioServer::get_singleton()));
|
||||||
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("PhysicsServer", PhysicsServer::get_singleton()));
|
ProjectSettings::get_singleton()->add_singleton(ProjectSettings::Singleton("PhysicsServer", PhysicsServer::get_singleton()));
|
||||||
|
@ -95,6 +101,8 @@ void register_server_types() {
|
||||||
ClassDB::register_virtual_class<AudioStreamPlayback>();
|
ClassDB::register_virtual_class<AudioStreamPlayback>();
|
||||||
ClassDB::register_class<AudioStreamRandomPitch>();
|
ClassDB::register_class<AudioStreamRandomPitch>();
|
||||||
ClassDB::register_virtual_class<AudioEffect>();
|
ClassDB::register_virtual_class<AudioEffect>();
|
||||||
|
ClassDB::register_class<AudioEffectEQ>();
|
||||||
|
ClassDB::register_class<AudioEffectFilter>();
|
||||||
ClassDB::register_class<AudioBusLayout>();
|
ClassDB::register_class<AudioBusLayout>();
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue