Improve VisualScript search and instancing of nodes
Constructors are more accessible. Basic type methods are now based on ClassDB and not registerd_node_names. Selecting search_classes now automatically changes the scope.
This commit is contained in:
parent
690fefe43e
commit
8d4b2b0c30
4 changed files with 83 additions and 33 deletions
|
@ -3390,6 +3390,8 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri
|
||||||
n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_NODE_PATH);
|
n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_NODE_PATH);
|
||||||
n->set_base_path(drop_path);
|
n->set_base_path(drop_path);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_INSTANCE);
|
||||||
}
|
}
|
||||||
if (drop_node) {
|
if (drop_node) {
|
||||||
n->set_base_type(drop_node->get_class());
|
n->set_base_type(drop_node->get_class());
|
||||||
|
@ -3702,8 +3704,13 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri
|
||||||
Object::cast_to<VisualScriptTypeCast>(vnode.ptr())->set_base_type(base_type);
|
Object::cast_to<VisualScriptTypeCast>(vnode.ptr())->set_base_type(base_type);
|
||||||
Object::cast_to<VisualScriptTypeCast>(vnode.ptr())->set_base_script(base_script);
|
Object::cast_to<VisualScriptTypeCast>(vnode.ptr())->set_base_script(base_script);
|
||||||
} else if (Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())) {
|
} else if (Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())) {
|
||||||
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_base_type(base_type);
|
if (base_type_map.has(base_type)) {
|
||||||
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_base_script(base_script);
|
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_basic_type(base_type_map[base_type]);
|
||||||
|
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_call_mode(VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE);
|
||||||
|
} else {
|
||||||
|
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_base_type(base_type);
|
||||||
|
Object::cast_to<VisualScriptFunctionCall>(vnode.ptr())->set_base_script(base_script);
|
||||||
|
}
|
||||||
} else if (Object::cast_to<VisualScriptPropertySet>(vnode.ptr())) {
|
} else if (Object::cast_to<VisualScriptPropertySet>(vnode.ptr())) {
|
||||||
Object::cast_to<VisualScriptPropertySet>(vnode.ptr())->set_base_type(base_type);
|
Object::cast_to<VisualScriptPropertySet>(vnode.ptr())->set_base_type(base_type);
|
||||||
Object::cast_to<VisualScriptPropertySet>(vnode.ptr())->set_base_script(base_script);
|
Object::cast_to<VisualScriptPropertySet>(vnode.ptr())->set_base_script(base_script);
|
||||||
|
@ -4751,6 +4758,35 @@ VisualScriptEditor::VisualScriptEditor() {
|
||||||
popup_menu->add_item(TTR("Duplicate"), EDIT_DUPLICATE_NODES);
|
popup_menu->add_item(TTR("Duplicate"), EDIT_DUPLICATE_NODES);
|
||||||
popup_menu->add_item(TTR("Clear Copy Buffer"), EDIT_CLEAR_COPY_BUFFER);
|
popup_menu->add_item(TTR("Clear Copy Buffer"), EDIT_CLEAR_COPY_BUFFER);
|
||||||
popup_menu->connect("id_pressed", callable_mp(this, &VisualScriptEditor::_menu_option));
|
popup_menu->connect("id_pressed", callable_mp(this, &VisualScriptEditor::_menu_option));
|
||||||
|
|
||||||
|
base_type_map.insert("String", Variant::STRING);
|
||||||
|
base_type_map.insert("Vector2", Variant::VECTOR2);
|
||||||
|
base_type_map.insert("Vector2i", Variant::VECTOR2I);
|
||||||
|
base_type_map.insert("Rect2", Variant::RECT2);
|
||||||
|
base_type_map.insert("Rect2i", Variant::RECT2I);
|
||||||
|
base_type_map.insert("Vector3", Variant::VECTOR3);
|
||||||
|
base_type_map.insert("Vector3i", Variant::VECTOR3I);
|
||||||
|
base_type_map.insert("Transform2D", Variant::TRANSFORM2D);
|
||||||
|
base_type_map.insert("Plane", Variant::PLANE);
|
||||||
|
base_type_map.insert("Quaternion", Variant::QUATERNION);
|
||||||
|
base_type_map.insert("AABB", Variant::AABB);
|
||||||
|
base_type_map.insert("Basis", Variant::BASIS);
|
||||||
|
base_type_map.insert("Transform3D", Variant::TRANSFORM3D);
|
||||||
|
base_type_map.insert("Color", Variant::COLOR);
|
||||||
|
base_type_map.insert("NodePath", Variant::NODE_PATH);
|
||||||
|
base_type_map.insert("RID", Variant::RID);
|
||||||
|
base_type_map.insert("Callable", Variant::CALLABLE);
|
||||||
|
base_type_map.insert("Dictionary", Variant::DICTIONARY);
|
||||||
|
base_type_map.insert("Array", Variant::ARRAY);
|
||||||
|
base_type_map.insert("PackedByteArray", Variant::PACKED_BYTE_ARRAY);
|
||||||
|
base_type_map.insert("PackedInt32Array", Variant::PACKED_INT32_ARRAY);
|
||||||
|
base_type_map.insert("PackedFloat32Array", Variant::PACKED_FLOAT32_ARRAY);
|
||||||
|
base_type_map.insert("PackedInt64Array", Variant::PACKED_INT64_ARRAY);
|
||||||
|
base_type_map.insert("PackedFloat64Array", Variant::PACKED_FLOAT64_ARRAY);
|
||||||
|
base_type_map.insert("PackedStringArray", Variant::PACKED_STRING_ARRAY);
|
||||||
|
base_type_map.insert("PackedVector2Array", Variant::PACKED_VECTOR2_ARRAY);
|
||||||
|
base_type_map.insert("PackedVector3Array", Variant::PACKED_VECTOR3_ARRAY);
|
||||||
|
base_type_map.insert("PackedColorArray", Variant::PACKED_COLOR_ARRAY);
|
||||||
}
|
}
|
||||||
|
|
||||||
VisualScriptEditor::~VisualScriptEditor() {
|
VisualScriptEditor::~VisualScriptEditor() {
|
||||||
|
|
|
@ -144,6 +144,7 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||||
|
|
||||||
Map<StringName, Color> node_colors;
|
Map<StringName, Color> node_colors;
|
||||||
HashMap<StringName, Ref<StyleBox>> node_styles;
|
HashMap<StringName, Ref<StyleBox>> node_styles;
|
||||||
|
Map<StringName, Variant::Type> base_type_map;
|
||||||
|
|
||||||
void _update_graph_connections();
|
void _update_graph_connections();
|
||||||
void _update_graph(int p_only_id = -1);
|
void _update_graph(int p_only_id = -1);
|
||||||
|
|
|
@ -86,6 +86,13 @@ void VisualScriptPropertySelector::_update_results_s(String p_string) {
|
||||||
_update_results();
|
_update_results();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VisualScriptPropertySelector::_update_results_search_all() {
|
||||||
|
if (search_classes->is_pressed()) {
|
||||||
|
scope_combo->select(COMBO_ALL);
|
||||||
|
}
|
||||||
|
_update_results();
|
||||||
|
}
|
||||||
|
|
||||||
void VisualScriptPropertySelector::_update_results() {
|
void VisualScriptPropertySelector::_update_results() {
|
||||||
_update_icons();
|
_update_icons();
|
||||||
search_runner = Ref<SearchRunner>(memnew(SearchRunner(this, results_tree)));
|
search_runner = Ref<SearchRunner>(memnew(SearchRunner(this, results_tree)));
|
||||||
|
@ -167,7 +174,7 @@ void VisualScriptPropertySelector::select_method_from_base_type(const String &p_
|
||||||
search_properties->set_pressed(false);
|
search_properties->set_pressed(false);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(2); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated"
|
scope_combo->select(COMBO_BASE);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -201,8 +208,7 @@ void VisualScriptPropertySelector::select_from_base_type(const String &p_base, c
|
||||||
search_properties->set_pressed(true);
|
search_properties->set_pressed(true);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
// When class is Input only show inheritors
|
scope_combo->select(COMBO_RELATED);
|
||||||
scope_combo->select(0); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated"
|
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -234,7 +240,7 @@ void VisualScriptPropertySelector::select_from_script(const Ref<Script> &p_scrip
|
||||||
search_properties->set_pressed(true);
|
search_properties->set_pressed(true);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(2); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated"
|
scope_combo->select(COMBO_BASE);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -264,7 +270,7 @@ void VisualScriptPropertySelector::select_from_basic_type(Variant::Type p_type,
|
||||||
search_properties->set_pressed(true);
|
search_properties->set_pressed(true);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(2); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated" //id5 "Search All"
|
scope_combo->select(COMBO_BASE);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -294,7 +300,7 @@ void VisualScriptPropertySelector::select_from_action(const String &p_type, cons
|
||||||
search_properties->set_pressed(false);
|
search_properties->set_pressed(false);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(0); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated" //id5 "Search All"
|
scope_combo->select(COMBO_RELATED);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -330,7 +336,7 @@ void VisualScriptPropertySelector::select_from_instance(Object *p_instance, cons
|
||||||
search_properties->set_pressed(true);
|
search_properties->set_pressed(true);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(2); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated" //id5 "Search All"
|
scope_combo->select(COMBO_BASE);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -363,7 +369,7 @@ void VisualScriptPropertySelector::select_from_visual_script(const Ref<Script> &
|
||||||
search_properties->set_pressed(true);
|
search_properties->set_pressed(true);
|
||||||
search_theme_items->set_pressed(false);
|
search_theme_items->set_pressed(false);
|
||||||
|
|
||||||
scope_combo->select(2); //id0 = "Search Related" //id2 = "Search Base" //id3 = "Search Inheriters" //id4 = "Search Unrelated" //id5 "Search All"
|
scope_combo->select(COMBO_BASE);
|
||||||
|
|
||||||
results_tree->clear();
|
results_tree->clear();
|
||||||
show_window(.5f);
|
show_window(.5f);
|
||||||
|
@ -418,7 +424,7 @@ VisualScriptPropertySelector::VisualScriptPropertySelector() {
|
||||||
search_classes = memnew(Button);
|
search_classes = memnew(Button);
|
||||||
search_classes->set_flat(true);
|
search_classes->set_flat(true);
|
||||||
search_classes->set_tooltip(TTR("Search Classes"));
|
search_classes->set_tooltip(TTR("Search Classes"));
|
||||||
search_classes->connect("pressed", callable_mp(this, &VisualScriptPropertySelector::_update_results));
|
search_classes->connect("pressed", callable_mp(this, &VisualScriptPropertySelector::_update_results_search_all));
|
||||||
search_classes->set_toggle_mode(true);
|
search_classes->set_toggle_mode(true);
|
||||||
search_classes->set_pressed(true);
|
search_classes->set_pressed(true);
|
||||||
search_classes->set_focus_mode(Control::FOCUS_NONE);
|
search_classes->set_focus_mode(Control::FOCUS_NONE);
|
||||||
|
@ -739,49 +745,46 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_node_classes_build() {
|
||||||
if (vs_nodes.is_empty()) {
|
if (vs_nodes.is_empty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String registerd_node_name = vs_nodes[0];
|
String registered_node_name = vs_nodes[0];
|
||||||
vs_nodes.pop_front();
|
vs_nodes.pop_front();
|
||||||
|
|
||||||
Vector<String> path = registerd_node_name.split("/");
|
Vector<String> path = registered_node_name.split("/");
|
||||||
if (path[0] == "constants") {
|
if (path[0] == "constants") {
|
||||||
_add_class_doc(registerd_node_name, "", "constants");
|
_add_class_doc(registered_node_name, "", "constants");
|
||||||
} else if (path[0] == "custom") {
|
} else if (path[0] == "custom") {
|
||||||
_add_class_doc(registerd_node_name, "", "custom");
|
_add_class_doc(registered_node_name, "", "custom");
|
||||||
} else if (path[0] == "data") {
|
} else if (path[0] == "data") {
|
||||||
_add_class_doc(registerd_node_name, "", "data");
|
_add_class_doc(registered_node_name, "", "data");
|
||||||
} else if (path[0] == "flow_control") {
|
} else if (path[0] == "flow_control") {
|
||||||
_add_class_doc(registerd_node_name, "", "flow_control");
|
_add_class_doc(registered_node_name, "", "flow_control");
|
||||||
} else if (path[0] == "functions") {
|
} else if (path[0] == "functions") {
|
||||||
if (path[1] == "built_in") {
|
if (path[1] == "built_in") {
|
||||||
_add_class_doc(registerd_node_name, "functions", "built_in");
|
_add_class_doc(registered_node_name, "functions", "built_in");
|
||||||
} else if (path[1] == "by_type") {
|
} else if (path[1] == "by_type") {
|
||||||
if (search_flags & SEARCH_CLASSES) {
|
// No action is required.
|
||||||
_add_class_doc(registerd_node_name, path[2], "by_type_class");
|
// Using function references from ClassDB to remove confusion for users.
|
||||||
}
|
|
||||||
} else if (path[1] == "constructors") {
|
} else if (path[1] == "constructors") {
|
||||||
if (search_flags & SEARCH_CLASSES) {
|
_add_class_doc(registered_node_name, "", "constructors");
|
||||||
_add_class_doc(registerd_node_name, path[2].substr(0, path[2].find_char('(')), "constructors_class");
|
|
||||||
}
|
|
||||||
} else if (path[1] == "deconstruct") {
|
} else if (path[1] == "deconstruct") {
|
||||||
_add_class_doc(registerd_node_name, "", "deconstruct");
|
_add_class_doc(registered_node_name, "", "deconstruct");
|
||||||
} else if (path[1] == "wait") {
|
} else if (path[1] == "wait") {
|
||||||
_add_class_doc(registerd_node_name, "functions", "yield");
|
_add_class_doc(registered_node_name, "functions", "yield");
|
||||||
} else {
|
} else {
|
||||||
_add_class_doc(registerd_node_name, "functions", "");
|
_add_class_doc(registered_node_name, "functions", "");
|
||||||
}
|
}
|
||||||
} else if (path[0] == "index") {
|
} else if (path[0] == "index") {
|
||||||
_add_class_doc(registerd_node_name, "", "index");
|
_add_class_doc(registered_node_name, "", "index");
|
||||||
} else if (path[0] == "operators") {
|
} else if (path[0] == "operators") {
|
||||||
if (path[1] == "bitwise") {
|
if (path[1] == "bitwise") {
|
||||||
_add_class_doc(registerd_node_name, "operators", "bitwise");
|
_add_class_doc(registered_node_name, "operators", "bitwise");
|
||||||
} else if (path[1] == "compare") {
|
} else if (path[1] == "compare") {
|
||||||
_add_class_doc(registerd_node_name, "operators", "compare");
|
_add_class_doc(registered_node_name, "operators", "compare");
|
||||||
} else if (path[1] == "logic") {
|
} else if (path[1] == "logic") {
|
||||||
_add_class_doc(registerd_node_name, "operators", "logic");
|
_add_class_doc(registered_node_name, "operators", "logic");
|
||||||
} else if (path[1] == "math") {
|
} else if (path[1] == "math") {
|
||||||
_add_class_doc(registerd_node_name, "operators", "math");
|
_add_class_doc(registered_node_name, "operators", "math");
|
||||||
} else {
|
} else {
|
||||||
_add_class_doc(registerd_node_name, "operators", "");
|
_add_class_doc(registered_node_name, "operators", "");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -62,6 +62,15 @@ class VisualScriptPropertySelector : public ConfirmationDialog {
|
||||||
SCOPE_ALL = SCOPE_BASE | SCOPE_INHERITERS | SCOPE_UNRELATED
|
SCOPE_ALL = SCOPE_BASE | SCOPE_INHERITERS | SCOPE_UNRELATED
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum ScopeCombo {
|
||||||
|
COMBO_RELATED,
|
||||||
|
COMBO_SEPARATOR,
|
||||||
|
COMBO_BASE,
|
||||||
|
COMBO_INHERITERS,
|
||||||
|
COMBO_UNRELATED,
|
||||||
|
COMBO_ALL,
|
||||||
|
};
|
||||||
|
|
||||||
LineEdit *search_box = nullptr;
|
LineEdit *search_box = nullptr;
|
||||||
|
|
||||||
Button *case_sensitive_button = nullptr;
|
Button *case_sensitive_button = nullptr;
|
||||||
|
@ -88,6 +97,7 @@ class VisualScriptPropertySelector : public ConfirmationDialog {
|
||||||
void _sbox_input(const Ref<InputEvent> &p_ie);
|
void _sbox_input(const Ref<InputEvent> &p_ie);
|
||||||
void _update_results_i(int p_int);
|
void _update_results_i(int p_int);
|
||||||
void _update_results_s(String p_string);
|
void _update_results_s(String p_string);
|
||||||
|
void _update_results_search_all();
|
||||||
void _update_results();
|
void _update_results();
|
||||||
|
|
||||||
void _confirmed();
|
void _confirmed();
|
||||||
|
|
Loading…
Reference in a new issue