diff options
author | Raul Santos <raulsntos@gmail.com> | 2021-10-18 02:57:44 +0200 |
---|---|---|
committer | Raul Santos <raulsntos@gmail.com> | 2021-10-18 03:07:47 +0200 |
commit | bc47bacc9efc92c08c6b512ec10ac013a4aaed4b (patch) | |
tree | c4bbe1eefcd45bc18df83fe63eb8e96e9ee87b63 /modules | |
parent | 468b987aa38b21b55c1cd8a8d4c03b8e1b2a1373 (diff) |
Fix marshaling generic Godot.Object in C#
Diffstat (limited to 'modules')
-rw-r--r-- | modules/mono/mono_gd/gd_mono_marshal.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp index f8736dd043..1904634132 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.cpp +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -1256,6 +1256,17 @@ Variant mono_object_to_variant_impl(MonoObject *p_obj, const ManagedType &p_type GDMonoUtils::Marshal::array_get_element_type(reftype, &elem_reftype); return system_generic_list_to_Array_variant(p_obj, p_type.type_class, elem_reftype); } + + // GodotObject + GDMonoClass *type_class = p_type.type_class; + if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) { + Object *ptr = unbox<Object *>(CACHED_FIELD(GodotObject, ptr)->get_value(p_obj)); + if (ptr != nullptr) { + RefCounted *rc = Object::cast_to<RefCounted>(ptr); + return rc ? Variant(Ref<RefCounted>(rc)) : Variant(ptr); + } + return Variant(); + } } break; } |