summaryrefslogtreecommitdiff
path: root/modules/mono
diff options
context:
space:
mode:
authorIgnacio Etcheverry <ignalfonsore@gmail.com>2019-04-29 21:20:05 +0200
committerIgnacio Etcheverry <ignalfonsore@gmail.com>2019-04-29 21:20:05 +0200
commit470b80cc559b8e8aff2466001e673c37e0efc5c9 (patch)
tree872cad833a86d760ddb87dc2bf17be40fa0c707c /modules/mono
parent7018de8425e8c2781071595fdcf565acdfde2be4 (diff)
C#: Support resource type hint in exported arrays
- Elements of types like PackedScene will display with the special editor for such type.
Diffstat (limited to 'modules/mono')
-rw-r--r--modules/mono/csharp_script.cpp3
-rw-r--r--modules/mono/mono_gd/gd_mono_marshal.cpp14
-rw-r--r--modules/mono/mono_gd/gd_mono_marshal.h3
3 files changed, 16 insertions, 4 deletions
diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp
index 27e579935f..ef09e76d11 100644
--- a/modules/mono/csharp_script.cpp
+++ b/modules/mono/csharp_script.cpp
@@ -2285,8 +2285,9 @@ bool CSharpScript::_get_member_export(GDMonoClass *p_class, IMonoClassMember *p_
hint = PROPERTY_HINT_RESOURCE_TYPE;
hint_string = NATIVE_GDMONOCLASS_NAME(field_native_class);
} else if (variant_type == Variant::ARRAY && export_info.array.element_type != Variant::NIL) {
+ String elem_type_str = itos(export_info.array.element_type);
hint = PROPERTY_HINT_TYPE_STRING;
- hint_string = itos(export_info.array.element_type) + ":";
+ hint_string = elem_type_str + "/" + elem_type_str + ":" + export_info.array.element_native_name;
} else if (variant_type == Variant::DICTIONARY && export_info.dictionary.key_type != Variant::NIL && export_info.dictionary.value_type != Variant::NIL) {
// TODO: There is no hint for this yet
} else {
diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp
index de4f3650bd..d586b73cf9 100644
--- a/modules/mono/mono_gd/gd_mono_marshal.cpp
+++ b/modules/mono/mono_gd/gd_mono_marshal.cpp
@@ -184,8 +184,13 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type, ExportInfo *r_e
reftype, &key_reftype, &value_reftype, &exc);
UNLIKELY_UNHANDLED_EXCEPTION(exc);
- r_export_info->dictionary.key_type = managed_to_variant_type(ManagedType::from_reftype(key_reftype));
- r_export_info->dictionary.value_type = managed_to_variant_type(ManagedType::from_reftype(value_reftype));
+ ManagedType key_type = ManagedType::from_reftype(key_reftype);
+ ManagedType value_type = ManagedType::from_reftype(value_reftype);
+
+ r_export_info->dictionary.key_type = managed_to_variant_type(key_type);
+ r_export_info->dictionary.key_native_name = NATIVE_GDMONOCLASS_NAME(key_type.type_class);
+ r_export_info->dictionary.value_type = managed_to_variant_type(value_type);
+ r_export_info->dictionary.value_native_name = NATIVE_GDMONOCLASS_NAME(value_type.type_class);
}
return Variant::DICTIONARY;
@@ -205,7 +210,10 @@ Variant::Type managed_to_variant_type(const ManagedType &p_type, ExportInfo *r_e
reftype, &elem_reftype, &exc);
UNLIKELY_UNHANDLED_EXCEPTION(exc);
- r_export_info->array.element_type = managed_to_variant_type(ManagedType::from_reftype(elem_reftype));
+ ManagedType elem_type = ManagedType::from_reftype(elem_reftype);
+
+ r_export_info->array.element_type = managed_to_variant_type(elem_type);
+ r_export_info->array.element_native_name = NATIVE_GDMONOCLASS_NAME(elem_type.type_class);
}
return Variant::ARRAY;
diff --git a/modules/mono/mono_gd/gd_mono_marshal.h b/modules/mono/mono_gd/gd_mono_marshal.h
index 4a73f9e3e6..8d3fd4b349 100644
--- a/modules/mono/mono_gd/gd_mono_marshal.h
+++ b/modules/mono/mono_gd/gd_mono_marshal.h
@@ -61,13 +61,16 @@ T unbox(MonoObject *p_obj) {
struct ExportInfo {
struct ArrayInfo {
Variant::Type element_type;
+ String element_native_name;
ArrayInfo() :
element_type(Variant::NIL) {}
} array;
struct DictionaryInfo {
Variant::Type key_type;
+ String key_native_name;
Variant::Type value_type;
+ String value_native_name;
DictionaryInfo() :
key_type(Variant::NIL),