mirror of
https://github.com/godotengine/godot-visual-script.git
synced 2026-01-04 18:10:07 +03:00
Merge pull request #60999 from reduz/replace-rbhash-by-hashmap
This commit is contained in:
@@ -1603,12 +1603,12 @@ void VisualScriptEditor::_remove_output_port(int p_id, int p_port) {
|
||||
List<VisualScript::DataConnection> data_connections;
|
||||
script->get_data_connection_list(&data_connections);
|
||||
|
||||
HashMap<int, Set<int>> conn_map;
|
||||
HashMap<int, RBSet<int>> conn_map;
|
||||
for (const VisualScript::DataConnection &E : data_connections) {
|
||||
if (E.from_node == p_id && E.from_port == p_port) {
|
||||
// Push into the connections map.
|
||||
if (!conn_map.has(E.to_node)) {
|
||||
conn_map.insert(E.to_node, Set<int>());
|
||||
conn_map.insert(E.to_node, RBSet<int>());
|
||||
}
|
||||
conn_map[E.to_node].insert(E.to_port);
|
||||
}
|
||||
@@ -1617,8 +1617,8 @@ void VisualScriptEditor::_remove_output_port(int p_id, int p_port) {
|
||||
undo_redo->add_do_method(vsn.ptr(), "remove_output_data_port", p_port);
|
||||
undo_redo->add_do_method(this, "_update_graph", p_id);
|
||||
|
||||
for (const KeyValue<int, Set<int>> &E : conn_map) {
|
||||
for (const Set<int>::Element *F = E.value.front(); F; F = F->next()) {
|
||||
for (const KeyValue<int, RBSet<int>> &E : conn_map) {
|
||||
for (const RBSet<int>::Element *F = E.value.front(); F; F = F->next()) {
|
||||
undo_redo->add_undo_method(script.ptr(), "data_connect", p_id, p_port, E.key, F->get());
|
||||
}
|
||||
}
|
||||
@@ -1760,14 +1760,14 @@ void VisualScriptEditor::_on_nodes_paste() {
|
||||
return;
|
||||
}
|
||||
|
||||
Map<int, int> remap;
|
||||
HashMap<int, int> remap;
|
||||
|
||||
undo_redo->create_action(TTR("Paste VisualScript Nodes"));
|
||||
int idc = script->get_available_id() + 1;
|
||||
|
||||
Set<int> to_select;
|
||||
RBSet<int> to_select;
|
||||
|
||||
Set<Vector2> existing_positions;
|
||||
RBSet<Vector2> existing_positions;
|
||||
|
||||
{
|
||||
List<int> nodes;
|
||||
@@ -1806,12 +1806,12 @@ void VisualScriptEditor::_on_nodes_paste() {
|
||||
undo_redo->add_undo_method(script.ptr(), "remove_node", new_id);
|
||||
}
|
||||
|
||||
for (Set<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<VisualScript::SequenceConnection>::Element *E = clipboard->sequence_connections.front(); E; E = E->next()) {
|
||||
undo_redo->add_do_method(script.ptr(), "sequence_connect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
|
||||
undo_redo->add_undo_method(script.ptr(), "sequence_disconnect", remap[E->get().from_node], E->get().from_output, remap[E->get().to_node]);
|
||||
}
|
||||
|
||||
for (Set<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<VisualScript::DataConnection>::Element *E = clipboard->data_connections.front(); E; E = E->next()) {
|
||||
undo_redo->add_do_method(script.ptr(), "data_connect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
|
||||
undo_redo->add_undo_method(script.ptr(), "data_disconnect", remap[E->get().from_node], E->get().from_port, remap[E->get().to_node], E->get().to_port);
|
||||
}
|
||||
@@ -1881,7 +1881,7 @@ void VisualScriptEditor::_on_nodes_delete() {
|
||||
}
|
||||
|
||||
void VisualScriptEditor::_on_nodes_duplicate() {
|
||||
Set<int> to_duplicate;
|
||||
RBSet<int> to_duplicate;
|
||||
|
||||
for (int i = 0; i < graph->get_child_count(); i++) {
|
||||
GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
|
||||
@@ -1900,10 +1900,10 @@ void VisualScriptEditor::_on_nodes_duplicate() {
|
||||
undo_redo->create_action(TTR("Duplicate VisualScript Nodes"));
|
||||
int idc = script->get_available_id() + 1;
|
||||
|
||||
Set<int> to_select;
|
||||
RBSet<int> to_select;
|
||||
HashMap<int, int> remap;
|
||||
|
||||
for (Set<int>::Element *F = to_duplicate.front(); F; F = F->next()) {
|
||||
for (RBSet<int>::Element *F = to_duplicate.front(); F; F = F->next()) {
|
||||
// Duplicate from the specific function but place it into the default func as it would lack the connections.
|
||||
Ref<VisualScriptNode> node = script->get_node(F->get());
|
||||
|
||||
@@ -3175,7 +3175,7 @@ void VisualScriptEditor::_graph_connect_to_empty(const String &p_from, int p_fro
|
||||
}
|
||||
}
|
||||
|
||||
VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &visited_nodes) {
|
||||
VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_action_node, int p_port_action_output, RBSet<int> &visited_nodes) {
|
||||
VisualScriptNode::TypeGuess tg;
|
||||
tg.type = Variant::NIL;
|
||||
|
||||
@@ -3226,7 +3226,7 @@ VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_port_ac
|
||||
}
|
||||
|
||||
void VisualScriptEditor::_port_action_menu(int p_option) {
|
||||
Set<int> vn;
|
||||
RBSet<int> vn;
|
||||
|
||||
switch (p_option) {
|
||||
case CREATE_CALL_SET_GET: {
|
||||
@@ -3338,7 +3338,7 @@ void VisualScriptEditor::_selected_connect_node(const String &p_text, const Stri
|
||||
#endif
|
||||
Vector2 pos = _get_pos_in_graph(port_action_pos);
|
||||
|
||||
Set<int> vn;
|
||||
RBSet<int> vn;
|
||||
bool port_node_exists = true;
|
||||
|
||||
if (drop_position != Vector2()) {
|
||||
@@ -4094,8 +4094,8 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
} break;
|
||||
case EDIT_CREATE_FUNCTION: {
|
||||
// Create Function.
|
||||
Map<int, Ref<VisualScriptNode>> nodes;
|
||||
Set<int> selections;
|
||||
HashMap<int, Ref<VisualScriptNode>> nodes;
|
||||
RBSet<int> selections;
|
||||
for (int i = 0; i < graph->get_child_count(); i++) {
|
||||
GraphNode *gn = Object::cast_to<GraphNode>(graph->get_child(i));
|
||||
if (gn) {
|
||||
@@ -4118,18 +4118,18 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
return; // nothing to be done if there are no valid nodes selected
|
||||
}
|
||||
|
||||
Set<VisualScript::SequenceConnection> seqmove;
|
||||
Set<VisualScript::DataConnection> datamove;
|
||||
RBSet<VisualScript::SequenceConnection> seqmove;
|
||||
RBSet<VisualScript::DataConnection> datamove;
|
||||
|
||||
Set<VisualScript::SequenceConnection> seqext;
|
||||
Set<VisualScript::DataConnection> dataext;
|
||||
RBSet<VisualScript::SequenceConnection> seqext;
|
||||
RBSet<VisualScript::DataConnection> dataext;
|
||||
|
||||
int start_node = -1;
|
||||
Set<int> end_nodes;
|
||||
RBSet<int> end_nodes;
|
||||
if (nodes.size() == 1) {
|
||||
Ref<VisualScriptNode> nd = script->get_node(nodes.front()->key());
|
||||
Ref<VisualScriptNode> nd = script->get_node(nodes.begin()->key);
|
||||
if (nd.is_valid() && nd->has_input_sequence_port()) {
|
||||
start_node = nodes.front()->key();
|
||||
start_node = nodes.begin()->key;
|
||||
} else {
|
||||
EditorNode::get_singleton()->show_warning(TTR("Select at least one node with sequence port."));
|
||||
return;
|
||||
@@ -4167,8 +4167,8 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
}
|
||||
} else {
|
||||
// Pick the node with input sequence.
|
||||
Set<int> nodes_from;
|
||||
Set<int> nodes_to;
|
||||
RBSet<int> nodes_from;
|
||||
RBSet<int> nodes_to;
|
||||
for (const VisualScript::SequenceConnection &E : seqs) {
|
||||
if (nodes.has(E.from_node) && nodes.has(E.to_node)) {
|
||||
seqmove.insert(E);
|
||||
@@ -4194,7 +4194,7 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
// If we still don't have a start node then,
|
||||
// run through the nodes and select the first tree node,
|
||||
// i.e. node without any input sequence but output sequence.
|
||||
for (Set<int>::Element *E = nodes_from.front(); E; E = E->next()) {
|
||||
for (RBSet<int>::Element *E = nodes_from.front(); E; E = E->next()) {
|
||||
if (!nodes_to.has(E->get())) {
|
||||
start_node = E->get();
|
||||
}
|
||||
@@ -4265,11 +4265,11 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
// Move the nodes.
|
||||
|
||||
// Handles reconnection of sequence connections on undo, start here in case of issues.
|
||||
for (Set<VisualScript::SequenceConnection>::Element *E = seqext.front(); E; E = E->next()) {
|
||||
for (RBSet<VisualScript::SequenceConnection>::Element *E = seqext.front(); E; E = E->next()) {
|
||||
undo_redo->add_do_method(script.ptr(), "sequence_disconnect", E->get().from_node, E->get().from_output, E->get().to_node);
|
||||
undo_redo->add_undo_method(script.ptr(), "sequence_connect", E->get().from_node, E->get().from_output, E->get().to_node);
|
||||
}
|
||||
for (Set<VisualScript::DataConnection>::Element *E = dataext.front(); E; E = E->next()) {
|
||||
for (RBSet<VisualScript::DataConnection>::Element *E = dataext.front(); E; E = E->next()) {
|
||||
undo_redo->add_do_method(script.ptr(), "data_disconnect", E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port);
|
||||
undo_redo->add_undo_method(script.ptr(), "data_connect", E->get().from_node, E->get().from_port, E->get().to_node, E->get().to_port);
|
||||
}
|
||||
@@ -4279,7 +4279,7 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
|
||||
// Could fail with the new changes, start here when searching for bugs in create function shortcut.
|
||||
int m = 1;
|
||||
for (Set<int>::Element *G = end_nodes.front(); G; G = G->next()) {
|
||||
for (RBSet<int>::Element *G = end_nodes.front(); G; G = G->next()) {
|
||||
Ref<VisualScriptReturn> ret_node;
|
||||
ret_node.instantiate();
|
||||
|
||||
@@ -4331,7 +4331,7 @@ void VisualScriptEditor::_menu_option(int p_what) {
|
||||
// This is likely going to be very slow and I am not sure if I should keep it,
|
||||
// but I hope that it will not be a problem considering that we won't be creating functions so frequently,
|
||||
// and cyclic connections would be a problem but hopefully we won't let them get to this point.
|
||||
void VisualScriptEditor::_get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const Set<int> &p_selected, Set<int> &r_end_nodes) {
|
||||
void VisualScriptEditor::_get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const RBSet<int> &p_selected, RBSet<int> &r_end_nodes) {
|
||||
for (const VisualScript::SequenceConnection &E : p_seqs) {
|
||||
int from = E.from_node;
|
||||
int to = E.to_node;
|
||||
@@ -4837,7 +4837,7 @@ Ref<VisualScriptNode> VisualScriptCustomNodes::create_node_custom(const String &
|
||||
}
|
||||
|
||||
VisualScriptCustomNodes *VisualScriptCustomNodes::singleton = nullptr;
|
||||
Map<String, Ref<RefCounted>> VisualScriptCustomNodes::custom_nodes;
|
||||
HashMap<String, Ref<RefCounted>> VisualScriptCustomNodes::custom_nodes;
|
||||
|
||||
VisualScriptCustomNodes::VisualScriptCustomNodes() {
|
||||
singleton = this;
|
||||
|
||||
@@ -142,9 +142,9 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
Vector<Pair<Variant::Type, String>> args;
|
||||
};
|
||||
|
||||
Map<StringName, Color> node_colors;
|
||||
HashMap<StringName, Color> node_colors;
|
||||
HashMap<StringName, Ref<StyleBox>> node_styles;
|
||||
Map<StringName, Variant::Type> base_type_map;
|
||||
HashMap<StringName, Variant::Type> base_type_map;
|
||||
|
||||
void _update_graph_connections();
|
||||
void _update_graph(int p_only_id = -1);
|
||||
@@ -159,11 +159,11 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
String _validate_name(const String &p_name) const;
|
||||
|
||||
struct Clipboard {
|
||||
Map<int, Ref<VisualScriptNode>> nodes;
|
||||
Map<int, Vector2> nodes_positions;
|
||||
HashMap<int, Ref<VisualScriptNode>> nodes;
|
||||
HashMap<int, Vector2> nodes_positions;
|
||||
|
||||
Set<VisualScript::SequenceConnection> sequence_connections;
|
||||
Set<VisualScript::DataConnection> data_connections;
|
||||
RBSet<VisualScript::SequenceConnection> sequence_connections;
|
||||
RBSet<VisualScript::DataConnection> data_connections;
|
||||
};
|
||||
|
||||
static Clipboard *clipboard;
|
||||
@@ -213,7 +213,7 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
void _end_node_move();
|
||||
void _move_node(int p_id, const Vector2 &p_to);
|
||||
|
||||
void _get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const Set<int> &p_selected, Set<int> &r_end_nodes);
|
||||
void _get_ends(int p_node, const List<VisualScript::SequenceConnection> &p_seqs, const RBSet<int> &p_selected, RBSet<int> &r_end_nodes);
|
||||
|
||||
void _node_moved(Vector2 p_from, Vector2 p_to, int p_id);
|
||||
void _remove_node(int p_id);
|
||||
@@ -287,7 +287,7 @@ class VisualScriptEditor : public ScriptEditorBase {
|
||||
void _draw_color_over_button(Object *obj, Color p_color);
|
||||
void _button_resource_previewed(const String &p_path, const Ref<Texture2D> &p_preview, const Ref<Texture2D> &p_small_preview, Variant p_ud);
|
||||
|
||||
VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, Set<int> &p_visited_nodes);
|
||||
VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node, int p_port_action_output, RBSet<int> &p_visited_nodes);
|
||||
|
||||
void _member_rmb_selected(const Vector2 &p_pos);
|
||||
void _member_option(int p_option);
|
||||
@@ -359,7 +359,7 @@ protected:
|
||||
static void _bind_methods();
|
||||
static VisualScriptCustomNodes *singleton;
|
||||
|
||||
static Map<String, Ref<RefCounted>> custom_nodes;
|
||||
static HashMap<String, Ref<RefCounted>> custom_nodes;
|
||||
static Ref<VisualScriptNode> create_node_custom(const String &p_name);
|
||||
|
||||
public:
|
||||
|
||||
@@ -726,7 +726,7 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_match_classes_init() {
|
||||
combined_docs.insert(class_doc.name, class_doc);
|
||||
}
|
||||
}
|
||||
iterator_doc = combined_docs.front();
|
||||
iterator_doc = combined_docs.begin();
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -787,7 +787,7 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_node_classes_build() {
|
||||
}
|
||||
|
||||
bool VisualScriptPropertySelector::SearchRunner::_phase_match_classes() {
|
||||
DocData::ClassDoc &class_doc = iterator_doc->value();
|
||||
DocData::ClassDoc &class_doc = iterator_doc->value;
|
||||
if (
|
||||
(!_is_class_disabled_by_feature_profile(class_doc.name) && !_is_class_disabled_by_scope(class_doc.name)) ||
|
||||
_match_visual_script(class_doc)) {
|
||||
@@ -909,13 +909,13 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_match_classes() {
|
||||
}
|
||||
}
|
||||
|
||||
iterator_doc = iterator_doc->next();
|
||||
++iterator_doc;
|
||||
return !iterator_doc;
|
||||
}
|
||||
|
||||
bool VisualScriptPropertySelector::SearchRunner::_phase_class_items_init() {
|
||||
results_tree->clear();
|
||||
iterator_match = matches.front();
|
||||
iterator_match = matches.begin();
|
||||
|
||||
root_item = results_tree->create_item();
|
||||
class_items.clear();
|
||||
@@ -928,7 +928,7 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_class_items() {
|
||||
return true;
|
||||
}
|
||||
|
||||
ClassMatch &match = iterator_match->value();
|
||||
ClassMatch &match = iterator_match->value;
|
||||
|
||||
if (search_flags & SEARCH_SHOW_HIERARCHY) {
|
||||
if (match.required()) {
|
||||
@@ -940,12 +940,12 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_class_items() {
|
||||
}
|
||||
}
|
||||
|
||||
iterator_match = iterator_match->next();
|
||||
++iterator_match;
|
||||
return !iterator_match;
|
||||
}
|
||||
|
||||
bool VisualScriptPropertySelector::SearchRunner::_phase_member_items_init() {
|
||||
iterator_match = matches.front();
|
||||
iterator_match = matches.begin();
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -955,7 +955,7 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_member_items() {
|
||||
return true;
|
||||
}
|
||||
|
||||
ClassMatch &match = iterator_match->value();
|
||||
ClassMatch &match = iterator_match->value;
|
||||
|
||||
TreeItem *parent = (search_flags & SEARCH_SHOW_HIERARCHY) ? class_items[match.doc->name] : root_item;
|
||||
bool constructor_created = false;
|
||||
@@ -986,7 +986,7 @@ bool VisualScriptPropertySelector::SearchRunner::_phase_member_items() {
|
||||
_create_theme_property_item(parent, match.doc, match.theme_properties[i]);
|
||||
}
|
||||
|
||||
iterator_match = iterator_match->next();
|
||||
++iterator_match;
|
||||
return !iterator_match;
|
||||
}
|
||||
|
||||
|
||||
@@ -179,15 +179,15 @@ class VisualScriptPropertySelector::SearchRunner : public RefCounted {
|
||||
Ref<Texture2D> empty_icon;
|
||||
Color disabled_color;
|
||||
|
||||
Map<String, DocData::ClassDoc>::Element *iterator_doc = nullptr;
|
||||
Map<String, ClassMatch> matches;
|
||||
Map<String, ClassMatch>::Element *iterator_match = nullptr;
|
||||
HashMap<String, DocData::ClassDoc>::Iterator iterator_doc;
|
||||
HashMap<String, ClassMatch> matches;
|
||||
HashMap<String, ClassMatch>::Iterator iterator_match;
|
||||
TreeItem *root_item = nullptr;
|
||||
Map<String, TreeItem *> class_items;
|
||||
HashMap<String, TreeItem *> class_items;
|
||||
TreeItem *matched_item = nullptr;
|
||||
float match_highest_score = 0;
|
||||
|
||||
Map<String, DocData::ClassDoc> combined_docs;
|
||||
HashMap<String, DocData::ClassDoc> combined_docs;
|
||||
List<String> vs_nodes;
|
||||
|
||||
bool _is_class_disabled_by_feature_profile(const StringName &p_class);
|
||||
|
||||
@@ -230,7 +230,7 @@ void VisualScript::_node_ports_changed(int p_id) {
|
||||
{
|
||||
List<SequenceConnection> to_remove;
|
||||
|
||||
for (Set<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
if (E->get().from_node == p_id && E->get().from_output >= vsn->get_output_sequence_port_count()) {
|
||||
to_remove.push_back(E->get());
|
||||
}
|
||||
@@ -248,7 +248,7 @@ void VisualScript::_node_ports_changed(int p_id) {
|
||||
{
|
||||
List<DataConnection> to_remove;
|
||||
|
||||
for (Set<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
if (E->get().from_node == p_id && E->get().from_port >= vsn->get_output_value_port_count()) {
|
||||
to_remove.push_back(E->get());
|
||||
}
|
||||
@@ -292,7 +292,7 @@ void VisualScript::remove_node(int p_id) {
|
||||
{
|
||||
List<SequenceConnection> to_remove;
|
||||
|
||||
for (Set<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
if (E->get().from_node == p_id || E->get().to_node == p_id) {
|
||||
to_remove.push_back(E->get());
|
||||
}
|
||||
@@ -307,7 +307,7 @@ void VisualScript::remove_node(int p_id) {
|
||||
{
|
||||
List<DataConnection> to_remove;
|
||||
|
||||
for (Set<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
for (RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
if (E->get().from_node == p_id || E->get().to_node == p_id) {
|
||||
to_remove.push_back(E->get());
|
||||
}
|
||||
@@ -384,7 +384,7 @@ bool VisualScript::has_sequence_connection(int p_from_node, int p_from_output, i
|
||||
}
|
||||
|
||||
void VisualScript::get_sequence_connection_list(List<SequenceConnection> *r_connection) const {
|
||||
for (const Set<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
for (const RBSet<SequenceConnection>::Element *E = sequence_connections.front(); E; E = E->next()) {
|
||||
r_connection->push_back(E->get());
|
||||
}
|
||||
}
|
||||
@@ -426,7 +426,7 @@ bool VisualScript::has_data_connection(int p_from_node, int p_from_port, int p_t
|
||||
}
|
||||
|
||||
bool VisualScript::is_input_value_port_connected(int p_node, int p_port) const {
|
||||
for (const Set<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
if (E->get().to_node == p_node && E->get().to_port == p_port) {
|
||||
return true;
|
||||
}
|
||||
@@ -435,7 +435,7 @@ bool VisualScript::is_input_value_port_connected(int p_node, int p_port) const {
|
||||
}
|
||||
|
||||
bool VisualScript::get_input_value_port_connection_source(int p_node, int p_port, int *r_node, int *r_port) const {
|
||||
for (const Set<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
if (E->get().to_node == p_node && E->get().to_port == p_port) {
|
||||
*r_node = E->get().from_node;
|
||||
*r_port = E->get().from_port;
|
||||
@@ -446,7 +446,7 @@ bool VisualScript::get_input_value_port_connection_source(int p_node, int p_port
|
||||
}
|
||||
|
||||
void VisualScript::get_data_connection_list(List<DataConnection> *r_connection) const {
|
||||
for (const Set<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
for (const RBSet<DataConnection>::Element *E = data_connections.front(); E; E = E->next()) {
|
||||
r_connection->push_back(E->get());
|
||||
}
|
||||
}
|
||||
@@ -751,7 +751,7 @@ void VisualScript::_update_placeholders() {
|
||||
return; // No bother if no placeholders.
|
||||
}
|
||||
List<PropertyInfo> pinfo;
|
||||
Map<StringName, Variant> values;
|
||||
HashMap<StringName, Variant> values;
|
||||
|
||||
for (const KeyValue<StringName, Variable> &E : variables) {
|
||||
if (!variables[E.key]._export) {
|
||||
@@ -764,7 +764,7 @@ void VisualScript::_update_placeholders() {
|
||||
values[p.name] = variables[E.key].default_value;
|
||||
}
|
||||
|
||||
for (Set<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
|
||||
for (RBSet<PlaceHolderScriptInstance *>::Element *E = placeholders.front(); E; E = E->next()) {
|
||||
E->get()->update(pinfo, values);
|
||||
}
|
||||
}
|
||||
@@ -779,7 +779,7 @@ ScriptInstance *VisualScript::instance_create(Object *p_this) {
|
||||
placeholders.insert(sins);
|
||||
|
||||
List<PropertyInfo> pinfo;
|
||||
Map<StringName, Variant> values;
|
||||
HashMap<StringName, Variant> values;
|
||||
|
||||
for (const KeyValue<StringName, Variable> &E : variables) {
|
||||
if (!variables[E.key]._export) {
|
||||
@@ -1078,7 +1078,7 @@ Dictionary VisualScript::_get_data() const {
|
||||
d["nodes"] = nds;
|
||||
|
||||
Array seqconns;
|
||||
for (const Set<SequenceConnection>::Element *F = sequence_connections.front(); F; F = F->next()) {
|
||||
for (const RBSet<SequenceConnection>::Element *F = sequence_connections.front(); F; F = F->next()) {
|
||||
seqconns.push_back(F->get().from_node);
|
||||
seqconns.push_back(F->get().from_output);
|
||||
seqconns.push_back(F->get().to_node);
|
||||
@@ -1086,7 +1086,7 @@ Dictionary VisualScript::_get_data() const {
|
||||
d["sequence_connections"] = seqconns;
|
||||
|
||||
Array dataconns;
|
||||
for (const Set<DataConnection>::Element *F = data_connections.front(); F; F = F->next()) {
|
||||
for (const RBSet<DataConnection>::Element *F = data_connections.front(); F; F = F->next()) {
|
||||
dataconns.push_back(F->get().from_node);
|
||||
dataconns.push_back(F->get().from_port);
|
||||
dataconns.push_back(F->get().to_node);
|
||||
@@ -1168,10 +1168,10 @@ bool VisualScript::inherits_script(const Ref<Script> &p_script) const {
|
||||
return this == p_script.ptr(); // There is no inheritance in visual scripts, so this is enough.
|
||||
}
|
||||
|
||||
Set<int> VisualScript::get_output_sequence_ports_connected(int from_node) {
|
||||
RBSet<int> VisualScript::get_output_sequence_ports_connected(int from_node) {
|
||||
List<VisualScript::SequenceConnection> *sc = memnew(List<VisualScript::SequenceConnection>);
|
||||
get_sequence_connection_list(sc);
|
||||
Set<int> connected;
|
||||
RBSet<int> connected;
|
||||
for (List<VisualScript::SequenceConnection>::Element *E = sc->front(); E; E = E->next()) {
|
||||
if (E->get().from_node == from_node) {
|
||||
connected.insert(E->get().from_output);
|
||||
@@ -1191,23 +1191,23 @@ VisualScript::~VisualScript() {
|
||||
////////////////////////////////////////////
|
||||
|
||||
bool VisualScriptInstance::set(const StringName &p_name, const Variant &p_value) {
|
||||
Map<StringName, Variant>::Element *E = variables.find(p_name);
|
||||
HashMap<StringName, Variant>::Iterator E = variables.find(p_name);
|
||||
if (!E) {
|
||||
return false;
|
||||
}
|
||||
|
||||
E->get() = p_value;
|
||||
E->value = p_value;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool VisualScriptInstance::get(const StringName &p_name, Variant &r_ret) const {
|
||||
const Map<StringName, Variant>::Element *E = variables.find(p_name);
|
||||
HashMap<StringName, Variant>::ConstIterator E = variables.find(p_name);
|
||||
if (!E) {
|
||||
return false;
|
||||
}
|
||||
|
||||
r_ret = E->get();
|
||||
r_ret = E->value;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -1315,9 +1315,9 @@ void VisualScriptInstance::_dependency_step(VisualScriptNodeInstance *node, int
|
||||
}
|
||||
|
||||
Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p_stack, int p_stack_size, VisualScriptNodeInstance *p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield, Callable::CallError &r_error) {
|
||||
Map<StringName, Function>::Element *F = functions.find(p_method);
|
||||
HashMap<StringName, Function>::Iterator F = functions.find(p_method);
|
||||
ERR_FAIL_COND_V(!F, Variant());
|
||||
Function *f = &F->get();
|
||||
Function *f = &F->value;
|
||||
|
||||
// This call goes separate, so it can be yielded and suspended.
|
||||
Variant *variant_stack = (Variant *)p_stack;
|
||||
@@ -1689,7 +1689,7 @@ Variant VisualScriptInstance::_call_internal(const StringName &p_method, void *p
|
||||
Variant VisualScriptInstance::callp(const StringName &p_method, const Variant **p_args, int p_argcount, Callable::CallError &r_error) {
|
||||
r_error.error = Callable::CallError::CALL_OK; //ok by default
|
||||
|
||||
Map<StringName, Function>::Element *F = functions.find(p_method);
|
||||
HashMap<StringName, Function>::Iterator F = functions.find(p_method);
|
||||
if (!F) {
|
||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
return Variant();
|
||||
@@ -1697,7 +1697,7 @@ Variant VisualScriptInstance::callp(const StringName &p_method, const Variant **
|
||||
|
||||
VSDEBUG("CALLING: " + String(p_method));
|
||||
|
||||
Function *f = &F->get();
|
||||
Function *f = &F->value;
|
||||
|
||||
int total_stack_size = 0;
|
||||
|
||||
@@ -1731,14 +1731,14 @@ Variant VisualScriptInstance::callp(const StringName &p_method, const Variant **
|
||||
|
||||
memset(pass_stack, 0, f->pass_stack_size * sizeof(int));
|
||||
|
||||
Map<int, VisualScriptNodeInstance *>::Element *E = instances.find(f->node);
|
||||
HashMap<int, VisualScriptNodeInstance *>::Iterator E = instances.find(f->node);
|
||||
if (!E) {
|
||||
r_error.error = Callable::CallError::CALL_ERROR_INVALID_METHOD;
|
||||
|
||||
ERR_FAIL_V_MSG(Variant(), "No VisualScriptFunction node in function.");
|
||||
}
|
||||
|
||||
VisualScriptNodeInstance *node = E->get();
|
||||
VisualScriptNodeInstance *node = E->value;
|
||||
|
||||
if (flow_stack) {
|
||||
flow_stack[0] = node->get_id();
|
||||
@@ -1839,7 +1839,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
function.pass_stack_size = 0;
|
||||
function.node_count = 0;
|
||||
|
||||
Map<StringName, int> local_var_indices;
|
||||
HashMap<StringName, int> local_var_indices;
|
||||
|
||||
if (function.node < 0) {
|
||||
VisualScriptLanguage::singleton->debug_break_parse(get_script()->get_path(), 0, "No start node in function: " + String(E.key));
|
||||
@@ -1861,15 +1861,15 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
max_input_args = MAX(max_input_args, function.argument_count);
|
||||
}
|
||||
// Function nodes graphs.
|
||||
Set<VisualScript::SequenceConnection> seqconns;
|
||||
Set<VisualScript::DataConnection> dataconns;
|
||||
Set<int> node_ids;
|
||||
RBSet<VisualScript::SequenceConnection> seqconns;
|
||||
RBSet<VisualScript::DataConnection> dataconns;
|
||||
RBSet<int> node_ids;
|
||||
node_ids.insert(function.node);
|
||||
{
|
||||
List<int> nd_queue;
|
||||
nd_queue.push_back(function.node);
|
||||
while (!nd_queue.is_empty()) {
|
||||
for (const Set<VisualScript::SequenceConnection>::Element *F = script->sequence_connections.front(); F; F = F->next()) {
|
||||
for (const RBSet<VisualScript::SequenceConnection>::Element *F = script->sequence_connections.front(); F; F = F->next()) {
|
||||
if (nd_queue.front()->get() == F->get().from_node && !node_ids.has(F->get().to_node)) {
|
||||
nd_queue.push_back(F->get().to_node);
|
||||
node_ids.insert(F->get().to_node);
|
||||
@@ -1881,10 +1881,10 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
nd_queue.pop_front();
|
||||
}
|
||||
HashMap<int, HashMap<int, Pair<int, int>>> dc_lut; // :: to -> to_port -> (from, from_port)
|
||||
for (const Set<VisualScript::DataConnection>::Element *F = script->data_connections.front(); F; F = F->next()) {
|
||||
for (const RBSet<VisualScript::DataConnection>::Element *F = script->data_connections.front(); F; F = F->next()) {
|
||||
dc_lut[F->get().to_node][F->get().to_port] = Pair<int, int>(F->get().from_node, F->get().from_port);
|
||||
}
|
||||
for (const Set<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
nd_queue.push_back(F->get());
|
||||
}
|
||||
List<int> dc_keys;
|
||||
@@ -1907,7 +1907,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
|
||||
//Multiple passes are required to set up this complex thing..
|
||||
//First create the nodes.
|
||||
for (const Set<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
Ref<VisualScriptNode> node = script->nodes[F->get()].node;
|
||||
|
||||
VisualScriptNodeInstance *instance = node->instantiate(this); // Create instance.
|
||||
@@ -1981,7 +1981,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
function.trash_pos = function.max_stack++; // create pos for trash
|
||||
|
||||
// Second pass, do data connections.
|
||||
for (const Set<VisualScript::DataConnection>::Element *F = dataconns.front(); F; F = F->next()) {
|
||||
for (const RBSet<VisualScript::DataConnection>::Element *F = dataconns.front(); F; F = F->next()) {
|
||||
VisualScript::DataConnection dc = F->get();
|
||||
ERR_CONTINUE(!instances.has(dc.from_node));
|
||||
VisualScriptNodeInstance *from = instances[dc.from_node];
|
||||
@@ -2008,7 +2008,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
}
|
||||
|
||||
// Third pass, do sequence connections.
|
||||
for (const Set<VisualScript::SequenceConnection>::Element *F = seqconns.front(); F; F = F->next()) {
|
||||
for (const RBSet<VisualScript::SequenceConnection>::Element *F = seqconns.front(); F; F = F->next()) {
|
||||
VisualScript::SequenceConnection sc = F->get();
|
||||
ERR_CONTINUE(!instances.has(sc.from_node));
|
||||
VisualScriptNodeInstance *from = instances[sc.from_node];
|
||||
@@ -2022,7 +2022,7 @@ void VisualScriptInstance::create(const Ref<VisualScript> &p_script, Object *p_o
|
||||
//fourth pass:
|
||||
// 1) unassigned input ports to default values
|
||||
// 2) connect unassigned output ports to trash
|
||||
for (const Set<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
for (const RBSet<int>::Element *F = node_ids.front(); F; F = F->next()) {
|
||||
ERR_CONTINUE(!instances.has(F->get()));
|
||||
|
||||
Ref<VisualScriptNode> node = script->nodes[F->get()].node;
|
||||
@@ -2223,7 +2223,7 @@ Ref<Script> VisualScriptLanguage::make_template(const String &p_template, const
|
||||
return script;
|
||||
}
|
||||
|
||||
bool VisualScriptLanguage::validate(const String &p_script, const String &p_path, List<String> *r_functions, List<ScriptLanguage::ScriptError> *r_errors, List<ScriptLanguage::Warning> *r_warnings, Set<int> *r_safe_lines) const {
|
||||
bool VisualScriptLanguage::validate(const String &p_script, const String &p_path, List<String> *r_functions, List<ScriptLanguage::ScriptError> *r_errors, List<ScriptLanguage::Warning> *r_warnings, RBSet<int> *r_safe_lines) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -214,8 +214,8 @@ private:
|
||||
|
||||
HashMap<int, NodeData> nodes; // Can be a sparse map.
|
||||
|
||||
Set<SequenceConnection> sequence_connections;
|
||||
Set<DataConnection> data_connections;
|
||||
RBSet<SequenceConnection> sequence_connections;
|
||||
RBSet<DataConnection> data_connections;
|
||||
|
||||
Vector2 scroll;
|
||||
|
||||
@@ -233,15 +233,15 @@ private:
|
||||
|
||||
HashMap<StringName, Function> functions;
|
||||
HashMap<StringName, Variable> variables;
|
||||
Map<StringName, Vector<Argument>> custom_signals;
|
||||
HashMap<StringName, Vector<Argument>> custom_signals;
|
||||
Vector<Multiplayer::RPCConfig> rpc_functions;
|
||||
|
||||
Map<Object *, VisualScriptInstance *> instances;
|
||||
HashMap<Object *, VisualScriptInstance *> instances;
|
||||
|
||||
bool is_tool_script;
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
Set<PlaceHolderScriptInstance *> placeholders;
|
||||
RBSet<PlaceHolderScriptInstance *> placeholders;
|
||||
// void _update_placeholder(PlaceHolderScriptInstance *p_placeholder);
|
||||
virtual void _placeholder_erased(PlaceHolderScriptInstance *p_placeholder) override;
|
||||
void _update_placeholders();
|
||||
@@ -283,7 +283,7 @@ public:
|
||||
void sequence_disconnect(int p_from_node, int p_from_output, int p_to_node);
|
||||
bool has_sequence_connection(int p_from_node, int p_from_output, int p_to_node) const;
|
||||
void get_sequence_connection_list(List<SequenceConnection> *r_connection) const;
|
||||
Set<int> get_output_sequence_ports_connected(int from_node);
|
||||
RBSet<int> get_output_sequence_ports_connected(int from_node);
|
||||
|
||||
void data_connect(int p_from_node, int p_from_port, int p_to_node, int p_to_port);
|
||||
void data_disconnect(int p_from_node, int p_from_port, int p_to_node, int p_to_port);
|
||||
@@ -317,7 +317,7 @@ public:
|
||||
void custom_signal_swap_argument(const StringName &p_func, int p_argidx, int p_with_argidx);
|
||||
void remove_custom_signal(const StringName &p_name);
|
||||
void rename_custom_signal(const StringName &p_name, const StringName &p_new_name);
|
||||
Set<int> get_output_sequence_ports_connected(const String &edited_func, int from_node);
|
||||
RBSet<int> get_output_sequence_ports_connected(const String &edited_func, int from_node);
|
||||
|
||||
void get_custom_signal_list(List<StringName> *r_custom_signals) const;
|
||||
|
||||
@@ -376,8 +376,8 @@ class VisualScriptInstance : public ScriptInstance {
|
||||
Object *owner = nullptr;
|
||||
Ref<VisualScript> script;
|
||||
|
||||
Map<StringName, Variant> variables; // Using variable path, not script.
|
||||
Map<int, VisualScriptNodeInstance *> instances;
|
||||
HashMap<StringName, Variant> variables; // Using variable path, not script.
|
||||
HashMap<int, VisualScriptNodeInstance *> instances;
|
||||
|
||||
struct Function {
|
||||
int node = 0;
|
||||
@@ -389,7 +389,7 @@ class VisualScriptInstance : public ScriptInstance {
|
||||
int argument_count = 0;
|
||||
};
|
||||
|
||||
Map<StringName, Function> functions;
|
||||
HashMap<StringName, Function> functions;
|
||||
|
||||
Vector<Variant> default_values;
|
||||
int max_input_args = 0;
|
||||
@@ -415,22 +415,22 @@ public:
|
||||
String to_string(bool *r_valid);
|
||||
|
||||
bool set_variable(const StringName &p_variable, const Variant &p_value) {
|
||||
Map<StringName, Variant>::Element *E = variables.find(p_variable);
|
||||
HashMap<StringName, Variant>::Iterator E = variables.find(p_variable);
|
||||
if (!E) {
|
||||
return false;
|
||||
}
|
||||
|
||||
E->get() = p_value;
|
||||
E->value = p_value;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool get_variable(const StringName &p_variable, Variant *r_variable) const {
|
||||
const Map<StringName, Variant>::Element *E = variables.find(p_variable);
|
||||
HashMap<StringName, Variant>::ConstIterator E = variables.find(p_variable);
|
||||
if (!E) {
|
||||
return false;
|
||||
}
|
||||
|
||||
*r_variable = E->get();
|
||||
*r_variable = E->value;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -480,7 +480,7 @@ public:
|
||||
typedef Ref<VisualScriptNode> (*VisualScriptNodeRegisterFunc)(const String &p_type);
|
||||
|
||||
class VisualScriptLanguage : public ScriptLanguage {
|
||||
Map<String, VisualScriptNodeRegisterFunc> register_funcs;
|
||||
HashMap<String, VisualScriptNodeRegisterFunc> register_funcs;
|
||||
|
||||
struct CallLevel {
|
||||
Variant *stack = nullptr;
|
||||
@@ -570,7 +570,7 @@ public:
|
||||
virtual void get_string_delimiters(List<String> *p_delimiters) const override;
|
||||
virtual bool is_using_templates() override;
|
||||
virtual Ref<Script> make_template(const String &p_template, const String &p_class_name, const String &p_base_class_name) const override;
|
||||
virtual bool validate(const String &p_script, const String &p_path = "", List<String> *r_functions = nullptr, List<ScriptLanguage::ScriptError> *r_errors = nullptr, List<ScriptLanguage::Warning> *r_warnings = nullptr, Set<int> *r_safe_lines = nullptr) const override;
|
||||
virtual bool validate(const String &p_script, const String &p_path = "", List<String> *r_functions = nullptr, List<ScriptLanguage::ScriptError> *r_errors = nullptr, List<ScriptLanguage::Warning> *r_warnings = nullptr, RBSet<int> *r_safe_lines = nullptr) const override;
|
||||
virtual Script *create_script() const override;
|
||||
virtual bool has_named_classes() const override;
|
||||
virtual bool supports_builtin_mode() const override;
|
||||
|
||||
@@ -3416,7 +3416,7 @@ VisualScriptConstructor::VisualScriptConstructor() {
|
||||
type = Variant::NIL;
|
||||
}
|
||||
|
||||
static Map<String, Pair<Variant::Type, MethodInfo>> constructor_map;
|
||||
static HashMap<String, Pair<Variant::Type, MethodInfo>> constructor_map;
|
||||
|
||||
static Ref<VisualScriptNode> create_constructor_node(const String &p_name) {
|
||||
ERR_FAIL_COND_V(!constructor_map.has(p_name), Ref<VisualScriptNode>());
|
||||
|
||||
Reference in New Issue
Block a user