diff options
author | Juan Linietsky <reduzio@gmail.com> | 2015-01-03 16:52:37 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2015-01-03 16:52:37 -0300 |
commit | fbdd925d9be1c4c96d05089d7d5a58cd938b002c (patch) | |
tree | 9f4eb2ae7c61450dffb4a86bb5e82cf66e23d496 /core | |
parent | eb1f978b1c1693018e9a6d353ca914f8e6586b4e (diff) |
-Work in progress visual shader editor *DOES NOT WORK YET*
Diffstat (limited to 'core')
-rw-r--r-- | core/method_bind.h | 1 | ||||
-rw-r--r-- | core/object_type_db.cpp | 12 | ||||
-rw-r--r-- | core/object_type_db.h | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/core/method_bind.h b/core/method_bind.h index 3f08c70af8..6ea9340ad5 100644 --- a/core/method_bind.h +++ b/core/method_bind.h @@ -178,6 +178,7 @@ public: #ifdef DEBUG_METHODS_ENABLED _FORCE_INLINE_ void set_return_type(const StringName& p_type) { ret_type=p_type; } + _FORCE_INLINE_ StringName get_return_type() const { return ret_type; } _FORCE_INLINE_ Variant::Type get_argument_type(int p_argument) const { diff --git a/core/object_type_db.cpp b/core/object_type_db.cpp index efd92542ce..f7917b7418 100644 --- a/core/object_type_db.cpp +++ b/core/object_type_db.cpp @@ -191,6 +191,7 @@ MethodDefinition _MD(const char* p_name,const char *p_arg1,const char *p_arg2,co HashMap<StringName,ObjectTypeDB::TypeInfo,StringNameHasher> ObjectTypeDB::types; HashMap<StringName,StringName,StringNameHasher> ObjectTypeDB::resource_base_extensions; +HashMap<StringName,StringName,StringNameHasher> ObjectTypeDB::compat_types; ObjectTypeDB::TypeInfo::TypeInfo() { @@ -263,12 +264,22 @@ bool ObjectTypeDB::type_exists(const String &p_type) { return types.has(p_type); } +void ObjectTypeDB::add_compatibility_type(const StringName& p_type,const StringName& p_fallback) { + + compat_types[p_type]=p_fallback; +} + Object *ObjectTypeDB::instance(const String &p_type) { TypeInfo *ti; { OBJTYPE_LOCK; ti=types.getptr(p_type); + if (!ti || ti->disabled || !ti->creation_func) { + if (compat_types.has(p_type)) { + ti=types.getptr(compat_types[p_type]); + } + } ERR_FAIL_COND_V(!ti,NULL); ERR_FAIL_COND_V(ti->disabled,NULL); ERR_FAIL_COND_V(!ti->creation_func,NULL); @@ -914,6 +925,7 @@ void ObjectTypeDB::cleanup() { } types.clear(); resource_base_extensions.clear(); + compat_types.clear(); } // diff --git a/core/object_type_db.h b/core/object_type_db.h index f2ff194e28..617a0a7c20 100644 --- a/core/object_type_db.h +++ b/core/object_type_db.h @@ -151,6 +151,7 @@ class ObjectTypeDB { static Mutex *lock; static HashMap<StringName,TypeInfo,StringNameHasher> types; static HashMap<StringName,StringName,StringNameHasher> resource_base_extensions; + static HashMap<StringName,StringName,StringNameHasher> compat_types; #ifdef DEBUG_METHODS_ENABLED static MethodBind* bind_methodfi(uint32_t p_flags, MethodBind *p_bind , const MethodDefinition &method_name, const Variant **p_defs, int p_defcount); @@ -482,6 +483,7 @@ public: static void get_resource_base_extensions(List<String> *p_extensions); static void get_extensions_for_type(const StringName& p_type,List<String> *p_extensions); + static void add_compatibility_type(const StringName& p_type,const StringName& p_fallback); static void init(); static void cleanup(); }; |