summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2015-04-24 20:45:07 -0300
committerJuan Linietsky <reduzio@gmail.com>2015-04-24 20:45:07 -0300
commit1f8e3117dd8643b9c6d6127a891a0f4673479fa2 (patch)
tree19dea5f990028967a83dbf062fa1fdf29b6a16c7
parent807a811fadc9031d7533bf198322af2a0684f2cb (diff)
Ability to convert from nodes or other non resource with a get_rid() function to a rid
-rw-r--r--core/core_string_names.cpp1
-rw-r--r--core/core_string_names.h1
-rw-r--r--core/variant.cpp12
3 files changed, 12 insertions, 2 deletions
diff --git a/core/core_string_names.cpp b/core/core_string_names.cpp
index 1fafc8110a..d0cd19768f 100644
--- a/core/core_string_names.cpp
+++ b/core/core_string_names.cpp
@@ -42,6 +42,7 @@ CoreStringNames::CoreStringNames() {
_iter_init=StaticCString::create("_iter_init");
_iter_next=StaticCString::create("_iter_next");
_iter_get=StaticCString::create("_iter_get");
+ get_rid=StaticCString::create("get_rid");
}
diff --git a/core/core_string_names.h b/core/core_string_names.h
index bf32e5f8c1..8bda1f3f79 100644
--- a/core/core_string_names.h
+++ b/core/core_string_names.h
@@ -56,6 +56,7 @@ public:
StringName _iter_init;
StringName _iter_next;
StringName _iter_get;
+ StringName get_rid;
};
diff --git a/core/variant.cpp b/core/variant.cpp
index a85f288620..e0c4b4244d 100644
--- a/core/variant.cpp
+++ b/core/variant.cpp
@@ -32,7 +32,7 @@
#include "scene/main/node.h"
#include "scene/gui/control.h"
#include "io/marshalls.h"
-
+#include "core_string_names.h"
@@ -1430,8 +1430,16 @@ Variant::operator RID() const {
return *reinterpret_cast<const RID*>(_data._mem);
else if (type==OBJECT && !_get_obj().ref.is_null()) {
return _get_obj().ref.get_rid();
- } else
+ } else if (type==OBJECT && _get_obj().obj) {
+ Variant::CallError ce;
+ Variant ret = _get_obj().obj->call(CoreStringNames::get_singleton()->get_rid,NULL,0,ce);
+ if (ce.error==Variant::CallError::CALL_OK && ret.get_type()==Variant::_RID) {
+ return ret;
+ }
return RID();
+ } else {
+ return RID();
+ }
}
Variant::operator Object*() const {