From 4b5daf06efa1329d60be15f635dd49a7d2b2f056 Mon Sep 17 00:00:00 2001 From: Danil Alexeev Date: Fri, 18 Aug 2023 07:35:58 +0300 Subject: [PATCH] Editor: Improve signal callback generation --- editor/connections_dialog.cpp | 39 +++++++++++++++++++++++----- modules/gdscript/gdscript_editor.cpp | 2 +- modules/mono/csharp_script.cpp | 5 ++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/editor/connections_dialog.cpp b/editor/connections_dialog.cpp index 11fc5efd623b..6e6ffdc80d6d 100644 --- a/editor/connections_dialog.cpp +++ b/editor/connections_dialog.cpp @@ -517,16 +517,41 @@ String ConnectDialog::get_signature(const MethodInfo &p_method, PackedStringArra } const PropertyInfo &pi = p_method.arguments[i]; - String tname = "var"; - if (pi.type == Variant::OBJECT && pi.class_name != StringName()) { - tname = pi.class_name.operator String(); - } else if (pi.type != Variant::NIL) { - tname = Variant::get_type_name(pi.type); + String type_name; + switch (pi.type) { + case Variant::NIL: + type_name = "Variant"; + break; + case Variant::INT: + if ((pi.usage & PROPERTY_USAGE_CLASS_IS_ENUM) && pi.class_name != StringName() && !String(pi.class_name).begins_with("res://")) { + type_name = pi.class_name; + } else { + type_name = "int"; + } + break; + case Variant::ARRAY: + if (pi.hint == PROPERTY_HINT_ARRAY_TYPE && !pi.hint_string.is_empty() && !pi.hint_string.begins_with("res://")) { + type_name = "Array[" + pi.hint_string + "]"; + } else { + type_name = "Array"; + } + break; + case Variant::OBJECT: + if (pi.class_name != StringName()) { + type_name = pi.class_name; + } else { + type_name = "Object"; + } + break; + default: + type_name = Variant::get_type_name(pi.type); + break; } - signature.append((pi.name.is_empty() ? String("arg " + itos(i)) : pi.name) + ": " + tname); + String arg_name = pi.name.is_empty() ? "arg" + itos(i) : pi.name; + signature.append(arg_name + ": " + type_name); if (r_arg_names) { - r_arg_names->push_back(pi.name + ":" + tname); + r_arg_names->push_back(arg_name + ":" + type_name); } } diff --git a/modules/gdscript/gdscript_editor.cpp b/modules/gdscript/gdscript_editor.cpp index 6cad3b2b90ba..549f0be25c05 100644 --- a/modules/gdscript/gdscript_editor.cpp +++ b/modules/gdscript/gdscript_editor.cpp @@ -500,7 +500,7 @@ String GDScriptLanguage::make_function(const String &p_class, const String &p_na s += p_args[i].get_slice(":", 0); if (th) { String type = p_args[i].get_slice(":", 1); - if (!type.is_empty() && type != "var") { + if (!type.is_empty()) { s += ": " + type; } } diff --git a/modules/mono/csharp_script.cpp b/modules/mono/csharp_script.cpp index 9e23a2709388..b41f2155f8d5 100644 --- a/modules/mono/csharp_script.cpp +++ b/modules/mono/csharp_script.cpp @@ -435,6 +435,11 @@ static String variant_type_to_managed_name(const String &p_var_type_name) { return "Collections.Dictionary"; } + if (p_var_type_name.begins_with(Variant::get_type_name(Variant::ARRAY) + "[")) { + String element_type = p_var_type_name.trim_prefix(Variant::get_type_name(Variant::ARRAY) + "[").trim_suffix("]"); + return "Collections.Array<" + variant_type_to_managed_name(element_type) + ">"; + } + if (p_var_type_name == Variant::get_type_name(Variant::ARRAY)) { return "Collections.Array"; }