diff options
author | Ignacio Etcheverry <neikeq@users.noreply.github.com> | 2017-08-06 07:26:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-06 07:26:49 +0200 |
commit | 97e942dd42ea5df241e1e81704eaa6c383f3c9b4 (patch) | |
tree | 857a65af3b8829fdcfe68182a1652ab1d7609ef0 | |
parent | 37adf936abf018bb8b643b589c07ac0f1a036f51 (diff) | |
parent | aee99ab59ff73f54dcf834d870432a62f17ccc82 (diff) |
Merge pull request #10117 from neikeq/pr-classdb-getpropidx
ClassDB: Adds get_property_index method
-rw-r--r-- | core/class_db.cpp | 22 | ||||
-rw-r--r-- | core/class_db.h | 1 |
2 files changed, 23 insertions, 0 deletions
diff --git a/core/class_db.cpp b/core/class_db.cpp index 6b8c290a99..24d71f86b0 100644 --- a/core/class_db.cpp +++ b/core/class_db.cpp @@ -937,6 +937,28 @@ bool ClassDB::get_property(Object *p_object, const StringName &p_property, Varia return false; } +int ClassDB::get_property_index(const StringName &p_class, const StringName &p_property, bool *r_is_valid) { + + ClassInfo *type = classes.getptr(p_class); + ClassInfo *check = type; + while (check) { + const PropertySetGet *psg = check->property_setget.getptr(p_property); + if (psg) { + + if (r_is_valid) + *r_is_valid = true; + + return psg->index; + } + + check = check->inherits_ptr; + } + if (r_is_valid) + *r_is_valid = false; + + return -1; +} + Variant::Type ClassDB::get_property_type(const StringName &p_class, const StringName &p_property, bool *r_is_valid) { ClassInfo *type = classes.getptr(p_class); diff --git a/core/class_db.h b/core/class_db.h index 4f00a16e91..02eac0dbbc 100644 --- a/core/class_db.h +++ b/core/class_db.h @@ -480,6 +480,7 @@ public: static bool set_property(Object *p_object, const StringName &p_property, const Variant &p_value, bool *r_valid = NULL); static bool get_property(Object *p_object, const StringName &p_property, Variant &r_value); static bool has_property(const StringName &p_class, const StringName &p_property, bool p_no_inheritance = false); + static int get_property_index(const StringName &p_class, const StringName &p_property, bool *r_is_valid = NULL); static Variant::Type get_property_type(const StringName &p_class, const StringName &p_property, bool *r_is_valid = NULL); static StringName get_property_setter(StringName p_class, const StringName p_property); static StringName get_property_getter(StringName p_class, const StringName p_property); |