Browse Source

Merge pull request #53581 from raulsntos/mono-marshal-generics

Rémi Verschelde 3 years ago
parent
commit
6fb06ec47e
1 changed files with 11 additions and 0 deletions
  1. 11 0
      modules/mono/mono_gd/gd_mono_marshal.cpp

+ 11 - 0
modules/mono/mono_gd/gd_mono_marshal.cpp

@@ -278,6 +278,12 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type, bool *r_nil_is_
 			if (GDMonoUtils::Marshal::type_is_generic_icollection(reftype) || GDMonoUtils::Marshal::type_is_generic_ienumerable(reftype)) {
 			if (GDMonoUtils::Marshal::type_is_generic_icollection(reftype) || GDMonoUtils::Marshal::type_is_generic_ienumerable(reftype)) {
 				return Variant::ARRAY;
 				return Variant::ARRAY;
 			}
 			}
+
+			// GodotObject
+			GDMonoClass *type_class = p_type.type_class;
+			if (CACHED_CLASS(GodotObject)->is_assignable_from(type_class)) {
+				return Variant::OBJECT;
+			}
 		} break;
 		} break;
 
 
 		default: {
 		default: {
@@ -474,6 +480,11 @@ MonoObject *variant_to_mono_object_of_genericinst(const Variant &p_var, GDMonoCl
 		return GDMonoUtils::create_managed_from(p_var.operator Array(), godot_array_class);
 		return GDMonoUtils::create_managed_from(p_var.operator Array(), godot_array_class);
 	}
 	}
 
 
+	// GodotObject
+	if (CACHED_CLASS(GodotObject)->is_assignable_from(p_type_class)) {
+		return GDMonoUtils::unmanaged_get_managed(p_var.operator Object *());
+	}
+
 	ERR_FAIL_V_MSG(nullptr, "Attempted to convert Variant to unsupported generic type: '" +
 	ERR_FAIL_V_MSG(nullptr, "Attempted to convert Variant to unsupported generic type: '" +
 									p_type_class->get_full_name() + "'.");
 									p_type_class->get_full_name() + "'.");
 }
 }